326 Aufrufe
Gefragt in Anwendungen(Java,C++...) von csav1449 Einsteiger_in (23 Punkte)

Hallo liebe Experten,

bin noch Anfänger mit Makros und versuche mich derzeit daran.

Folgendes Problem: Ich habe ein Arbeitsmappe "Eingabe" und eine Arbeitsmappe "EMail".

In der Arbeitsmappe "Eingabe" gibt es eine Tabelle mit den Spalten (A = ID, B= Nachname, C = Vorname, usw.).

Arbeitsmappe "Eingabe"
ID Nachname Vorname
1 Muster Max
2 Mustermann Maxi
3 Müller Sigi

Nun möchte ich das automatisch, wenn ich die Zeile wechsle, also z.B. von ID 1 zu ID 2, das sich in der Arbeitsmappe "EMail" die Zelle (F3) für den Nachname und die Zelle (G3) für den Vornamen mit verändert (hier soll dann immer der Nachname bzw. Vorname der aktuellen Zeile in der ich mich in Arbeitsmappe "Eingabe" befinde, wiedergegeben werden.

Ist das i-wie mit einem Makro möglich? Bin für jeden Ansatz dankbar.

6 Antworten

+1 Punkt
Beantwortet von m-o Profi (22.8k Punkte)

Hallo Chris,

über das Worksheet-SelectionChange-Ereignis kannst du ein Ereignis auslösen, wenn du eine andere Zelle auswählst. Willst du nur ein Ereignis bei einem Zeilenwechsel auslösen, so geht das mit etwas Aufwand auch. Hier mal eine kleine Beispieltabelle: Download

Wenn ich dich richtig verstehe, soll bei einem Zeilenwechsel in einer anderen Arbeitsmappe in zwei festen Zellen der Vor- und Nachname geändert werden. Dies bedeutet, dass du bei jedem Zeilenwechsel die Zielarbeitsmappe öffnen, die Namen übertragen und die Zielarbeitsmappe wieder speichern und schließen musst. Alternativ kannst du natürlich auch die Zielarbeitsmappe beim Öffnen der Arbeitsmappe "Eingabe" ebenfalls öffnen.

Das ist natürlich alles möglich. Aber wenn du z.B.nur einen Namen erfassen willst und du in die neue Zeile klickst, wird der Vorname und Name aus der Zeile, in der der Cursor vorher war, übertragen.

Erkläre doch mal, was du damit erreichen willst.

Gruß

M.O.

0 Punkte
Beantwortet von csav1449 Einsteiger_in (23 Punkte)
Danke fürs schreiben.
Ziel ist es, wenn die aktuell markierten zellwerte in der Arbeitsmappe "EMail" übernommen werden. Mache ich im nächsten schritt mit einem button eine email auf mit der vorlage aus der Arbeitsmappe "EMail" als pdf im anhang. Damit der anhang direkt jem anspricht

Daher wäre es gut wenn die aktuelken werte, in der ich mich gerade befinde, übernommen werden.

Vl weisst du ja eine gute lösungsansatz für mich.
+1 Punkt
Beantwortet von m-o Profi (22.8k Punkte)

Hallo Chris,

da hast du dir als Anfänger aber ein ganz schönes Projekt vorgenommen.

Ich würde das Blatt, das du als PDF versenden willst, der Einfachheit halber in der selben Tabelle abspeichern, in der die Adressen stehen. Auch würde ich die Übertragung von Namen und Vornamen per Button starten.

Ich habe dir noch mal eine kleine Beispieldatei angehängt. Hier erfolgt der Versand per Outlook. Beachte, dass für dieses Makro im VBA-Editor unter Extras - Verweise bei Microsoft Outlook XX.0 Object Library oder bei Microsoft XX.0 Object Library der entsprechende Haken gesetzt werden muss (das XX steht für deine Office-/Outlookversion).

Hier die neue Beispieldatei: Download

Gruß

M.O.

0 Punkte
Beantwortet von csav1449 Einsteiger_in (23 Punkte)
Hallo M.O.,

hab gemerkt, das es mit einem Makro ziemlich schwierig wird. Daher versuche ich es mit einem Button, welcher die Daten in der markierten Zeile eine bestimmten Spalteneintrag, in das 2te Arbeitsblatt übernimmt.

Auf der angegeben Tabelle oben ("Eingabe") habe ich einen Button eingefügt "EMail schreiben" der bei Klick folgende Aktion ausführen soll:

Sub Mailsenden_Klicken()

   Worksheets("Eingabe").Range(Cells(ActiveCell.Row, 2)).Copy Destination:=Worksheets("EMail").Range("B6")

End Sub

Damit sollte bei Klick auf den Button eigentlich, wenn ich in der Zeile "A3" stehe, der Nachname "Mustermann" in die Arbeitsmappe "EMail" in Zelle B6 eingefügt werden.

Jedoch kommt immer eine Fehlermeldung. Kann mir jemand meinen Fehler sagen?
+1 Punkt
Beantwortet von m-o Profi (22.8k Punkte)

Hallo Chris,

bei der Kopierfunktion brauchst du kein Range wenn du nur eine Zelle ansprichst:

Worksheets("Eingabe").Cells(ActiveCell.Row, 2).Copy Destination:=Worksheets("EMail").Range("B6")

Du kannst das Übertragen des Namens einfach so machen:

ThisWorkbook.Worksheets("EMail").Range("B6") = Cells(ActiveCell.Row, 2)

Da der Code ja im Blatt "Eingabe" ausgeführt wird, brauchst du hier das Arbeitsblatt nicht angeben. Ohne Angabe eines Arbeitsblatts wird immer die Zelle im aktuell aktiven Arbeitsblatt genommen.

Gruß

M.O.

P.S. siehe meine Beispieldatei in meiner 2. Antwort wink

0 Punkte
Beantwortet von csav1449 Einsteiger_in (23 Punkte)
Nochmals vielen Dank für die hilfe. Mal schauen wie ich den Rest hinbekomme .

Kann sein das ich mich nochmals melde
...