【问题标题】:Applying same VBA code on all sheets in a workbook在工作簿中的所有工作表上应用相同的 VBA 代码
【发布时间】:2014-10-19 23:42:44
【问题描述】:

我有一个关于 VBA 的问题。 我正在尝试将以下代码应用于工作簿中的所有工作表。 工作簿包含许多工作表,但所有数据点都在同一个单元格中 唯一的区别是工作表的名称。 所以基本上“MoneyMarket”只是工作簿一张的名称。 尝试使用每张纸,但对如何应用它有点卡住了

Dim YRange As Integer, ProjectionRange As Integer
Dim XRange As Range
Dim I As Integer
Sub DrawChart()
    Set XRange = Sheets("MoneyMarket"). _
Range("R8:R" &   Sheets("MoneyMarket").Range("R8").End(xlDown).Row)
    ProjectionRange = Sheets("MoneyMarket").Range("T54").End(xlDown).Row
    YRange = Sheets("MoneyMarket").Range("S8").End(xlDown).Row
    Sheets("MoneyMarket").Range("S8:S" & YRange).Select
    Charts.Add
ActiveChart.Location Where:=xlLocationAsObject, Name:="MoneyMarket"
ActiveChart.SeriesCollection.Add Source:=Sheets("MoneyMarket").Range("T8:X" & YRange)
ActiveChart.ChartType = xlLine
ActiveChart.Axes(xlCategory).Select
ActiveChart.SeriesCollection(1).XValues = XRange
For I = 2 To 6
    ActiveChart.SeriesCollection(I).Select
    With Selection.Format.Line
    .DashStyle = msoLineDash
    End With
Next I

End Sub

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    在 Google 中快速搜索将为您提供有关如何循环浏览工作簿中所有工作表的答案。这只是一个例子

       Dim WS_Count As Integer
       Dim I As Integer
    
         ' Set WS_Count equal to the number of worksheets in the active
         ' workbook.
         WS_Count = ActiveWorkbook.Worksheets.Count
    
         ' Begin the loop.
         For I = 1 To WS_Count
            ' Insert/Modify your code here. It will be applied to each sheet.
    
           'For example to get their names
           msgbox ActiveWorkbook.Worksheets(I).Name
         Next I
    

    【讨论】:

      【解决方案2】:

      如果您对工作簿中某些工作表的循环感兴趣,我建议您使用这样的数组:

      Sub loopAcrossSheets()
          temp = Array("Sheet1", "Sheet3", "SheetX")
          For Each SheetName In temp
              DrawChart (SheetName)
          Next
      End Sub
      

      然后你应该把输入字符串放在你的 Sub 上:

      Sub DrawChart(SheetName As String)
      

      最后,用 SheetName 替换工作表名称(“MoneyMarket”)! 这对我有用!

      【讨论】:

        【解决方案3】:

        你必须创建一个Module,并在你的代码中直接引用ActiveSheet,检查下面的代码

        Dim YRange As Integer, ProjectionRange As Integer
        Dim XRange As Range
        Dim I As Integer
        Public Sub DrawChart()
            Dim ActiveSheetName as String
            ActiveSheetName = ActiveSheet.Name
            Set XRange = ActiveSheet. _
        Range("R8:R" &   ActiveSheet.Range("R8").End(xlDown).Row)
            ProjectionRange = ActiveSheet.Range("T54").End(xlDown).Row
            YRange = ActiveSheet.Range("S8").End(xlDown).Row
            Sheets("MoneyMarket").Range("S8:S" & YRange).Select
            Charts.Add
        ActiveChart.Location Where:=xlLocationAsObject, Name:=ActiveSheetName
        ActiveChart.SeriesCollection.Add Source:=ActiveSheet.Range("T8:X" & YRange)
        ActiveChart.ChartType = xlLine
        ActiveChart.Axes(xlCategory).Select
        ActiveChart.SeriesCollection(1).XValues = XRange
        For I = 2 To 6
            ActiveChart.SeriesCollection(I).Select
            With Selection.Format.Line
            .DashStyle = msoLineDash
            End With
        Next I
        
        End Sub
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-01-05
          • 1970-01-01
          相关资源
          最近更新 更多