2016-05-12 6 views
0

Ich habe MS Access produziert eine Reihe von Arbeitsmappen und Arbeitsblättern. Wenn eine Arbeitsmappe erstellt wird, gibt es zusätzliche Arbeitsblätter in der Arbeitsmappe mit dem Namen "Sheet n"Excel VBA entfernen unerwünschte Arbeitsblätter

Ich weiß, dass der folgende Code funktioniert, aber meine Frage bezieht sich auf Timing.

Dim ws as excel.worksheet 
For each ws in wbWorking.Worksheets 
    oxl.DisplayWarnings=False 
    If ws.name like "Sheet*" then ws.delete 
    oxl.DisplayWarnings=True 
Next ws 

Der obige Code funktioniert nicht, bis ich die Arbeitsmappe speichern. Das Problem ist, dass der Client nach den Arbeitsmappen sucht, um das Verzeichnis aufzufüllen, und sie öffnet, sobald sie angezeigt werden. Dies führt zu Problemen, wenn der obige Code ausgeführt wird und der Client die Arbeitsmappe geöffnet hat. Ich möchte Arbeitsblätter löschen, bevor die Arbeitsmappe gespeichert wird.

Bitte beraten.

+0

Sind Sie eine Vorlage mit Hilfe der Arbeitsmappe erstellen? Fügen Sie eine Menge zusätzlicher Blätter hinzu? –

+0

Wenn Ihr funktionierendes System den Prinzipien folgt, die für das Teilen und Zusammenarbeiten von Excel-Daten gemäß diesem Artikel beschrieben wurden Viele Probleme können gelöst werden. Es ist für Ihre freundliche Durchsicht und in keiner Weise Lösung Ihres umrissenen Problems hier. – skkakkar

+0

@skkakkar ich bekomme "Seite" kann nicht gefunden werden Fehler. –

Antwort

0

Arbeiten aus, wenn Sie zuerst die neue Arbeitsmappe erstellen, sollte etwas in dieser Richtung arbeiten:

Public Function BuildWorkbook(wbkToCopy As Excel.Workbook) As Excel.Workbook 
    Dim xl As Excel.Application 
    Dim dummySheet As Excel.Worksheet 
    Dim sheetToClone As Excel.Worksheet 
    Dim i As Long 
    Set xl = wbkToCopy.Application 
    Set BuildWorkbook = xl.Workbooks.Add(1) 
    Set dummySheet = BuildWorkbook.Worksheets(1) 
    For Each sheetToClone In wbkToCopy.Worksheets 
    'This is just to handle naming conflicts 
    Do Until sheetToClone.Name <> dummySheet.Name 
     dummySheet.Name = Format(Now(), "yyyymmddhhnnss") & CStr(i) 
     i = i + 1 
     DoEvents 
    Loop 
    sheetToClone.Copy BuildWorkbook.Worksheets(1) 
    Next 
    If BuildWorkbook.Worksheets.Count > 1 Then 
    dummySheet.Delete 
    End If 
End Function 

Offensichtlich Sie die Blätter hinzufügen können, aber Sie brauchen, aber die Tasten sind:

  • Geben Sie =Workbooks.Add(1) an, wenn Sie die neue Arbeitsmappe erstellen, sodass sie mit nur einem Arbeitsblatt erstellt wird
  • Legen Sie einen Verweis auf das Arbeitsblatt fest, das bei der ersten Erstellung des neuen Arbeitsblatts nicht benötigt wird orkbook
  • Mit der anfänglichen Referenz, das Arbeitsblatt am Ende des Prozesses löschen, bevor das Speichern der Arbeitsmappe
Verwandte Themen