Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1740to1744
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
VBA Erstellung von neuer Datei & Inhalt
20.02.2020 14:22:22
neuer
Hallo Zusammen,
das Herber-Forum hat mir bis dato immer viele super Tipps und Hilfen gegeben. Allerdings ist mein aktuelles Problem so durchwachsen, dass ich hier etwas Hilfe benötige.
Ich möchte aus einer Datenmatrix:
1) Einen bestimmten Wert filtern
2) Eine neues Workbook erstellen und am Ende mit Wunschnamen und Ort speichern
3) für jeden Kunden ein Sheet erzeugen
4) 2 unterschiedliche Teile der Matrix, gefiltert, in jedes Kunden-Sheet einfügen
Ich bin bis zum Start vom Kopiervorgang gekommen:
Sub Kundenbefragung_Wertung()
'
' Erstellen des neuen Workbooks & Speichern
Dim wb As Workbook
Dim wsNew As Worksheet
Dim StName As String
MsgBox ("Neue Mappe erstellen?")
If MsgBox("Ja," & vbLf & "oder nein?", vbYesNo) = vbYes Then
StName = InputBox("Bitte gib den Dateinamen ein!")
Set wb = Workbooks.Add
End If
' Erstellen der einzelnen Sheets
Sheets("Tabelle1").Name = "Kunde1"
Set wsNew = Worksheets.Add
With wsNew
.Name = "Kunde2"
.Move After:=Sheets(Sheets.Count)
End With
Set wsNew = Worksheets.Add
With wsNew
.Name = "Kunde3"
.Move After:=Sheets(Sheets.Count)
End With
Set wsNew = Worksheets.Add
With wsNew
.Name = "Kunde4"
.Move After:=Sheets(Sheets.Count)
End With
Set wsNew = Worksheets.Add
With wsNew
.Name = "Kunde5"
.Move After:=Sheets(Sheets.Count)
End With
Set wsNew = Worksheets.Add
With wsNew
.Name = "Kunde5"
.Move After:=Sheets(Sheets.Count)
End With
Set wsNew = Worksheets.Add
With wsNew
.Name = "Kunde6"
.Move After:=Sheets(Sheets.Count)
End With
Set wsNew = Worksheets.Add
With wsNew
.Name = "Kunde7"
.Move After:=Sheets(Sheets.Count)
End With
Set wsNew = Worksheets.Add
With wsNew
.Name = "Kunde8"
.Move After:=Sheets(Sheets.Count)
End With
Set wsNew = Worksheets.Add
With wsNew
.Name = "Kunde9"
.Move After:=Sheets(Sheets.Count)
End With
Set wsNew = Worksheets.Add
With wsNew
.Name = "Kunde10"
.Move After:=Sheets(Sheets.Count)
End With
Set wsNew = Worksheets.Add
With wsNew
.Name = "Kunde11"
.Move After:=Sheets(Sheets.Count)
End With
Set wsNew = Worksheets.Add
With wsNew
.Name = "Kunde12"
.Move After:=Sheets(Sheets.Count)
End With
Set wsNew = Worksheets.Add
With wsNew
.Name = "Kunde13"
.Move After:=Sheets(Sheets.Count)
End With
Set wsNew = Worksheets.Add
With wsNew
.Name = "Kunde14"
.Move After:=Sheets(Sheets.Count)
End With
Set wsNew = Worksheets.Add
With wsNew
.Name = "Kunde15"
.Move After:=Sheets(Sheets.Count)
End With
Set wsNew = Worksheets.Add
With wsNew
.Name = "Kunde16"
.Move After:=Sheets(Sheets.Count)
End With
' Kopiervorgang starten (hier verließ es mich dann)
Dim Daten1 As Range
Dim Daten2 As Range
Set Daten1 = Range("A5, I1000")
Set Daten2 = Range("J5, K1000")
Windows("aus der Anfangsdatei").Activate
ActiveSheet.Range("$A:$AP").AutoFilter Field:=11, Criteria1:=""
Daten1.Copy
Windows("StName.xlsx").Activate
Sheets("Danex").Select
Range("A2").PasteSpecial
....... weiter kam ich nicht und mir gehen die Ideen aus. Mir ist klar das ich das eleganter hätte schreiben können, aber dafür fehlt mir das Wissen und die Kreativität.
Über Hilfe freue ich mich. Vielleicht ist es schwer zu erfassen, was ich gerne machen wollen würde, mir reichen hier aber schon ein paar Ideen.
Danke und viele Grüße,
Andreas

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Erstellung von neuer Datei & Inhalt
22.02.2020 19:25:44
neuer
Hallo Andreas,
hier ein Weg wie man es lösen kann.
Für die Eingabe/Auswahl des Dateinamens hab ich das Excel-Dialogfenster eingebaut.
Das erstellen der 16 Tabellenblätter kann man eleganter in einer For-Next-Schleife lösen.
LG
Franz

