所以我有一个专栏,比如费用,其中包含要求支出的费用名称。我每个月都有这样的清单,每个月都是一张单独的表。目标是将新的工作表中的唯一费用名称列表,稍后将用于总计算。
因为我想比较不同的时期,所以要检查的月份(工作表)是可变的,所列项目的数量也是可变的,所以我希望尽可能保持灵活性。
到目前为止我有这个代码,但它似乎只是崩溃了。我猜这与一些没有价值的纸张有关,但我不确定。
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
请您帮我识别几个工作表中列中的唯一项目,然后将其发送到另一个工作表中自己的列?任何帮助将不胜感激。提前谢谢!
答案 0 :(得分:3)
Excel冻结,因为您在代码中使用Rows.Count
。因此,它会为工作簿中的每个工作表循环到1048576
。尝试获取最后使用的行并循环到它。
这是一种检查工作表F
中ws
列中最后一行的方法:
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