如何循环遍历行,将它们保存为变量并将它们用作变量VBA

时间:2016-02-08 07:00:31

标签: excel vba excel-vba

我正在尝试将工作表中的值存储为变量,然后继续使用该变量引用工作表,并使用它来过滤。

这将循环直到程序到达第一个空单元格。

我到目前为止的相关代码是:

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查看它是否实际工作但它没有登录到立即窗口。

此外,当我实际运行它时,没有出现错误,但似乎没有发生任何事情。

不确定还要添加什么,或者还有什么可以尝试。干杯!

1 个答案:

答案 0 :(得分:0)

作为第一个注释,在循环中使用(至少第一个)工作表似乎是不必要的,因为循环的开始决定了哪个工作表用于控制循环的流程。

此外,我认为最好完全删除表单激活,重新:关于.Select的讨论(案例不一样,但是这里讨论的解决方案对{{1}更好几乎在所有情况下都有{} {}和.SelectHow to avoid using Select in Excel VBA macros

让我们看看我们是否可以更直接地参考“DATA”表中的表格,以及进行一些错误检查。

我的建议:

.Activate

如果您收到任何错误,请说明它出现在哪一行以及错误消息实际上是什么。

价: http://www.mrexcel.com/forum/excel-questions/3228-visual-basic-applications-check-if-worksheet-exists.html#post13739