Sub Kundenbefragung_Wertung()
' Erstellen des neuen Workbooks & Speichern
Dim wbQuelle As Workbook
Dim wbNeu As Workbook
Dim iSh As Integer
Dim wsNew As Worksheet
Dim wsAktiv As Worksheet
Dim StName As String
Set wbQuelle = ActiveWorkbook
Set wsAktiv = ActiveSheet 'Sollte das Tabellenblatt mit den zu filterenden Daten sein
If MsgBox("Neue Mappe erstellen?" & vbLf & vbLf & _
"Ja," & vbLf & "oder nein?", vbQuestion + vbYesNo) = vbYes Then
'Dialog für Dateiname anzeigen
With Application.FileDialog(msoFileDialogSaveAs)
.AllowMultiSelect = False
.FilterIndex = 1 'Exceldateien
.Title = "Bitte den Ordner/Namen der Datei eingeben/wählen"
If .Show = -1 Then
StName = .SelectedItems(1)
Else
StName = ""
'Dialog abgebrochen
GoTo Beenden
End If
End With
'Neue Mappe erstellen mit einem Tabellenblatt
Set wbNeu = Workbooks.Add(Template:=xlWBATWorksheet)
Application.DisplayAlerts = False 'Falls vorhandene Datei gewählt wird, _
dann wird ohne Rückfrage überschrieben
wbNeu.SaveAs Filename:=StName, FileFormat:=51, addtomru:=True
Application.DisplayAlerts = True
Else
'Makro Beenden
GoTo Beenden
End If
' Erstellen der einzelnen Sheets
wbNeu.Worksheets(1).Name = "Kunde1"
For iSh = 2 To 16
wbNeu.Worksheets.Add After:=wbNeu.Sheets(wbNeu.Sheets.Count)
wbNeu.Worksheets(iSh).Name = "Kunde" & Format(iSh, "0")
Next iSh
' Kopiervorgang starten (hier verließ es mich dann)
Dim Daten1 As Range
Dim Daten2 As Range
Dim Zeile_L As Long
Dim rngAutofilter As Range
With wsAktiv
If .AutoFilterMode = True Then
If .FilterMode = True Then
.ShowAllData
.AutoFilterMode = False
End If
End If
Zeile_L = .UsedRange.Row + .UsedRange.Rows.Count - 1
'zu kopierende Zellbereiche - warum erst ab Zeile 5 ?
Set Daten1 = .Range(.Cells(5, 1), .Cells(Zeile_L, 9)) 'Bereich A5:Ixxx
Set Daten2 = .Range(.Cells(5, 10), .Cells(Zeile_L, 11)) ' Bereich J5:Kxxx
'Zellbereich AUtofilter
Set rngAutofilter = .Range(.Cells(1, 1), .Cells(Zeile_L, .Range("AP1").Column))
'Filter setzen für Spalte 11 (K) - leere ausblenden
rngAutofilter.AutoFilter Field:=11, Criteria1:=""
End With
Application.ScreenUpdating = False
For iSh = 1 To 16
Daten1.Copy
With wbNeu.Worksheets(iSh).Range("A2") 'Zielzelle ggf. anpassen
.PasteSpecial Paste:=xlPasteColumnWidths
.PasteSpecial Paste:=xlPasteFormats
.PasteSpecial Paste:=xlPasteValues
End With
Daten2.Copy
With wbNeu.Worksheets(iSh).Range("M2") 'Zielzelle ggf. anpassen
.PasteSpecial Paste:=xlPasteColumnWidths
.PasteSpecial Paste:=xlPasteFormats
.PasteSpecial Paste:=xlPasteValues
End With
Next iSh
wsAktiv.ShowAllData
wbNeu.Save
wbNeu.Activate
Application.ScreenUpdating = True
Beenden:
End Sub

Anzeige

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige