Blatt (ohne evtl. vorhandenen VBA-Code) aus anderer Datei holen.

.. das wohl mächtigste Werkzeug in Bill Gates' Büro-Sippe. Ob reine Formeln, PowerQuery oder VBA. Hier bleiben kaum Wünsche unerfüllt.
Benutzeravatar
BitDoctor
Beiträge: 17
Registriert: 18. Aug 2024, 21:04
Hat sich bedankt: 8 Mal
Danksagung erhalten: 5 Mal
Kontaktdaten:

Blatt (ohne evtl. vorhandenen VBA-Code) aus anderer Datei holen.

#1

Beitrag von BitDoctor »

Hallo ihr Lieben,

ich habe mir zwar bereits eine funktioniere "Routine (noch Bastelstatus)" erstellt, würde aber gerne horchen, ob das vlt. doch eleganter machbar ist.

In einem "Tool" zum Abgleich/Vergleich von zwei Tabellenblättern aus unterschiedlichen Dateien, kann es vorkommen, dass eines der gewählten Blätter eigenen Code enthält. Damit der in dem "Tool" nicht unvorhergesehenes auslöst, sollte der nicht mit kopiert werden.
Mein Ablauf speichert das zu holende Blatt temporär in einer .xlsx und sorgt somit beim erneuten Öffnen, dass dann kein Code mehr enthalten ist.
Diese Blatt kopiere ich dann in mein Tool. Funktioniert zwar, empfinde ich aber als "Oberbastelei" :D
Ich habe keinen anderen7zuverlässigeren Weg auf dem Schirm. Ihr vielleicht ? :?:

Codeauszug:

Code: Alles auswählen

            If Start.CodeKill_btn = True Then
                     Application.ScreenUpdating = False
                        wbAlt.Sheets("" & BL & "").Copy
                        Application.DisplayAlerts = False
                        ActiveWorkbook.SaveAs "tmp.xlsx"
                        Application.EnableEvents = False
                           Cells.Select
                           Selection.Copy
                           Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                               :=False, Transpose:=False
                        Application.EnableEvents = True
                        
                        ActiveWorkbook.Close savechanges:=True
                        Application.DisplayAlerts = True
                           Dateipfad = ActiveWorkbook.Path
                           Dateiname = "\tmp.xlsx"
                           Workbooks.Open (QPath & Dateiname)
                        Set wbtmp = Workbooks(wstmp)
                        wbtmp.Sheets("" & BL & "").Copy Before:=ThisWorkbook.Sheets(1)
                        ThisWorkbook.Sheets("" & BL & "").Move After:=Sheets(Sheets.Count)
                        ActiveWindow.Zoom = 100
                     wbtmp.Close savechanges:=False
                     wbAlt.Close savechanges:=False
                     Kill ("tmp.xlsx")
            ElseIf Start.CodeKill_btn = False Then
               wbAlt.Sheets("" & BL & "").Copy Before:=ThisWorkbook.Sheets(1)
               ThisWorkbook.Sheets("" & BL & "").Move After:=Sheets(Sheets.Count)
               ActiveWindow.Zoom = 100
               wbAlt.Close savechanges:=False
            End If

Benutzeravatar
d'r Bastler
Beiträge: 683
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 177 Mal
Danksagung erhalten: 91 Mal

Re: Blatt (ohne evtl. vorhandenen VBA-Code) aus anderer Datei holen.

#2

Beitrag von d'r Bastler »

Moin Herr Doctor,

lässt Du ein bisschen mehr wissen, wie Dein Snippet einzuordnen ist: Als Bestandteil einer Userform oder eines ActiveX-Buttons? Als Aufgabe habe ich verstanden: Hole Daten aus Workbook_B.Sheets(X) nach Workbook_A.Sheets(X). Kommt das hin?

lg
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Benutzeravatar
d'r Bastler
Beiträge: 683
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 177 Mal
Danksagung erhalten: 91 Mal

Re: Blatt (ohne evtl. vorhandenen VBA-Code) aus anderer Datei holen.

#3

Beitrag von d'r Bastler »

Moin allerseits,

in der Hoffnung damit BitDoctors Bedarf getroffen zu haben, hier mal eine Schnellbastelei, die schon folgendes kann:
  • Per Userform werden alle XL-Dateien im selben Verzeichnis in eine ComboBox eingelesen*
  • Ist dort eine Datei ausgewählt, werden deren Arbeitsblätter in einer zweiten Combox zur Auswahl gestellt. Dabei wird die Datei weder sichtbar geöffnet, noch verändert.
  • Ein CommandButton startet den Kopiervorgang ins aktive Blatt der aufrufenden Tabelle.
* Es sollten natürlich schon ein, zwei Dateien vorhanden sein, die aufrufende Datei und die Tilde bleiben außen vor.

Da ist natürlich noch viel Feintuning möglich, aber vielleicht ein Ausgangspunkt für Verbesserungen ...
theCopyCat.xlsm
(24.94 KiB) Noch nie heruntergeladen

