2016-05-06 5 views
0

neuem VBA Benutzer hier ...Wie erstelle ich ein Arbeitsblatt aus einer gespeicherten Arbeitsblatt Variable

Ich weiß nicht, wie ein Arbeitsblatt aus einer Variablen im Speicher zu erstellen. Ich versuche, mehrere Kopien eines vorhandenen "Vorlage" -Blattes aus der geöffneten Arbeitsmappe zu erstellen, sie im Speicher zu bearbeiten (z. B. Bereichswerte ändern, Formeln hinzufügen usw.) und sie dann in der geöffneten Arbeitsmappe als tatsächliche Arbeitsblätter zu erstellen .

Ich kann die Kopien im Speicher erstellen und sie in einem Array speichern, aber ich kann dann nicht das eigentliche Arbeitsblatt in meiner Arbeitsmappe erstellen. Hilfe bitte :)

Dim wb As Workbook 
Dim ws As Worksheet 
Dim wsTemplate As Worksheet 
Dim wsCopies(1 To 5) As Worksheet 
Dim x As Long 

Set wb = ThisWorkbook 
Set ws = wb.Sheets("Worksheet Test") 
Set wsCopy = ws 


For x = 1 To 5 
    Set wsCopies(x) = wsTemplate 
'used this line to make sure this actually copied into memory 
    Debug.Print wsCopies(x).Range("A1").FormulaR1C1 
Next x 

Vielen Dank im Voraus!

+0

'Set wsCopies (x) = wsTemplate' Sie haben' wstemplate' nicht initialisiert? – findwindow

+0

Sorry findwindow, ich habe tatsächlich initialisiert, aber ich habe den Code generisch für diese Frage gemacht und es schnell gemacht. Danke für die Antworten Jungs. Ich finde es schwer zu glauben, dass es keine Möglichkeit gibt, dies zu tun. Ist es etwas, was ein Klassenmodul stattdessen handhaben könnte? Was ist der Grund dafür, eine Arbeitsblattvariable im Speicher zu halten, wenn Sie sie nicht manipulieren und wieder ausspucken können? –

Antwort

0

Es gibt wirklich kein "Arbeitsblatt im Speicher", das nur im Speicher existiert. Sie erstellen ein neues Arbeitsblatt, und zwar in Ihrer Arbeitsmappe. Es gibt auch keine großartige Möglichkeit, ein Arbeitsblatt ohne ein wenig Tricks zu duplizieren. Etwas wie:

For x = 1 To 5 
    wsTemplate.copy after:=wsTemplate 
    Set wsCopies(x) = wb.Sheets(wsTemplate.index + 1) 
'used this line to make sure this actually copied into memory 
    Debug.Print wsCopies(x).Range("A1").FormulaR1C1 
Next x 

Das ist nicht schrecklich, aber es ist nicht genau das, was Sie dachten. Wenn Sie nicht in application.screenupdating = false und all das sind, können Sie die wsCopies(x).visible auf xlSheetHidden setzen und Ihre weitere Manipulation tun, bis Sie wieder zu sichtbar schalten.

+0

Danke JNevill. Ich habe versucht, es zu vermeiden, weil ich dachte, dass es viel sauberer wäre, als zu versuchen, die Reihenfolge der Blätter zu verwalten, nachdem sie in das Arbeitsbuch eingefügt wurden. Ich denke, das ist vielleicht der einzige Weg. –

+0

Ich glaube, es gibt eine Methode von worksheets.add, die näher an dem ist, was du denkst, aber dann wirst du keine Kopie haben ... also ist dies wahrscheinlich der beste Weg, um das herauszuholen, was du brauchst. – JNevill