【问题标题】:How to create different variables names while in a loop in VBA如何在 VBA 循环中创建不同的变量名称
【发布时间】:2021-12-24 08:09:52
【问题描述】:

我希望我的代码更简洁。我正在使用数千个文件,这些文件的顺序始终相同,并且无法更改这些文件中列的顺序。

这是我的代码中混乱的部分:

'...

ActiveSheet.ChartObjects("Graph 1").Activate
    ActiveChart.FullSeriesCollection(1).Name = "='BL-remove'!$L$23"
    ActiveChart.FullSeriesCollection(1).XValues = "='BL-remove'!$A$24:$A$4523"
    ActiveChart.FullSeriesCollection(1).Values = "='BL-remove'!$L$24:$L$4523"
ActiveSheet.ChartObjects("Graph 2").Activate
    ActiveChart.FullSeriesCollection(1).Name = "='BL-remove'!$K$23"
    ActiveChart.FullSeriesCollection(1).XValues = "='BL-remove'!$A$24:$A$4523"
    ActiveChart.FullSeriesCollection(1).Values = "='BL-remove'!$K$24:$K$4523"
ActiveSheet.ChartObjects("Graph 3").Activate
    ActiveChart.FullSeriesCollection(1).Name = "='BL-remove'!$E$23"
    ActiveChart.FullSeriesCollection(1).XValues = "='BL-remove'!$A$24:$A$4523"
    ActiveChart.FullSeriesCollection(1).Values = "='BL-remove'!$E$24:$E$4523"
ActiveSheet.ChartObjects("Graph 4").Activate
    ActiveChart.FullSeriesCollection(1).Name = "='BL-remove'!$B$23"
    ActiveChart.FullSeriesCollection(1).XValues = "='BL-remove'!$A$24:$A$4523"
    ActiveChart.FullSeriesCollection(1).Values = "='BL-remove'!$B$24:$B$4523"
ActiveSheet.ChartObjects("Graph 5").Activate
    ActiveChart.FullSeriesCollection(1).Name = "='BL-remove'!$U$23"
    ActiveChart.FullSeriesCollection(1).XValues = "='BL-remove'!$A$24:$A$4523"
    ActiveChart.FullSeriesCollection(1).Values = "='BL-remove'!$U$24:$U$4523"
ActiveSheet.ChartObjects("Graph 6").Activate
    ActiveChart.FullSeriesCollection(1).Name = "='BL-remove'!$AB$23"
    ActiveChart.FullSeriesCollection(1).XValues = "='BL-remove'!$A$24:$A$4523"
    ActiveChart.FullSeriesCollection(1).Values = "='BL-remove'!$AB$24:$AB$4523"
ActiveSheet.ChartObjects("Graph 7").Activate
    ActiveChart.FullSeriesCollection(1).Name = "='BL-remove'!$I$23"
    ActiveChart.FullSeriesCollection(1).XValues = "='BL-remove'!$A$24:$A$4523"
    ActiveChart.FullSeriesCollection(1).Values = "='BL-remove'!$I$24:$I$4523"
'...

我不能使用 for 循环,因为与图关联的值不按顺序排列(即图 1 的值不在 A 中,图 2 的值不在 B 中)。我过去使用 Python 并使用过字典,但我不知道如何使用 VBA。

我试过了:

Dim Graph As Variant
Dim StringGraph As String

StringGraph = CStr(Graph)

Dim dic As Object
Set dic = CreateObject("Scripting.Dictionary")

dic.Add "1", "L"
dic.Add "2", "K"
dic.Add "3", "E"
dic.Add "4", "B"
dic.Add "5", "U"
dic.Add "6", "AB"
dic.Add "7", "I"

For Each Graph In dic.Keys
    ActiveSheet.ChartObjects("Graph" & StringGraph).Activate
    ActiveChart.FullSeriesCollection(1).Name = "='BL-remove'!$ & dict(Graph) & $23"
    ActiveChart.FullSeriesCollection(1).XValues = "='BL-remove'!$A$24:$A$4523"
    ActiveChart.FullSeriesCollection(1).Values = "='BL-remove'! _
      dict(Graph) & $24: $ dict(Graph)& $4523"
Next Graph

我知道我已经接近答案了,但也许有更好的方法。

【问题讨论】:

    标签: vba loops dictionary for-loop variables


    【解决方案1】:

    试试这样的:

        Dim Graph As Variant
        Dim dic As Object, col As String
        
        Set dic = CreateObject("Scripting.Dictionary")
        dic.Add "1", "L"
        dic.Add "2", "K"
        dic.Add "3", "E"
        dic.Add "4", "B"
        dic.Add "5", "U"
        dic.Add "6", "AB"
        dic.Add "7", "I"
        
        For Each Graph In dic.Keys
            col = dic(Graph)
            With ActiveSheet.ChartObjects("Graph" & Graph).Chart.FullSeriesCollection(1)
                .Name = "='BL-remove'!$" & col & "$23"
                .XValues = "='BL-remove'!$A$24:$A$4523"
                .Values = "='BL-remove'!" & col & "$24:$" & col & "$4523"
            End With
        Next Graph
    

    【讨论】:

    • 你的代码真的很棒!你让我开心,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    • 2019-11-28
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    相关资源
    最近更新 更多