首页 > 解决方案 > Access VBA 中的图表/图形

问题描述

如何使用 MS Access VBA 中的数据初始化图表?最终我在这里找到了一个建议,通过一些修改让智能感知感到高兴,并产生了这段代码:

Dim objchart As Chart

Dim arrData(3, 1) As Double

arrData(0, 0) = 1
arrData(1, 0) = 1
arrData(2, 0) = 1
arrData(3, 0) = 1

arrData(0, 1) = 1
arrData(1, 1) = 1
arrData(2, 1) = 1
arrData(3, 1) = 1

Set objchart = Me.Chart1

With objchart
    .ChartTitle = "test"
    .ChartType = acChartLine
    .ChartValues = arrData
End With

但这抛出

编译错误:类型不匹配

在线上

    .ChartValues = arrData

我已将其尝试为“行优先”(arrData(1, 3)),并且也只是传入一个数组(arrData(3))。这些都会导致相同的类型不匹配错误。虽然智能感知告诉我 Chart1 存在,并且 .ChartValues 是一个有效字段,但它并没有告诉我它期待什么样的对象。我已经对此进行了广泛的搜索,但结果却是空的。我能找到的有关 Access VBA 的最佳参考资料是构建 VBA 应用程序都没有详细介绍 Charts 或 ChartObjects。

显然我想克服这种类型不匹配的错误。当最接近语言参考的东西对您需要的语言保持沉默时,如果有人可以就如何解决这个问题给我一些一般性建议,那就更好了。

标签: vbams-accesscharts

解决方案


这是一种方法。首先,创建一个新表并添加一些数据:

Private Sub Form_Load()

  Dim db As DAO.Database
  Dim rec As Recordset
  Dim tbl As DAO.TableDef

  Set db = CurrentDb
  Set tbl = db.CreateTableDef("tbl")

  With tbl
    .Fields.Append .CreateField("first", dbInteger)
    .Fields.Append .CreateField("second", dbInteger)
  End With

  db.TableDefs.Append tbl
  db.TableDefs.Refresh

  Set rec = db.OpenRecordset("tbl")

  rec.AddNew
  rec("first").Value = 0
  rec("second").Value = 2
  rec.Update

  rec.AddNew
  rec("first").Value = 1
  rec("second").Value = 2
  rec.Update

  rec.AddNew
  rec("first").Value = 2
  rec("second").Value = 2
  rec.Update

  rec.AddNew
  rec("first").Value = 3
  rec("second").Value = 2
  rec.Update

  Set rec = Nothing
  Set db = Nothing

End Sub

其次,通过引用新表绘制数据:

Private Sub command0_click()

  Dim objchart As Chart
  Set objchart = Me.Chart1

  With objchart
    .ChartTitle = "tbl: second ~ first"
    .RowSource = "tbl"
    .ChartAxis = "first"
    .ChartValues = "second"
  End With

End Sub

推荐阅读