Hallo Profi ich habe in Tabelle1 ab Spalte "BC" ein extern gespiesener Datenpool. Daraus werden per Makro die für mich relevanten Spalten extrahiert und ab Spalte A eingetragen. Dazu wird im "VBA Projekt" in "Tabelle1" zusätzlich der Code aus "targed_Portrait" verwendet. Beim Zurückschreiben von Ändernungen zum Datenpool benötige ich aber den Code aus "targed_zurück_zu_Datenpool" in "Tabelle1". Dies wolte ich per Makrorecorder aufzeichnen, was jedoch funktionierte. Ist das Umschalten per Makro überhaut machbar? Wenn ja wie lautet der Code, oder gibt es eine andere Lösung? Bitte um eure Hilfe. Gruss Martin
Hallo Namensvetter, ein Private Sub Worksheet_Change(ByVal Target As Range) in einem Modul ist Unsinn, das kann nicht gehen. Ein solches Sub ist an eine Tabelle gebunden und erhält von dort auch den Parameter Target. Wenn Du den Inhalt des _Change-Subs einzig aus dem Aufruf eines anderen Subs Tabelle1_Change(ByVal Target as Range) bastelst, kannst Du den bisherigen Code des Change-Subs in dieses übernehmen. Das Sub Tabelle1_Change(...) kann dann in einem Modul stehen und von überall aufgerufen werden. Gruß der ALteDresdner (mit bürgerlichem Namen Martin)
Hallo Namensvetter, danke für die Antwort. Ich weiss das die Module so nicht funktionieren. Aus diesen 2 targed ... in den Modulen kopiere ich manuell den Makrotext in Tabelle1 und überschreibe den alten Makrotext und wenn nötig wieder zurück. Ich suche eine Möglichkeit, dass wenn "targed_Portait" in Tabelle1 abgelaufen ist, den Inhalt gelöscht wird und durch den Text von "targed_zurück_zu _Datenpoo"l in Tabell1 ersetzt wird.
Oder anderst ausgerükt: Lösche in Tabelle 1 in "targed_Portrait" den Text; öffne "targed_Daten_zurück_zu_Datenpool"; markiere den Inhalt ; kopiere ihn in Tabelle1.
Hallo, wenn ich dich richtig verstanden habe, tauschst du den Makrotext in den Subs aus? Das könnte man auch so regeln, dass beide Makros in dem Change-Sub vorhanden sind und durch eine passend gesetzte Public Variable vom Typ Boolean abwechselnd in Szene gesetzt werden. Gruß der Martin
Hallo Martin (der ALteDresdner), danke für deine Antwort. Ja du hast richtig verstanden. Wenn man beides kombinieren könnte wäre das toll. Doch wie, da bin ich überfordert. Wäre dankbar, wenn du mir helfen würdest. Gruss Martin
Hallo Martin, da ich verständlicherweise in Deinem Makroablauf nicht durchsehe, hier ein Code, der das Prinzip darstellt.
Code:
Option Explicit Public MakroWechsel 'absichtlich kein Typ angegeben Private Sub Worksheet_Change(ByVal Target As Range) If VarType(MakroWechsel) <> vbBoolean Then MakroWechsel = True '1. setzen nach Dateistart If MakroWechsel Then Makro1 Else Makro2 End If MakroWechsel = Not MakroWechsel End Sub Sub Makro1() MsgBox "Makro1" End Sub Sub Makro2() MsgBox "Makro2" End Sub
Guten Tag Martin (der AlteDresdner) hier die neue Tabelle mit allen Makro, zur besseren Nachverfolgung. Mit dem Button "Quelldaten nach Zieldatei kopieren, startet das Makro "Personendaten_Spalten_kopieren" welches automatisch die andern Makro aufruft. Das funktioniert alles soweit gut.
Ich möchte anschliessend im "VBA Projekt in Tabelle1" den Text durch denjenigen aus"targed_zurück_nach_Quelle" ersetzen.
Beim Anpassen des "Public MakroWechsel" bin ich immer noch am üben. Da könnte ich nochmals deine Hilfe gebrauchen Gruss Martin
Hallo Martin, warum auch immer Du das so tun willst, es ist etwas ungewöhnlich. Ich würde beide Codevarianten in das Sub stecken und mit einer If-Else-Konstruktion laufen lassen. Wenn Du einmalig etwas Anderes tun willst, kannst Du Dir das ja über eine einmal gesetzte boolsche Variable merken, bei dauerndem Wechsel übder die von mir oben vorgeschlagene Variante. Wenn Du aber partout den Code tauschen willst: Es gibt eine Möglichkeit, den Code zeilenweise zu ersetzen, das ist aber aufwendig. Der m.E. einfachste Weg wäre: Schreibe das _Change-Sub so, dass es nur aus dem Aufruf eines anderen Makros besteht, also sinngemäß Private Sub ..._Change(Byval Target as Range) Tab1_Change Target End Sub und schicke den eigentlichen Inhalt des Makros in einen Modul, z.B. Tab1_C. Die zweite Variante des Subs Tab1_Change bastele einmal in einen Modul Tab1_C und exportiere ihn, das ergibt ein Tab1_C.bas. Mit der Konstruktion With Activeworkbook.VBProject.VBComponents .Remove .Item("Tab1_C") .Import ThisWorkbook.Path & "\" & "Tab1_C.bas"
End with tauscht Du das alte gegen das neue Makro aus. Ich wollte Dir das eigentlich in der geposteten Datei schreiben, bin aber über Deine, Du verzeihst, "unordentliche" Codierung gestolpert. Mal Sheets("Tabelle1"), mal .Tabelle3, mal Me... Wenn Du Deine Code jemals nach 2 Monaten Pause korrigieren/erweitern willst: Viel Spaß! Martin, damit will ich es bewenden lassen. Wenn Du mir nicht zwingende Gründe für den Codetausch und eine halbwegs saubere Codierung postest, wäre ich dann raus.
26.04.2022, 01:05 (Dieser Beitrag wurde zuletzt bearbeitet: 26.04.2022, 01:13 von luna101.)
Guten Abend Martin, danke für deine Info mit den Möglichkeiten, wie das machbar wäre. Da mein erster Post mehr Fragen aufwarf habe ich nochmals eine halbwegs lauffähige Version gepostet in der Hoffnung, dass damit mein Wunsch klarer ersichtlich ist, doch habe ich damit nur noch mehr Fragen produziert. Ich möchte, wenn der Kopiervorgang abgeschlossen ist, wie Du erwähst hast, nur den alten Makrocode durch den neuen Makrocode ersetzen, damit ich bei Bedarf Daten wieder zurück schreiben kann. Leider reicht mein Wissen nicht aus, dies zu realisieren. Schade, da muss ich es machen wie bisher.
Ich öffne "targed_zurück_nach_Quelldaten", markiere und kopiere den Code, öffne "Tabelle1" lösche den alten Code und ersetze ihn durch den neuen Code.
Danke für Deine bisherigen Bemühungen. Darum mein nochmaliger Hilferuf. Wünsche eine gute Nacht. Gruss Martin