2017-01-13 2 views
0

Ich fand dieses großartige Makro, das jede meiner Zeilen in meinem Datenrahmen separat in ein neues Blatt kopiert, behält aber auch die erste Zeile mit den Spaltennamen:Excel - Kopieren Sie jede Zeile in neue Arbeitsmappe, aber behalten Sie Spaltennamen - Makro

Sub abc_01() 
Dim WS As Worksheet, newWS As Worksheet 
Dim X As String 
Application.ScreenUpdating = False 
Set WS = Sheets("Sheet1") 
On Error Resume Next 
X = InputBox("number of names 1,2,", , "9") 
For i = 1 To X 
Set newWS = Worksheets.Add(after:=Worksheets(Worksheets.Count)) 
WS.Range("A1:G1").Copy Destination:=newWS.Range("A1") 
WS.Range(WS.Cells(i + 1, "A"), WS.Cells(i + 1, "G")).Copy 
newWS.Range("A2").PasteSpecial xlValues 
Next i 
On Error GoTo 0 
Application.ScreenUpdating = True 
End Sub 

versuchte ich nun in eine neue Arbeitsmappe zu kopieren, anstatt ein neues Blatt, aber das neue Arbeitsmappe bleibt leer, wenn ich es laufen. Auch ich habe nicht die neue Arbeitsmappe noch als neuen Dateinamen gespeichert (im Idealfall eine bestimmte Zelle Wert, wenn möglich?)

Sub abc_02() 
Dim thisWB As String 
Dim newWB As String 
thisWB = ActiveWorkbook.Name 
Dim X As String 
Application.ScreenUpdating = False 
Set WS = Sheets("Sheet1") 
On Error Resume Next 
X = InputBox("number of names 1,2,", , "9") 
For i = 1 To X 
Workbooks.Add 
ActiveWorkbook.SaveAs supName 
newWB = ActiveWorkbook.Name 
Windows(thisWB).Activate 
Sheets("Sheet1").Select 
Range("A1:G1").Copy 
Windows(newWB).Activate 
Sheets("Sheet1").Select 
ActiveSheet.Range("A1").Select 
ActiveSheet.Range("A1").Paste 
Windows(thisWB).Activate 
Sheets("Sheet1").Select 
Range(Sheet1.Cells(i + 1, "A"), Sheet1.Cells(i + 1, "G")).Copy 
Windows(newWB).Activate 
Sheets("Sheet1").Select 
Range("A2").PasteSpecial xlValues 
Next i 
On Error GoTo 0 
Application.ScreenUpdating = True 
End Sub 

Ich bin ein VBA Noob so dass jede Hilfe sehr geschätzt!

Antwort

0

Im ursprünglichen Code, haben Sie

Dim WS As Worksheet, newWS As Worksheet 
Dim X As String 

Dim WS als Arbeitsblatt und newWS als Arbeitsblatt sagt Excel "WS und newWS wird Arbeitsblatt sein." Später im Code werden diese jeweils als WS1 in der aktiven Arbeitsmappe und newWS als neues Arbeitsblatt in der aktiven Arbeitsmappe festgelegt.

Dim thisWB As String 
Dim newWB As String 

zu

Dim thisWB As Workbook 
Dim newWB As Workbook 

sollte Ihr Problem ändern beheben.
Sie sollten ThisWB und NewWB als Arbeitsmappen, keine Zeichenfolgen abblenden.
Excel sucht nach einer Textzeichenfolge anstelle von Arbeitsmappen.

Auch - versuchen Sie auf ExcelForum.com VBA Abschnitt suchen; Ich habe viel von dem gelernt, was ich von dort weiß.

Hoffe, dass hilft

+0

Vielen Dank für Ihre Hilfe Aaron - aber leider sind meine neuen Arbeitsmappen immer noch leer. Der Schritt "thisWB = Activeworkbook.Name" scheint nicht zu funktionieren, also kopiert er niemals die Zellen aus der ursprünglichen Arbeitsmappe. Irgendwelche Ideen? – RSesom

Verwandte Themen