Variable Quelldatei in VBA berücksichtigen

Moderator: ModerationP

Variable Quelldatei in VBA berücksichtigen

Beitragvon rotermantel » 28. Sep 2021, 13:10

Hallo zusammen,

ich habe gerade das Vergnügen mit meinen eingerosteten VB-Grundkenntnissen Makros zu schreiben.
Dabei bin ich auf ein Problem gestoßen, dass ihr hoffentlich mit links lösen könnt.

Die Ausgangslage ist folgende: Ich exportiere aus einer Software Daten mit einem Excel-Template. So erstelle ich je einen Messbericht für jeden Messtag.
Einzelne Daten dieses Messberichts möchte ich in einem anderen Dokument zusammentragen, um hieraus eine Kontrollkarte zu erstellen.

Im Dokument "Regelkarte" soll also mit jedem übertragenen Messbericht eine Tabelle gefüttert werden.
Dafür habe ich mir ein Makro in dem Template erstellt, das ich hier mal der Übersicht halber für zwei zu übertragende Zellen anzeige. Eigentlich sind es mehrere Daten, die so übertragen werden.

Mein Problem ist, dass ich das Ausgangsdokument beim Erstellen "01_LVL4" genannt habe, worauf nach jedem Kopierschritt immer wieder zurückgesprungen wird.
Natürlich wird jeder Messbericht einen anderen Dokumentennamen haben. Das ist aktuell auch mein Problem beim Ausführen des Makros.
Leider habe ich durch meine bisherige Suche nicht herausfinden können, was man in diesem Fall schreiben muss.

Ich hoffe, ich hab mich verständlich genug ausgedrückt und mein Anfängerlevel langweilt euch nicht zu sehr!


Sub DatenÜbertragen()
'
Range("E3").Select
Selection.Copy
Windows("Regelkarte.xlsx").Activate
Range("E5").Select
If Worksheets("Dateneingabe").Range("E5").Offset(1, 0) <> "" Then
Worksheets("Dateneingabe").Range("E5").End(xlDown).Select
End If
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("01_LVL4.xlsm").Activate
Range("E4").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Regelkarte.xlsx").Activate
Range("F5").Select
If Worksheets("Dateneingabe").Range("F5").Offset(1, 0) <> "" Then
Worksheets("Dateneingabe").Range("F5").End(xlDown).Select
End If
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

End Sub
rotermantel
 

Re: Variable Quelldatei in VBA berücksichtigen

Beitragvon stefan onken » 28. Sep 2021, 14:24

moin,
du könntest eine Abfrage einbauen, etwa so:

Code: Alles auswählen
Dateiname =Inputbox("Dateiname?")

Windows(Dateiname).Activate


oder die offenen Dateien in einer Schleife durchlaufen und prüfen, welche nicht die Datei mit dem Makro ist
Code: Alles auswählen
For Each wb In Workbooks
If wb.Name <> ThisWorkbook.Name Then Dateiname = wb.Name
Next

Windows(Dateiname).Activate


was so allerdings nur bei 2 geöffneten Dateien klappt.

VG, Stefan
stefan onken
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4193
Registriert: 14. Mai 2009, 10:57
Wohnort: hamburg

Re: Variable Quelldatei in VBA berücksichtigen

Beitragvon RaiSta » 28. Sep 2021, 15:23

alternativ kannst Du auch einen Bereich auf Deinem Blatt definieren, in dem Du die gewünschten Dateinamen einträgst. Oder machst das auf einem separaten Blatt. Dein Makro müsste dann diese Liste durcharbeiten und Datei für Datei entsprechend bearbeiten.

Oder Du steigst auf Power-Query um und löst das Problem dort, dann kannst Du ein Verzeichnis auswählen und dieses dann z.B. Datei für Datei durchackern (lassen), ggf. auch nach bestimmten Kriterien sortiert, etc.

Also, der Möglichkeiten gibt es etliche - jetzt musst Du genau definieren, was Du willst.

Gruß,
RaiSta
Wenn Sokrates als intelligent gilt, weil er "ich weiß, daß ich nichts weiß" erkannte, muß ich ein Genie sein.
RaiSta
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 825
Registriert: 02. Jul 2013, 01:07
Wohnort: Nahe dem ehemaligen Mittelpunkt - der EU

Re: Variable Quelldatei in VBA berücksichtigen

Beitragvon HKindler » 28. Sep 2021, 17:40

Hi,

bitte vergiss diesen ganzen Select/Activate Kram. Das braucht kein Mensch!

Code: Alles auswählen
Sub DatenÜbertragen()
Range("E4:E5").Copy
Workbooks("Regelkarte.xlsx").Worksheets("Dateneingabe").Cells(Rows.Count, "E").End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues,  Transpose:=True
End Sub

Dieser Zweizeiler ersetzt deine komplette Routine und kopiert die Werte aus E4:E5 nach [Regelkarte.xlsx]Dateneingabe!Ex:Fx wobei x die erste leere Zeile ist. Wenn Du E4:E20 kopieren willst, dann musst du dies nur im ersten Range anpassen und es wird dann nach Ex:Ux kopiert. Das Geheimnis dabei ist das Transpose:=True, das dafür sorgt, dass die Spalte in eine Zeile gedreht wird.
Wenn du nur einzelne Werte übertragen willst geht das auch so:
Code: Alles auswählen
Sub DatenÜbertragen()
Dim NächsteZeile As Long
With Workbooks("Regelkarte.xlsx").Worksheets("Dateneingabe")
    NächsteZeile = .Cells(Rows.Count, "E").End(xlUp).Row + 1
    .Cells(NächsteZeile, "E") = Range("E4")
    .Range("F" & NächsteZeile) = Range("E5")
End With
End Sub
Beachte hierbei bitte das Vorhandensein bzw. Nichtvorhandensein des Punktes am Anfang der Zellen
Zuletzt geändert von HKindler am 29. Sep 2021, 09:19, insgesamt 1-mal geändert.
Gruß,
Helmut

----------------------------
Windows 10 Enterprise (64 Bit) / Office 365 ProPlus (32 Bit)
Benutzeravatar
HKindler
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 6475
Registriert: 04. Jul 2013, 09:02
Wohnort: Schwarzwald

Re: Variable Quelldatei in VBA berücksichtigen

Beitragvon Gast » 29. Sep 2021, 08:57

Wenn du nur einzelne Werte übertragen willst geht das auch so:
Code: Alles auswählen
Sub DatenÜbertragen()
Dim NächsteZeile As Long
With Workbooks("Regelkarte.xlsx").Worksheets("Dateneingabe")
    NächsteZeile = .Cells(Rows.Count, "E").End(xlUp).Row + 1
    .Cells(NächsteZeile, "E") = Range("E4")
    .Range("F" & NächsteZeile) = Range("E5")
End With
End Sub
Beachte hierbei bitte das Vorhandensein bzw. Nichtvorhandensein des Punktes am Anfang der Zellen


Vielen vielen Dank für eure ganzen Tipps! @HKindler, die zweite Option von dir war so elegant, die konnte ich ohne Probleme umsetzen und hab mich um so irrsinnig viele Zeilen kürzen können.
Genau danach habe ich gesucht! :idea:

Danke danke danke!

Viele Grüße,
der rote Mantel
Gast
 


Zurück zu Excel Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 31 Gäste