2017-07-21 46 views
2

我已经以两个数组的形式命名这六个工作表来独立完成他们的任务。我可以知道为什么这段代码无法正常运行吗?VBA在数组中选择工作表

错误发生在Sheets(i).Select,表示选择工作表类的方法失败。我确实尝试更改为.Activate,但代码似乎无法运行。

MyArray = Array("CPWAEB", "CPWAFB", "CRRTPN", "CRRTQN") 
MyArray1 = Array("ACM", "GMRTR") 

For Each i In MyArray 
    Sheets(i).Select 
    Range("G12").GoalSeek Goal:=0, ChangingCell:=Range("G7") 
Next i 

For Each j In MyArray1 
    Sheets(j).Select 
    ActiveSheet.Calculate 
Next j 
+0

您的目标是?你想做什么?代码应该做什么? – Wernerson

+0

'Sheets(MyArray(i))' – FunThomas

+0

@FunThomas它显示类型不匹配。 –

回答

2

可以遍历在您的工作簿中的工作表是这样的:

For Each i In MyArray 
    With ThisWorkbook.Worksheets(i) 
     .Range("G12").GoalSeek Goal:=0, ChangingCell:=.Range("G7") 
    End With 
Next i 

For Each j In MyArray1 
    With ThisWorkbook.Worksheets(j) 
     .Calculate 
    End With 
Next j 

确保所有细胞(G12)在他们的公式,否则GoalSeek将失败。

3

这是它遵循良好做法应该看起来的样子。避免使用选择或激活这是一个不好的做法。

Option Explicit 'Very first line ensures that every variable is declared properly. 

Public Sub MySub() 
    Dim MyArray() As Variant, MyArray1() As Variant 
    Dim i As Long 

    MyArray = Array("CPWAEB", "CPWAFB", "CRRTPN", "CRRTQN") 
    MyArray1 = Array("ACM", "GMRTR") 

    For i = LBound(MyArray) To UBound(MyArray) 
     With Worksheets(MyArray(i)) 
      .Range("G12").GoalSeek Goal:=0, ChangingCell:=.Range("G7") 
     End With 
    Next i 

    For i = LBound(MyArray1) To UBound(MyArray1) 
     Worksheets(MyArray1(i)).Calculate 
    Next i 
End Sub 

如果遇到错误,请确保数组中的所有工作表名称确实存在为工作表。

0
Sub test() 
    Dim MyArray, i 
    MyArray = Array("CPWAEB", "CPWAFB", "CRRTPN", "CRRTQN") 

    For Each i In MyArray 
     ' Sheets(i).Select => This won't work when Sheets(i) is not active one 
     Sheets(i).Activate ' First activate 
     Range("G12").GoalSeek Goal:=0, ChangingCell:=Range("G7") ' Then use the Range on active sheet 
    Next i 

    ' When not necessary to activate the sheets 
    ' you can use Sheets with array as parameter 
    Dim sh As Worksheet 
    For Each sh In Sheets(MyArray) 
     sh.Range("G12").Value = sh.Name 
    Next sh 
End Sub 
相关问题