如何为每个特定值生成工作表

时间:2016-10-14 10:20:16

标签: excel vba excel-vba

我在项目中包含了一些代码,而且我有一些我不理解的东西。我的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)

中创建了一个工作表

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