Excel自动创建的工作表问题

时间:2014-01-03 14:25:55

标签: excel excel-vba worksheet vba

我已经创建了一个VBA,它从ALL数据表中获取信息,并在工作表中绘制它。 工作表会自动生成,这很好,但问题是VBA只能创建唯一的工作表 - 但事实并非如此。 示例:如果在我的ALL数据表中我有3次宜家,那么当vba第一次遇到IKEA时,它应该创建一个工作表,同时它应该忽略任何重复。

实际

  

宜家;表2;第3页

通缉

  

IKEA

VBA代码

Sub CreateSheetsFromAList()
   Dim iReply As Integer
   Dim MyCell As Range, MyRange As Range

   On Error Resume Next

   Range("B1").End(xlUp).AdvancedFilter _
       Action:=xlFilterCopy, CopyToRange:=rListPaste.Cells(1, 1), Unique:=True

   Set MyRange = Sheets("ALL").Range("B1")
   Set MyRange = Range(MyRange, MyRange.End(xlDown))

   For Each MyCell In MyRange
       Sheets.Add After:=Sheets(Sheets.Count) 'creates a new worksheet
       Sheets(Sheets.Count).Name = MyCell.Value ' renames the new worksheet
   Next MyCell
End Sub

1 个答案:

答案 0 :(得分:1)

尝试此代码(仅当没有名称为MyCell.Value的工作表时才会创建新工作表):

Sub CreateSheetsFromAList()

  Dim iReply As Integer
  Dim MyCell As Range, MyRange As Range
  Dim sh as Worksheet

  On Error Resume Next

  Range("B1").End(xlUp).AdvancedFilter _
      Action:=xlFilterCopy, CopyToRange:=rListPaste.Cells(1, 1), Unique:=True

  Set MyRange = Sheets("ALL").Range("B1")
  Set MyRange = Range(MyRange, MyRange.End(xlDown))

  For Each MyCell In MyRange
      Set sh = Nothing
      Set sh=Sheets(MyCell.Value)
      If sh is Nothing Then
          Sheets.Add After:=Sheets(Sheets.Count) 'creates a new worksheet  
          Sheets(Sheets.Count).Name = MyCell.Value ' renames the new worksheet
      End If        
  Next MyCell
End Sub