2017-06-28 4 views
0

Ich habe eine Sammlung Wörter innerhalb SheetNames und ich versuche, neue Worksheet für jedes Wort innerhalb SheetNames, finden Sie den Code unten.Vermeiden Sie doppelte Arbeitsblätter zu Excel Arbeitsbuch

Vor dem Hinzufügen der Worksheet Ich versuche zu überprüfen, ob das Blatt bereits in meiner Arbeitsmappe mit sheetExists function, Code unten angegeben ist.

For Each SheetName In SheetNames 

    If sheetExists(SheetName , newWB) = False Then 
     newWB.Activate 
     Set FilPage = Worksheets.Add 
     FilPage.Activate 
     SheetName = Replace(Replace(Replace(Replace(Replace(SheetName, ".", " "), "[", " "), "]", " "), "/", "_"), "\", " ") 
     If Len(SheetName) <= 30 Then 
      FilPage.Name = SheetName 
     Else 
      SheetName = Left(SheetName, 23) & "-trimed" 
     End If 
     ActiveSheet.Range("A1").Activate 
     ActiveCell.PasteSpecial 
    End If 
Next 

Der Code valediction function sheetExists mit Arbeit nicht konsequent.

Function sheetExists(sheetToFind ,wb As Excel.Workbook) As Boolean 

    WS_Count = ActiveWorkbook.Worksheets.Count 

    sheetExists = False 

    For I = 1 To WS_Count 
     If ActiveWorkbook.Worksheets(I).Name = sheetToFind Then 
      sheetExists = True 
      Exit Function 
     End If 
    Next 

End Function 

ich kann einige der Arbeitsblatt sehen hinzugefügt mit Namen „Sheet99“ oder „Sheet12“ usw., auch wenn SheetName in die Funktion übergeben wird. manchmal, wenn sheetExists function returns True noch einen Parameter wb As Excel.Workbook auf Ihre Function sheetExists, groß, verwenden Sie es Arbeitsmappe versucht, ein worksheet

Antwort

3

Sie haben hinzuzufügen! Warum dann das gefährliche ActiveWorkbook verwenden, das alle Chancen hat, ein anderes WB als das zu sein, das du untersuchen willst?

Ersetzen Sie alle Vorkommen von ActiveWorkbook mit wb

Function sheetExists(sheetToFind ,wb As Excel.Workbook) As Boolean 
    WS_Count = wb.Worksheets.Count ' <-------------------------------------- wb 
    sheetExists = False 

    For I = 1 To WS_Count 
     If wb.Worksheets(I).Name = sheetToFind Then ' <------------------- wb 
      sheetExists = True 
      Exit Function 
     End If 
    Next 
End Function 

Darüber hinaus muss der andere Code einige Korrekturen zusätzlich

For Each SheetName In SheetNames 
    If Not sheetExists(SheetName , newWB) Then 
     Set FilPage = newWB.Worksheets.Add 
     SheetName = Replace(Replace(Replace(Replace(Replace(SheetName, ".", " "), "[", " "), "]", " "), "/", "_"), "\", " ") 
     If Len(SheetName) > 30 Then SheetName = Left(SheetName, 23) & "-trimed" 
     FilPage.Name = SheetName 
     FilPage.Range("A1").PasteSpecial 
    End If 
Next 

Die Funktion SheetExists weiter vereinfacht die Activate Sachen zu fallen sein kann als: (Copyright @DavidZemens)

Function sheetExists(sheetToFind,wb As Excel.Workbook) As Boolean 
    Dim ws as Worksheet 
    sheetExists = False 
    On Error Resume Next 
    Set ws = wb.Worksheets(sheetToFind) 
    sheetExists = Not (ws Is Nothing) 
End Function 
+0

Danke für die Vorschläge, Code sieht jetzt sauber aus. Wie kann ich diese Funktion 'Function sheetExists' sensitiv machen? Zum Beispiel: Wenn mein Excel ein Blatt namens 'sheet1' hat und ich' SHEET1' an 'sheetToFind' übergebe, sollte 'SHEET1' als neues Blatt behandelt werden. – Ashwin

+1

@Ashwin Sie können das nicht tun; Blattnamen sind unabhängig von Groß- und Kleinschreibung! Sie können kein neues Blatt mit einem bestehenden Namen hinzufügen, wenn die Groß-/Kleinschreibung geändert wird. –

Verwandte Themen