VBA Excel从模板和列表生成唯一页面
我已经在这方面工作了一段时间(我在VBA方面一点经验都没有),但我不断地出错,所以我们就在这里 设置: 为了简单起见,我在工作簿中有两个工作表。第一个“每日订单”是我所有产品的列表,每行是不同的产品(约1000),每列表示产品的不同信息(即id、成本、重量等)。VBA Excel从模板和列表生成唯一页面,vba,excel,Vba,Excel,我已经在这方面工作了一段时间(我在VBA方面一点经验都没有),但我不断地出错,所以我们就在这里 设置: 为了简单起见,我在工作簿中有两个工作表。第一个“每日订单”是我所有产品的列表,每行是不同的产品(约1000),每列表示产品的不同信息(即id、成本、重量等)。 第二个“模板”是一个定价模板,当给定产品信息时,它将生成一个定价表 目标: 创建一个VBA宏以循环浏览“每日订单”工作表的每一行,并为每一行制作模板工作表的副本,并将某些信息附加到新工作表中 什么不起作用: Sub GeneratePr
第二个“模板”是一个定价模板,当给定产品信息时,它将生成一个定价表 目标: 创建一个VBA宏以循环浏览“每日订单”工作表的每一行,并为每一行制作模板工作表的副本,并将某些信息附加到新工作表中 什么不起作用:
Sub GeneratePriceBook()
Dim rw As Range
Dim temp As Worksheet
Dim ws As Worksheet
Dim daily As Worksheet
Set daily = Worksheets("Daily Order")
Set temp = Worksheets("Template")
temp.Activate
For Each rw In daily.Rows
temp.Copy After:=Sheets(Sheets.Count)
Set ws = Sheets(Sheets.Count)
ws.Name = rw.Value
With ws
.Range("A6").Formula = "='Daily Order'!B" & rw.Row
.Range("B6").Formula = "='Daily Order'!B" & rw.Row
.Range("A3").Formula = "='Daily Order'!Q" & rw.Row
.Range("E36").Formula = "='Daily Order'!M" & rw.Row
.Range("E36").Formula = "='Daily Order'!Y" & rw.Row
.Range("E37").Formula = "='Daily Order'!L" & rw.Row
End With
Next rw
End Sub
错误类型:
Sub GeneratePriceBook()
Dim rw As Range
Dim temp As Worksheet
Dim ws As Worksheet
Dim daily As Worksheet
Set daily = Worksheets("Daily Order")
Set temp = Worksheets("Template")
temp.Activate
For Each rw In daily.Rows
temp.Copy After:=Sheets(Sheets.Count)
Set ws = Sheets(Sheets.Count)
ws.Name = rw.Value
With ws
.Range("A6").Formula = "='Daily Order'!B" & rw.Row
.Range("B6").Formula = "='Daily Order'!B" & rw.Row
.Range("A3").Formula = "='Daily Order'!Q" & rw.Row
.Range("E36").Formula = "='Daily Order'!M" & rw.Row
.Range("E36").Formula = "='Daily Order'!Y" & rw.Row
.Range("E37").Formula = "='Daily Order'!L" & rw.Row
End With
Next rw
End Sub
我花了相当长的时间试图找出某些我认为可能很麻烦的地方,但我总是以424个错误或1004个错误而告终
同样,我将非常感谢任何帮助。
谢谢大家! 我想这就是你想要的:
Sub GeneratePriceBook()
Dim wsDaily As Worksheet
Dim wsTemp As Worksheet
Dim lVisibility As XlSheetVisibility
Dim strSheetName As String
Dim rIndex As Long
Dim i As Long
Set wsDaily = Sheets("Daily Order")
Set wsTemp = Sheets("Template")
lVisibility = wsTemp.Visible 'In case template sheet is hidden
wsTemp.Visible = xlSheetVisible
For rIndex = 2 To wsDaily.Cells(Rows.Count, "A").End(xlUp).Row
'Ensure valid sheet name
strSheetName = wsDaily.Cells(rIndex, "A").Text
For i = 1 To 7
strSheetName = Replace(strSheetName, Mid(":\/?*[]", i, 1), " ")
Next i
strSheetName = Trim(Left(WorksheetFunction.Trim(strSheetName), 31))
'Make sure the sheet name doesn't already exist
If Not Evaluate("IsRef('" & strSheetName & "'!A1)") Then
wsTemp.Copy After:=Sheets(Sheets.Count)
With Sheets(Sheets.Count)
.Name = strSheetName
.Range("A6").Formula = "='" & wsDaily.Name & "'!B" & rIndex
.Range("B6").Formula = "='" & wsDaily.Name & "'!B" & rIndex 'You are referencing the same cell as in A6?
.Range("A3").Formula = "='" & wsDaily.Name & "'!Q" & rIndex
.Range("E36").Formula = "='" & wsDaily.Name & "'!M" & rIndex
.Range("E36").Formula = "='" & wsDaily.Name & "'!Y" & rIndex 'You are putting a second formula in E36?
.Range("E37").Formula = "='" & wsDaily.Name & "'!L" & rIndex
End With
End If
Next rIndex
wsTemp.Visible = lVisibility 'Set template sheet to its original visible state
Set wsDaily = Nothing
Set wsTemp = Nothing
End Sub
您的系统内存使用情况如何?您在这个操作中创建了数千张工作表。@enderland内存使用不是问题(目前),我的代码在第一次工作表复制时抛出错误。这些错误似乎都与新工作表有关。当我尝试以任何方式对其进行操作时,它告诉我它不是一个对象(通过发出1004或424错误),请尝试在定义temp/daily时将
工作表
更改为工作表