Variable Quelldatei in VBA berücksichtigen

Antwort erstellen

Smilies
:D :) :( :o :shock: :? 8-) :lol: :x :P :razz: :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: :badgrin: :doubt:
BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet
Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Variable Quelldatei in VBA berücksichtigen

Re: Variable Quelldatei in VBA berücksichtigen

Beitrag von 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

Re: Variable Quelldatei in VBA berücksichtigen

Beitrag von 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

Re: Variable Quelldatei in VBA berücksichtigen

Beitrag von 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

Re: Variable Quelldatei in VBA berücksichtigen

Beitrag von 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

Variable Quelldatei in VBA berücksichtigen

Beitrag von 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

Nach oben

cron