Viel Spaß damit!
Folgende Benutzer bedankten sich beim Autor d'r Bastler für den Beitrag:
BitDoctor
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Benutzeravatar
BitDoctor
Beiträge: 17
Registriert: 18. Aug 2024, 21:04
Hat sich bedankt: 8 Mal
Danksagung erhalten: 5 Mal
Kontaktdaten:

Re: Blatt (ohne evtl. vorhandenen VBA-Code) aus anderer Datei holen.

#4

Beitrag von BitDoctor »

Halloooo aber natürlich :D ,
nach betätigen eines Active-X Buttons wird man gebeten via "= Application.GetOpenFilename.." 2 Dateien (inkl. nachfolgender Blattwahl) zu wählen.
Dann werden diese beiden Blätter in die "ToolDatei" kopiert.
Und genau da ist der Code-Schnipsel dran. s.o.

WinkeGrüße
Benutzeravatar
BitDoctor
Beiträge: 17
Registriert: 18. Aug 2024, 21:04
Hat sich bedankt: 8 Mal
Danksagung erhalten: 5 Mal
Kontaktdaten:

Re: Blatt (ohne evtl. vorhandenen VBA-Code) aus anderer Datei holen.

#5

Beitrag von BitDoctor »

Dein CopyCat schaue ich mir noch im Detail an.

hier noch ein Schnipsel die 2. Datei danach identisch - mit dem "BlQuelleZ = Import....." wirkt dann obriger Codeteil der die Blattwahl und das "Blattkopieren" übernimmt.

