VBA:多个工作表

时间:2018-01-29 15:30:19

标签: excel vba excel-vba

所以我有一个专栏,比如费用,其中包含要求支出的费用名称。我每个月都有这样的清单,每个月都是一张单独的表。目标是将新的工作表中的唯一费用名称列表,稍后将用于总计算。

因为我想比较不同的时期,所以要检查的月份(工作表)是可变的,所列项目的数量也是可变的,所以我希望尽可能保持灵活性。

到目前为止我有这个代码,但它似乎只是崩溃了。我猜这与一些没有价值的纸张有关,但我不确定。

Sub FindExpenses()

Dim ws As Worksheet
Dim ExpenseNames As New Collection

' Find for each sheet (month)
For Each ws In ActiveWorkbook.Worksheets

    Dim itm
    Dim i As Long
    Dim CellVal As Variant

    ' Go through each row of column F looking for uniques
    For i = 2 To Rows.Count
    On Error Resume Next

        CellVal = ws.Range("F" & i).Value
        On Error Resume Next
        ExpenseNames.Add CellVal, Chr(34) & CellVal & Chr(34)
        On Error GoTo 0
    Next i

Next

' Print out to separate sheet (figure out how to)
For Each itm In ExpenseNames 
    Debug.Print itm
Next

End Sub

请您帮我识别几个工作表中列中的唯一项目,然后将其发送到另一个工作表中自己的列?任何帮助将不胜感激。提前谢谢!

1 个答案:

答案 0 :(得分:3)

Excel冻结,因为您在代码中使用Rows.Count。因此,它会为工作簿中的每个工作表循环到1048576。尝试获取最后使用的行并循环到它。

这是一种检查工作表Fws列中最后一行的方法:

lastRow (ws.Name, 6)
Function lastRow(Optional strSheet As String, Optional columnToCheck As Long = 1) As Long

    Dim shSheet As Worksheet

    If strSheet = vbNullString Then
        Set shSheet = ActiveSheet
    Else
        Set shSheet = Worksheets(strSheet)
    End If

    lastRow = shSheet.Cells(shSheet.Rows.Count, columnToCheck).End(xlUp).Row

End Function