【问题标题】:How can I resize multiple charts to different sizes in Excel VBA for Mac?如何在 Excel VBA for Mac 中将多个图表调整为不同大小?
【发布时间】:2020-07-03 06:36:10
【问题描述】:

下面的代码可以很好地调整工作表中单个图表的大小,或将多个图表调整为相同大小。我正在寻找的是一种根据该工作表上的单元格值来不同地调整(和定位)每个图表的大小(和位置)的方法。

Sub UpdateChart()
Dim objCht As ChartObject
    For Each objCht In ActiveSheet.ChartObjects
      With objCht.Chart
     With .Axes(xlValue)
        .MaximumScale = ActiveSheet.Range("E6").Value
        .MinimumScale = ActiveSheet.Range("E5").Value
    End With
        .Parent.Height = ActiveSheet.Range("E7").Value
    With .Axes(xlCategory)
        .MaximumScale = ActiveSheet.Range("D6").Value
       .MinimumScale = ActiveSheet.Range("D5").Value
    End With
        .Parent.Width = ActiveSheet.Range("D7").Value
End With
Next objCht
End Sub

在 For/Next 循环中,我尝试引用图表名称或 objCht 索引值,但没有成功。

Sub UpdateSomeCharts()

Dim objCht As ChartObject
    For Each objCht In ActiveSheet.ChartObjects
        With objCht.Chart
        If objCht.Chart.Name = "Part 1 Chart_Plan" Then
        With .Axes(xlValue)
            .MaximumScale = ActiveSheet.Range("E6").Value
            .MinimumScale = ActiveSheet.Range("E5").Value
        End With
            Parent.Height = ActiveSheet.Range("E7").Value
        With .Axes(xlCategory)
            .MaximumScale = ActiveSheet.Range("D6").Value
            .MinimumScale = ActiveSheet.Range("D5").Value
        End With
            .Parent.Width = ActiveSheet.Range("D7").Value
        GoTo Size_Charts_Done

    Else:
    If objCht.Chart.Name = "Part 1 Chart_Right" Then
        With .Axes(xlValue)
            .MaximumScale = ActiveSheet.Range("E6").Value
            .MinimumScale = ActiveSheet.Range("E5").Value
        End With
            Parent.Height = ActiveSheet.Range("E7").Value
        With .Axes(xlCategory)
            .MaximumScale = ActiveSheet.Range("D10").Value
            .MinimumScale = 0
        End With
            .Parent.Width = ActiveSheet.Range("D10").Value
        GoTo Size_Charts_Done

    Else:
    If objCht.Chart.Name = "Part 1 Chart_Left" Then
        With .Axes(xlValue)
            .MaximumScale = ActiveSheet.Range("E6").Value
            .MinimumScale = ActiveSheet.Range("E5").Value
        End With
            Parent.Height = ActiveSheet.Range("E7").Value
        With .Axes(xlCategory)
            .MaximumScale = 0
            .MinimumScale = -(ActiveSheet.Range("D10").Value)
        End With
            .Parent.Width = ActiveSheet.Range("D10").Value
        GoTo Size_Charts_Done
Size_Charts_Done:
End If
End If
End If
End With
Next objCht
End Sub

使用 debug.print 我可以看到 If 语句正在运行,但是在 .Parent.Height 上失败了。说它在 excel for mac 中不受支持,但同一行在原始代码上运行。

据我了解,VBA for Mac 是 Windows 上可用功能的一个子集,因此并非所有来自该世界的东西都适用于 Macville。

【问题讨论】:

    标签: excel vba macos


    【解决方案1】:

    我得到了这个工作。有人提出了一个很好的建议,即记录您想要的更改的宏,然后从中找出语法和代码。此宏设置最小和最大比例值,并根据工作表中的数据调整图表的大小和位置。它使用图表名称对每个图表应用不同的更改。

    Sub UpdateChart()
    
    ActiveSheet.ChartObjects("Chart_Plan").Activate
        With ActiveChart.Axes(xlValue)
            .MaximumScale = ActiveSheet.Range("E6").Value
            .MinimumScale = ActiveSheet.Range("E5").Value
        End With
        With ActiveChart.Axes(xlCategory)
            .MaximumScale = ActiveSheet.Range("D6").Value
            .MinimumScale = ActiveSheet.Range("D5").Value
        End With
    
    ActiveSheet.ChartObjects("Chart_Right").Activate
        With ActiveChart.Axes(xlValue)
            .MaximumScale = ActiveSheet.Range("E6").Value
            .MinimumScale = ActiveSheet.Range("E5").Value
        End With
        With ActiveChart.Axes(xlCategory)
            .MaximumScale = ActiveSheet.Range("D10").Value
            .MinimumScale = 0
        End With
    
    ActiveSheet.ChartObjects("Chart_Left").Activate
        With ActiveChart.Axes(xlValue)
            .MaximumScale = ActiveSheet.Range("E6").Value
            .MinimumScale = ActiveSheet.Range("E5").Value
        End With
        With ActiveChart.Axes(xlCategory)
            .MaximumScale = 0
            .MinimumScale = -(ActiveSheet.Range("D10").Value)
        End With
    
        ActiveSheet.Shapes("Chart_Plan").Height = ActiveSheet.Range("E7").Value
        ActiveSheet.Shapes("Chart_Left").Height = ActiveSheet.Range("E7").Value
        ActiveSheet.Shapes("Chart_Right").Height = ActiveSheet.Range("E7").Value
        ActiveSheet.Shapes("Chart_Plan").Top = 2.83 * 120
        ActiveSheet.Shapes("Chart_Left").Top = 2.83 * 120
        ActiveSheet.Shapes("Chart_Right").Top = 2.83 * 120
        ActiveSheet.Shapes("Chart_Plan").Width = ActiveSheet.Range("D7").Value
        ActiveSheet.Shapes("Chart_Left").Width = 3 * (ActiveSheet.Range("D10").Value)
        ActiveSheet.Shapes("Chart_Right").Width = 3 * (ActiveSheet.Range("D10").Value)
        ActiveSheet.Shapes("Chart_Left").Left = 2.83 * 240
        ActiveSheet.Shapes("Chart_Plan").Left = 2.83 * (240 + (ActiveSheet.Range("D10").Value) + 20)
        ActiveSheet.Shapes("Chart_Right").Left = (2.83 * (240 + (ActiveSheet.Range("D10").Value) + 40)) + (ActiveSheet.Range("D7").Value)
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-21
      • 1970-01-01
      • 1970-01-01
      • 2020-11-09
      相关资源
      最近更新 更多