Code: Alles auswählen

   xlZ = Application.GetOpenFilename("Microsoft Excel-Dateien (*.xl*),*.XL*", , "Bitte als erstes die *Ziel*-Datei öffnen und danach die *Quell*-Datei")
   If xlZ = "Falsch" Then GoTo DATFEHLER
      Set WBQuelleZ = Workbooks.Open(Filename:=xlZ, ReadOnly:=True)
         BlQuelleZ = Import("" & xlZ & "", WBQuelleZ.Worksheets.Count)
   If BlQuelleZ = "" Then Exit Sub
   strNameZ = Dir(xlZ)
   strPathZ = Left(xlZ, InStrRev(xlZ, "\"))   'Pfad("" & xlZ & "")
   strPathZ = IIf(Right$(strPathZ, 1) = "\", strPathZ, strPathZ & "\")
   NameOhneXLS = RechtsWeg(strNameZ, ".")
   ActiveSheet.Name = BlQuelleZ & "_Z"
   BlQuelleZ = ActiveSheet.Name
   Application.EnableEvents = False
   Start.Range("S2").Value = BlQuelleZ
   Application.ScreenUpdating = True
   On Error Resume Next
      ÜSPZ = InputBox("In welcher Zeile befinden sich die Überschriften ?" & vbCrLf & vbCrLf & "ohne Eingabe = Abbruch", "Überschriftenzeile", 3)
      If ÜSPZ = 0 Then
   Application.ScreenUpdating = False
      Application.DisplayAlerts = False
         Sheets(BlQuelleZ).Delete
         Start.Range("E21").Select
      Application.DisplayAlerts = True
         Exit Sub
      ElseIf ÜSPZ < 0 Then
         GoTo Formset  'ÜSPZ = 1
      End If
   On Error GoTo 0
   Start.Range("N5").Value = ÜSPZ
   Start.Range("AA1").FormulaLocal = "=N5"
    Start.Range("N5").Interior.Color = RGB(235, 248, 255)
   ChDir strPathZ
Theoretisch läuft das ja alles. Ich dachte halt evtl. einen besseren Weg zur Code-Befreiung zu finden, als das Zwischenspeichern über eine temporäre .xlsx.
Benutzeravatar
BitDoctor
Beiträge: 17
Registriert: 18. Aug 2024, 21:04
Hat sich bedankt: 8 Mal
Danksagung erhalten: 5 Mal
Kontaktdaten:

Re: Blatt (ohne evtl. vorhandenen VBA-Code) aus anderer Datei holen.

#6

Beitrag von BitDoctor »

d'r Bastler hat geschrieben: 20. Aug 2024, 13:29 Moin allerseits,

in der Hoffnung damit BitDoctors Bedarf getroffen zu haben, hier mal eine Schnellbastelei, die schon folgendes kann:

Da ist natürlich noch viel Feintuning möglich, aber vielleicht ein Ausgangspunkt für Verbesserungen ...
Hallo heb,

danke für deinen schnellen Schuss. Ich habe mir deine CopyCat angeschaut. Guter Ansatz (ähnlich hatte ich gaaanz am Anfang auch versucht)
Und für manche Tabellen-Aufbauten auch gut geeignet. Durch das kopieren der Zellinhalte verliert das Blatt aber sein "Outfit" und das ist, zumindest an der Stelle, ungewünscht. Darum der Weg über Blatt kopieren.
Benutzeravatar
d'r Bastler
Beiträge: 683
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 177 Mal
Danksagung erhalten: 91 Mal

Re: Blatt (ohne evtl. vorhandenen VBA-Code) aus anderer Datei holen.

#7

Beitrag von d'r Bastler »

aaah .... jetzt kommen die relevanten Informationen :D

Moin,

wie gesagt ist the CopyCat ausbaufähig. z.B. mit einer Mehrfachauswahl in den ComboBoxen und einer CheckBox auch Formatierungen mitzunehmen. Bloß bei verbundenen Zelle steige ich aus und verweise auf thowes Kommentar in Deinem ersten Thread.

lg
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Benutzeravatar
BitDoctor
Beiträge: 17
Registriert: 18. Aug 2024, 21:04
Hat sich bedankt: 8 Mal
Danksagung erhalten: 5 Mal
Kontaktdaten:

Re: Blatt (ohne evtl. vorhandenen VBA-Code) aus anderer Datei holen.

#8

Beitrag von BitDoctor »

Ungeachtet Allem, Danke für dein tun.
Die eigtl. Frage abgekürzt.

Gibt es einen Weg, aus einer anderen Datei ein Blatt in eine Datei zu holen(Blatt kopieren) ohne den evtl. vorhandenen VBA-Code mit zu kopieren ?
Benutzeravatar
d'r Bastler
Beiträge: 683
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 177 Mal
Danksagung erhalten: 91 Mal

Re: Blatt (ohne evtl. vorhandenen VBA-Code) aus anderer Datei holen.

#9

Beitrag von d'r Bastler »

Deine Abkürzung so einfach mit Ja/Nein zu beantworten, geht leider nicht.

Da spielen verschiedenen Aspekte eine Rolle: Enthält das Quellblatt Formeln mit Bezügen zur Quellmappe? Willst Du diese mitnehmen und auf die Zielmappe übertragen, oder nur die Daten + eventuelle Formatierungen?

Du hast ober geschrieben, dass Du den Weg über eine xlsx versucht hast. Bedeutet das, dass Du nur Formeln verwendest, die sich im Quellblatt auf dieses selbst beziehen? Oder sind es mehrere Blätter, die sich auch per Formel auf einander beziehen?

Vielleicht stellst Du mal zwei (natürlich anynomisierte, aber ansonsten vollständige) Mappen /Quelle/Ziel hier ein. Sonst bleibt es ziemlich nebulös und schlecht zu verstehen.

Als reine Datenschaufel (also nur Werte keine Formeln, kein VBA) eignet sich theCopyCat schon in seiner o.g. Version. Die in Arbeit befindliche nächste Runde sieht dann so aus und lässt sowohl bei Mappen wie Blättern Mehrfachauswahl zu. Am Code schnitze ich noch.
v0.2.jpg
v0.2.jpg (43.86 KiB) 1740 mal betrachtet
Die linke Listbox wird beim Öffnen gefüllt, die zweite durch die Auswahl links, die rechte durch Doppelklick in der Mitte. Falsche Auswahl kann gelöscht werden. Die beiden Buttons in den Frames sind ToggleButtons mit zwei Optionen

lg
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
xlKing
Beiträge: 37
Registriert: 30. Mai 2024, 19:42
Hat sich bedankt: 2 Mal
Danksagung erhalten: 35 Mal
Kontaktdaten:

Re: Blatt (ohne evtl. vorhandenen VBA-Code) aus anderer Datei holen.

#10

Beitrag von xlKing »

Hallo zusammen,

Dann schalt ich mich auch mal mit ein:
@Bastler: Wenn du mit der rechten Maustaste auf ein Tabellenblatt gehst, kannst du das kopieren oder verschieben. Dabei werden nicht nur die Daten sondern auch Seiteneinstellungen, Kopfzeilen usw. mit übernommen. persönlich finde ich das in vielen Fällen nützlicher als das rumgewurschtel mit Copy und Paste. Hast du sicher auch schon genutzt. Der Code um ein Blatt in eine Neue Arbeitsmappe zu bekommen lautet Activesheet.Copy

@BitDoctor: Ich würde das Blatt weiterhin mitsamt dem Code in die Zielmappe kopieren und dann den Code dort am Ende des Makros mit folgenden Zeilen löschen:

Code: Alles auswählen

Dim ZielWorkbook As Workbook

'Set ZielWorkbook = ...

With ZielWorkbook.VBProject.VBComponents(ZielWorkbook.Sheets(1).CodeName).CodeModule
  .DeleteLines 1, .CountOfLines
End With
Damit sparst du dir den Zwischenschritt über Speichern als xlsx.

Gruß Mr. K.
Folgende Benutzer bedankten sich beim Autor xlKing für den Beitrag (Insgesamt 2):
BitDoctor, d'r Bastler
Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast