我试图将值作为变量存储在工作表中,然后继续使用该变量引用工作表并使用它进行过滤。
这将一直循环直到程序到达第一个空单元。
到目前为止,我相关的代码是:
Sub Program()
Dim i As Integer
i = 2
Do Until IsEmpty(Cells(i, 1))
Debug.Print i
Sheets("Button").Activate
Dim First As String
First = Cells(i, 1).Value
Debug.Print First
Dim Second As String
Second = Cells(i, 2).Value
Debug.Print Second
'Filters my Data sheet and copies the data
Sheets("DATA").Activate
Sheets("DATA").Range("A1").AutoFilter _
Field:=2, _
Criteria1:=First 'Filters for relevant organisation
Sheets("DATA").Range("A1").AutoFilter _
Field:=6, _
Criteria1:="=" 'Filters for No Response
Sheets("DATA").Range("A1:H6040").Copy
'This should loop through for each separate group
Sheets(CStr(Second)).Select
Range("A1").Select
ActiveSheet.Paste
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
i = i + 1
Loop
Worksheets("DATA").AutoFilterMode = False
End Sub
我已经改变了计划显著试图符号,例如添加为“CStr的”,因为在这一行错误:Sheets(CStr(Second)).Select
当它常说Sheets(Second)).Select
和debug.print来查看它是否确实在工作,但没有记录到立即窗口中。
另外,当我实际运行它时,没有出现错误,但似乎没有任何反应。
不知道要添加什么,还是要尝试什么。干杯!
首先,在循环内使用(至少是第一次)工作表激活似乎是不必要的,因为循环的开始是确定要使用哪个工作表来控制循环流程的因素。
此外,我认为这是更好地完全消除片激活,回复:关于讨论.Select
(该情况下是不一样的,但解决这里讨论的工作更好地为两个.Select
,并.Activate
在几乎所有情况下):如何避免使用在Excel VBA宏中选择。
我们还要看看是否可以以更直接的方式引用“ DATA”表中的表以及进行一些错误检查。
我的建议:
Sub Program()
Dim i As Integer
Dim First, Second As String
Dim secondWs As Worksheet
Dim dataTbl As ListObject
i = 2
Set dataTbl = Worksheets("DATA").Range("A1").ListObject.Name
' The above can be done more elegantly if you supply the name of the table
Sheets("DATA").Activate
Do Until IsEmpty(Cells(i, 1))
Debug.Print i
First = Sheets("Button").Cells(i, 1).Value
Debug.Print First
Second = Sheets("Button").Cells(i, 2).Value
Debug.Print Second
'Filters my Data sheet and copies the data
dataTbl.AutoFilter _
Field:=2, _
Criteria1:=First 'Filters for relevant organisation
dataTbl.AutoFilter _
Field:=6, _
Criteria1:="=" 'Filters for No Response
Sheets("DATA").Range("A1:H6040").Copy
'This should loop through for each separate group
On Error Resume Next
Set secondWs = Worksheets(Second)
On Error GoTo 0
If Not secondWs Is Nothing Then
secondWs.Range("A1").PasteSpecial Paste:=xlPasteValues
Else
Debug.Print "Sheet name SECOND was not found"
End If
i = i + 1
Loop
Worksheets("DATA").AutoFilterMode = False
End Sub
如果您遇到任何错误,请说明错误出现在哪一行以及错误消息的实际含义。
参考:http : //www.mrexcel.com/forum/excel-questions/3228-visual-basic-applications-check-if-worksheet-exists.html#post13739
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句