我必须处理一个巨大的Excel文件,但我在使用VBA时遇到了一些问题。
这个Excel文件有28个选项卡,都有53列。选项卡是关于年,有些年份有更多的人。所有的第一列是关于Person_system_ID,第二列是他的名字,所有这些都是大写的。
我尝试使用ChatGPT编写VBA代码来Map所有选项卡,并为每个唯一名称创建单独的选项卡并保存,但我得到了一些错误。
以下是ChatGPT编写的代码:
Function IsInArray(arr, val) As Boolean
Dim found As Boolean
found = False
If IsArray(arr) And Not IsEmpty(arr) Then
Dim i As Long
For i = LBound(arr) To UBound(arr)
If arr(i) = val Then
found = True
Exit For
End If
Next i
End If
IsInArray = found
End Function
Sub Create_Individual_Sheets()
Dim SheetName As String
Dim NameList() As String
Dim LastRow As Long
Dim Year As Integer
Dim Sheet As Worksheet
Dim NewSheet As Worksheet
Dim Name As Variant
Dim i As Long
Dim Folder As String
Folder = "C:\Users\Jorjao\Desktop\Folder"
For Year = 1994 To 2022
Set Sheet = Worksheets(CStr(Year))
LastRow = Sheet.Cells(Rows.Count, 1).End(xlUp).Row
'loop through the name column in the current sheet and add to the name list
For i = 2 To LastRow
Name = UCase(Sheet.Cells(i, 2).Value)
If Not IsInArray(NameList, Name) Then
ReDim Preserve NameList(UBound(NameList) + 1)
NameList(UBound(NameList)) = Name
End If
Next i
Next Year
'loop through the name list and create an individual sheet for each name
For Each Name In NameList
Set NewSheet = ThisWorkbook.Sheets.Add(After:=Sheets(Sheets.Count))
SheetName = Replace(Name, " ", "_")
NewSheet.Name = SheetName
'loop through each sheet and copy the rows with the current name to the individual sheet
For Year = 1994 To 2022
Set Sheet = Worksheets(CStr(Year))
LastRow = Sheet.Cells(Rows.Count, 1).End(xlUp).Row
'loop through the name column in the current sheet and check if the current name is present
For i = 2 To LastRow
If UCase(Sheet.Cells(i, 2).Value) = Name Then
Sheet.Rows(i).Copy Destination:=NewSheet.Rows(NewSheet.Cells(Rows.Count, 1).End(xlUp).Row.Offset(1))
End If
Next i
Next Year
'save the new sheet in a folder
NewSheet.Copy
ActiveWorkbook.SaveAs Filename:=Folder & SheetName & ".xlsx"
ActiveWorkbook.Close savechanges:=False
Next Name
End Sub
使用这段代码,我得到:
运行时错误9
下标超出范围
我也试着改变一些东西,但我也得到了一些运行时错误,如13和424。
2条答案
按热度按时间j2datikz1#
多张工作表按名称导出
l7wslrjt2#
问题描述并不包含一个确定实现的所有元素。它看起来更像是一个陷阱练习...所以问题的一个答案是:你创建一个xlsm文件,在其中复制模块中的以下代码。在本书中,你在首先修复目标文件路径后运行SUB helper()。代码执行以下操作:a)打开目标文件B)从单元格A2中读取叶数据,假设有标题。当列为53时,计算行数。所有工作表的数据写入书的当前工作表。c)我们关闭目标书d)我们按第一列的ID代码而不是按名称对数据进行排序,因为我认为代码是唯一的,而名称可能不是e)我们遍历整个列A,在每一个代码更改的情况下,我们创建一个新的工作表,并复制当前代码/人的块。工作表重命名为“ID_”和id g)在最后,如果我们愿意,我们删除包含所有数据的工作表。
简单地说,我们把这段代码放到一个新的xlsm文件中,它读取另一个excel工作簿的所有工作表,并创建与它读取的数据中不同的人代码一样多的工作表。