【发布时间】:2020-12-24 18:14:31
【问题描述】:
我正在尝试根据另一个名为 GroupFileNames 的工作表中的组名列表为 sheet10 中找到的每个组创建新工作簿。
为了更轻松地进行故障排除,当前代码会创建新工作表而不是工作簿。我已经有了创建工作簿所需的代码。
我的问题是我的代码不会遍历组名列表。它为第一组 (ABC Corp) 创建一个工作表并复制其相应的数据,但它从不为下一个组 (XYZ Corp) 创建工作表。
我尝试了使用 Do Until、For Each 等不同的循环方式。
Sub CreateWkBookByGroupName()
Dim Transaction() As Variant
Dim GroupNameTransactions() As Variant
Dim TransactionCounter As Long
Dim GpnTransactionCounter As Long
Dim Counter As Long
Dim i As Integer
Dim gfn As Worksheet
Set gfn = ThisWorkbook.Sheets("GroupFileNames")
Dim groupName As String
i = 1
groupName = gfn.Range("A" & i)
'Store entire database in the Transaction array
Transaction = Range("A1").CurrentRegion
'Starting in the i row of the database loop through each transaction
For TransactionCounter = i To UBound(Transaction, 1)
'If the thirteenth column contains a value equal to groupName...
If Transaction(TransactionCounter, 13) = groupName Then
'...increase the GpnTransactionCounter by 1
GpnTransactionCounter = GpnTransactionCounter + 1
'Redimension the GroupNameTransaction array with each instance _
of a GroupName transaction.
ReDim Preserve _
GroupNameTransactions(1 To 13, 1 To GpnTransactionCounter)
'Start a counter to populate the GroupNameTransactions array
For Counter = 1 To 13
'The GroupNameTransactions array equals the current transaction
GroupNameTransactions(Counter, GpnTransactionCounter) _
= Transaction(TransactionCounter, Counter)
Next Counter
End If
Next TransactionCounter
'Add a new sheet
Worksheets.Add
'Add the headings in the first row of the Transactions array
Range("A1:M1") = Transaction
'Transpose the GroupNameTransaction array onto the new sheet
Range("A2", Range("A2").Offset(GpnTransactionCounter - 1, 12)) _
= Application.Transpose(GroupNameTransactions)
'Autofit columns
Columns.AutoFit
End Sub
此数据应生成两个新工作表,一个用于 ABC Corp,另一个用于 XYZ Corp。每个新工作表都应包含属于其组的所有列。
【问题讨论】:
-
使用过滤器可以更轻松地完成。
-
您将 Excel 表称为数据库。我认为您真正需要的工具是数据库。您正在尝试从数据中创建视图。不要更改数据以创建视图。您是否尝试过访问 MS Access?