我在项目中包含了一些代码,而且我有一些我不理解的东西。我的With
循环不起作用。
我的目标是从特定单元格创建新工作表B16
= House,每个单元格的其他新工作表包含PRIVATE
字。
实施例: 当用户点击按钮时: - 在我的第一张工作表(名称MyFirstSheet)之后,使用title =值B16创建了一个新工作表 - 为每个单元格值创建的其他一些工作表包含单词PRIVATE,就在上一个工作表之后。
结果将是MyFirstSheet, House, Test1PRIVATE, Test2PRIVATE
....
Sub NewSheetFromTemplate()
Dim SearchRange As Range, c As Range
Dim sht As Worksheet
'New sheet for a specific cell
Sheets("TEMPLATE").Copy After:=Sheets("MyFirstSheet")
ActiveSheet.Name = Sheets("MyFirstSheet").Range("B16").Value
'New sheet for each cell contains PRIVATE
With ThiwWorkbook
Set SearchRange = ActiveSheet.Range("B16:D70")
For Each c In SearchRange
If Right(c.Value, 2) = "PRIVATE" Then
Sheets("TEMPLATE").Copy After:=Sheets("MyFirstSheet")
Sheets("MyFirstSheet").Name = c.Value
End If
Next c
End With
End Sub
问题是:我的第一张表格创建得很好(所以我创建了MyFirstSheet, House,
)但是其他单元格中没有包含“PRIVATE”
Excel表示ERROR 1004,并在标题TEMPLATE(2)
答案 0 :(得分:2)
如果我正确理解了这个问题,那么你只需要更改一行
If Right(c.Value, 2) = "PRIVATE" Then
到
If UCase(Right(c.Value, 7)) = "PRIVATE" Then
那是因为单词的长度"私有"是7个字符而不是2.此外,我使用UCASE
来确保如果使用不同的上限写私有它也会找到匹配。
答案 1 :(得分:0)
感谢@Fabrizio和@Ralph的帮助和解释。
我的最终代码:
Sub NewSheetFromTemplate()
Dim SearchRange As Range, c As Range
Dim sht As Worksheet
'New sheet for each value contain "PRIVATE"
With ThiwWorkbook
Sheets(1).Select
Set SearchRange = ActiveSheet.Range("A2:C70")
For Each c In SearchRange
If Right(c.Value, 7) = "PRIVATE" Then
Sheets("TEMPLATE").Copy After:=ActiveSheet
ActiveSheet.Name = c.Value
End If
Next c
End With
'New sheet for a specific cell: A2
Sheets(1).Select
Sheets("TEMPLATE").Copy After:=ActiveSheet
ActiveSheet.Name = Sheets(1).Range("A2").Value
'Show OK message
Sheets(1).Select
MsgBox "OK, all sheets well created. Please fill out next sheet"
End Sub