【问题标题】:VBA Runtime Error 1004 setting min and max chart axis valuesVBA 运行时错误 1004 设置最小和最大图表轴值
【发布时间】:2018-08-27 15:54:31
【问题描述】:

我有一个 MS Acces 数据库。 我有一个命令按钮来导出(TransferSpreadsheet acExport)查询到 Excel 并创建一个图表(Set ch = ws.Shapes.AddChart.Chart)

这是我的代码工作正常:

With ch
  .ChartType = xlColumnClustered
  .SeriesCollection(2).AxisGroup = 2
  .SeriesCollection(2).ChartType = xlLineMarkers
  .ChartGroups(1).GapWidth = 69
  .Axes(xlValue).MajorGridlines.Delete
  .Axes(xlCategory, xlPrimary).HasTitle = False
  .Axes(xlValue, xlPrimary).HasTitle = False
  .SetElement (msoElementLegendBottom)
End with

我需要使用 vba 设置图表的轴最大值和最小值。我需要参考工作表中已有的图表。

任何时候我添加到我的代码中:

.MaximumScale = ActiveSheet.Range("Axis_max").Value
.MinimumScale = ActiveSheet.Range("Axis_min").Value

VBA 显示 ERROR 1004 “Application-defined or Object” 我很困惑为什么我的代码不运行这些指令

如果有人可以指导我,我真的很感激,

一切顺利

【问题讨论】:

  • 你能验证ActiveSheet.Range("Axis_max").Value返回一个数值吗?宁愿从 specific 工作表中提取值,例如 Sheets("chart_options").Range("Axis_max").Value
  • ja72 感谢您的回复。当我键入时测试您的建议时:ActiveSheet.Range("Axis_max") VBA 显示 ERROR 1004 并且 VBA 将代码行涂成黄色另一方面,当我键入 Sheets("chart_options").Range("Axis_max") 时。值 VBA 显示错误 9 并且 VBA 将代码行涂成黄色
  • 好吧,您没有名为“chart_options”的工作表。我只是将这个名称编为一个占位符,用于存储轴缩放信息。您需要使用存储这些值的任何工作表名称。
  • Ja72 当我键入而不是 ("chart_options") 时,"Sheet1" VBA 显示错误 1004 当我键入而不是 ("chart_options") 时,"qryname" VBA 显示错误 1004 感谢您的帮助。
  • 如果这是 Access VBA 而不是 Excel VBA,则 ActiveSheet()Sheets() 之类的函数将不起作用。 Access 对电子表格一无所知。您需要参考创建的 Excel 工作簿才能完成这项工作。

标签: excel vba charts axis


【解决方案1】:

您的问题是.MinimumScale.MaximumScale 不是Chart 的属性,而是Axis 对象的属性。

试试吧:

.Axes(xlCategory, xlPrimary).MaximumScale = Sheet1.Range("Axis_max").Value
.Axes(xlCategory, xlPrimary).MinimumScale = Sheet1.Range("Axis_min").Value

【讨论】:

  • ja72 我无法运行您的代码。几个小时以来,我一直在谷歌搜索,我从 Shai Rado 在这里找到了这段代码,我刚刚适应了我并且工作正常。但是,使用此代码,我必须输入最小值和最大值。我需要 VBA 从 Sheet1(范围 B2 和范围 C2)中读取这些值,以在 Sheet1 中设置轴图值。 Shai Rado 链接:stackoverflow.com/questions/41414615/…
  • 问题是无法设置比例,或者无法读取值。链接代码与我的答案相同,只是不是硬编码一个值,而是从Sheet1 读取。
  • 我无法使用代码设置比例。我认为我的问题是我不知道之前必须输入的代码: .Axes(xlCategory, xlPrimary).MaximumScale = Sheet1.Range("Axis_max").Value .Axes(xlCategory, xlPrimary).MinimumScale = Sheet1 .Range("Axis_min").Value
  • 如果我录制宏以在工作表中插入图表,我该如何使用这些代码行: .MaximumScale = ActiveSheet.Range("Axis_max").Value .MinimumScale = ActiveSheet.Range( "Axis_min").Value 我一直在谷歌搜索没有成功。非常感谢您的帮助。
【解决方案2】:

最后,我找到了设置最小和最大垂直图表轴的代码。

With ch
.ChartType = xlColumnClustered
.SeriesCollection(2).AxisGroup = 2
.SeriesCollection(2).ChartType = xlLineMarkers
.ChartGroups(1).GapWidth = 69

myMax = DMax("Total_Sal", "qry_task")
myMin = DMin("Total_Sal", "qry_task")

 With .Axes(xlvalue, xlPrimary)
        .MinimumScale = myMin
        .MaximumScale = myMax
 End With

myMax = DMax("Task_Val", "qry_task")
myMin = DMin("Task_Val", "qry_task")
With .Axes(xlvalue, xlSecondary)
        .MinimumScale = myMin
        .MaximumScale = myMax
    End With

结束

非常感谢 ja72 最初的帮助

为了完成我的代码,我得到了 Andy Pope 的帮助

【讨论】:

    猜你喜欢
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多