VBA运行时错误1004设置最小和最大图表轴值

时间:2018-08-27 15:54:32

标签: excel-vba charts max axis min

我有一个MS Acces Db。 我有一个命令按钮可将查询导出(TransferSpreadsheet acExport)到Excel并创建图表(设置ch = ws.Shapes.AddChart.Chart)

这是我的代码,可以正常工作:

class Model(QAbstractTableModel):
    def __init__(self, parent=None, *args):
        QAbstractTableModel.__init__(self, parent, *args)
        self.items = ['Item_A_001','Item_A_002','Item_B_001','Item_B_002']

    def rowCount(self, parent=QModelIndex()):
        return len(self.items)

    def columnCount(self, parent=QModelIndex()):
        return 1

    def data(self, index, role=Qt.DisplayRole):
        row = index.row()
        if 0 <= row < self.rowCount() and role == Qt.DisplayRole:
            return self.items[row]


class Proxy(QSortFilterProxyModel):
    def filterAcceptsRow(self, row, parent):
        return '_B_' in self.sourceModel().data(self.sourceModel().index(row, 0))

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

每当我添加到代码中时:

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显示错误1004“应用程序定义或对象” 我很困惑为什么我的代码不运行那些指令

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

祝一切顺利

2 个答案:

答案 0 :(得分:0)

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

请尝试:

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

答案 1 :(得分:0)

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

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

的帮助下