我正在尝试将工作表中的值存储为变量,然后继续使用该变量引用工作表,并使用它来过滤。
这将循环直到程序到达第一个空单元格。
我到目前为止的相关代码是:
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查看它是否实际工作但它没有登录到立即窗口。
此外,当我实际运行它时,没有出现错误,但似乎没有发生任何事情。
不确定还要添加什么,或者还有什么可以尝试。干杯!
答案 0 :(得分:0)
作为第一个注释,在循环中使用(至少第一个)工作表似乎是不必要的,因为循环的开始决定了哪个工作表用于控制循环的流程。
此外,我认为最好完全删除表单激活,重新:关于.Select
的讨论(案例不一样,但是这里讨论的解决方案对{{1}更好几乎在所有情况下都有{} {}和.Select
:How to avoid using Select in Excel VBA macros。
让我们看看我们是否可以更直接地参考“DATA”表中的表格,以及进行一些错误检查。
我的建议:
.Activate
如果您收到任何错误,请说明它出现在哪一行以及错误消息实际上是什么。