在工作簿中的所有工作表上应用相同的VBA代码

时间:2014-08-26 15:13:06

标签: excel vba excel-vba

我对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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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”)! 这对我有用!

答案 2 :(得分:0)

您必须创建一个模块,然后直接在您的代码中引用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