Ausführen einer VBA Anweisung wenn in der Zelle C1 Wahr steht
Ausführen einer VBA Anweisung wenn in der Zelle C1 Wahr steht
Hallo @ll,
ich habe eine Exceldatei in der ich meine Termin für Angebote verwalte, nun hab ich ein Makro gefunden mit dem ich per Aktivierung des Makros die Zelle A1 und B1 in das Outlook
übergebe, nun ist mein gedanke das ich das auch Automatisieren übergeben kann in dem ich in der Zelle C1 eine Wahrheitsprüfung mach. So zu sagen wenn der Wahr in der Zelle C1 steht
soll die Makroprozedur aufgerufen werden, kann mit einer einen Tip geben mit welchen Befehl ich die VBA-Anweisung ausführen kann.
MfG
Wachsi
Hallo @ll,
ich habe eine Exceldatei in der ich meine Termin für Angebote verwalte, nun hab ich ein Makro gefunden mit dem ich per Aktivierung des Makros die Zelle A1 und B1 in das Outlook
übergebe, nun ist mein gedanke das ich das auch Automatisieren übergeben kann in dem ich in der Zelle C1 eine Wahrheitsprüfung mach. So zu sagen wenn der Wahr in der Zelle C1 steht
soll die Makroprozedur aufgerufen werden, kann mit einer einen Tip geben mit welchen Befehl ich die VBA-Anweisung ausführen kann.
MfG
Wachsi
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 129503
Url: https://administrator.de/forum/ausfuehren-einer-vba-anweisung-wenn-in-der-zelle-c1-wahr-steht-129503.html
Ausgedruckt am: 23.12.2024 um 11:12 Uhr
17 Kommentare
Neuester Kommentar
http://www.google.com/search?q=vba%20trigger%20on%20cell%20change
Das bringt einen recht schnell zu:
http://msdn.microsoft.com/de-de/library/microsoft.office.tools.excel.wo ...
http://msdn.microsoft.com/de-de/library/microsoft.office.tools.excel.wo ...
Der Rest sollte ja kein Problem mehr sein, wenn du dich mit VBA auskennst.
Grüße
Max
Das bringt einen recht schnell zu:
http://msdn.microsoft.com/de-de/library/microsoft.office.tools.excel.wo ...
http://msdn.microsoft.com/de-de/library/microsoft.office.tools.excel.wo ...
Der Rest sollte ja kein Problem mehr sein, wenn du dich mit VBA auskennst.
Grüße
Max
Hallo wachsi!
In der Annahme, dass der Wahrheitswert in C1 durch eine Formel in Abhängigkeit der Zellen A1 und B1 erzeugt wird z.B.
würde dieser Code in das entsprechende Tabellenblatt kopiert Dein Makro automatisiert aufrufen:
zum testen diesen Code z.B. in Modul 1 einfügen:
Gruß Dieter
In der Annahme, dass der Wahrheitswert in C1 durch eine Formel in Abhängigkeit der Zellen A1 und B1 erzeugt wird z.B.
=Wenn(Und(A1=1;B1=1);Wahr();Falsch()) |
Private Sub Worksheet_Change(ByVal Target As Range)
If (Target.Address = "$A$1" Or Target.Address = "$B$1") And Range("C1") = True Then Call MakroName
End Sub
zum testen diesen Code z.B. in Modul 1 einfügen:
Sub MakroName()
MsgBox "Test"
End Sub
Gruß Dieter
Hallo wachsi!
Was funkioniert schon?
Also, wenn Du meine Beispiel-Formel verwendest und den Code im VB-Editor in das Tabellenblatt mit der Formel kopiert hast und der MakroName durch den Namen Deines Makros ersetzt hast, dann sollte es funktionieren.
Deine Formel in Zelle C1 ist mir unbekannt und wenn Deine Formel sinngemäß anders als meine Beispiel-Formel lautet, dann funktioniert der Makro-Aufruf logischerweise auch nicht
Wie lautet Deine Formel in Zelle C1?
Gruß Dieter
Was funkioniert schon?
Also, wenn Du meine Beispiel-Formel verwendest und den Code im VB-Editor in das Tabellenblatt mit der Formel kopiert hast und der MakroName durch den Namen Deines Makros ersetzt hast, dann sollte es funktionieren.
Deine Formel in Zelle C1 ist mir unbekannt und wenn Deine Formel sinngemäß anders als meine Beispiel-Formel lautet, dann funktioniert der Makro-Aufruf logischerweise auch nicht
Wie lautet Deine Formel in Zelle C1?
Gruß Dieter
Hallo wachsi!
Zunächst hast Du den Code unsachgemäß verändert ohne zu wissen, was nun eigentlich passiert.
Im Moment sieht es so aus, dass solange in der Zelle T6 Wahr steht, Du bei wahlloser Änderung eines Zellinhalts der restlichen 65534 Zellen im Tabellenblatt, jedesmal Dein Makro mit T6 aufgerufen wird und das ist mit Sicherheit nicht Sinn der Sache.
Und da mir Deine Formel immer noch unbekannt ist, kann ich Dir leider nicht weiterhelfen. Die Tatsache das in den Zellen T6 - T25 ein Wahrheitswert steht ist dabei eher nebensächlich.
Gruß Dieter
PS. Du könntest noch etwas zum bisherigen Ablauf erläutern. z.B Zelle xy markiert und dann Makro gestartet. Sowas in der Art oder das Makro posten
Zunächst hast Du den Code unsachgemäß verändert ohne zu wissen, was nun eigentlich passiert.
Im Moment sieht es so aus, dass solange in der Zelle T6 Wahr steht, Du bei wahlloser Änderung eines Zellinhalts der restlichen 65534 Zellen im Tabellenblatt, jedesmal Dein Makro mit T6 aufgerufen wird und das ist mit Sicherheit nicht Sinn der Sache.
Und da mir Deine Formel immer noch unbekannt ist, kann ich Dir leider nicht weiterhelfen. Die Tatsache das in den Zellen T6 - T25 ein Wahrheitswert steht ist dabei eher nebensächlich.
Gruß Dieter
PS. Du könntest noch etwas zum bisherigen Ablauf erläutern. z.B Zelle xy markiert und dann Makro gestartet. Sowas in der Art oder das Makro posten
Hallo Peter!
Anhand Deiner Angaben bedeutet das programmtechnisch:
Wenn sich Bereich F1:G25 ein Zellinhalt ändert, dann ermittle die Zeilennummer und prüfe, ob in dieser Zeile in Spalte T der Wert "Wahr" steht.
Dein Makro Termin() wird dabei insoweit geändert, dass die Einträge der Zellen direkt übergeben werden. Das sieht dann in etwa so aus:
Call Termin(Text_F1, Text_G1).
Das mal vorab
Gruß Dieter
PS. Das Makro Termin liest beim Start derzeit nacheinander alle Zeilen aus und überträgt somit alle Termine an Outlook. Wenn ich Dich aber richtig verstanden habe, dann soll doch jeweils nur ein geänderter Termin übergeben werden oder sehe ich das falsch?
Zitat von @wachsi08:
kannst du mir erstmal erklären für was die erste Zeile deines Codes steht
"Private Sub Worksheet_Change(ByVal Target As Range)" bzw was damit eigentlich passiert.
Die Sub ist eine Change-Ereignis-Routine und wird automatisch nach jeder Änderung einer beliebigen Zelle im ganzen Tabellenblatt aufgerufen. Deshalb ist es wichtig festzulegen, für welche Zelländerungen eine Aktion ausgeführt werden soll. Wenn Du also z.B. in Zelle A1 etwas reinschreibst und die Eingabe z.B. mit Enter abschließt, dann wird die Sub aufgerufen und im Parameter 'Target' wird das geänderte Zell-Object übergeben. Somit ist mir die Adresse (A1), die Zeilen-Nummer (1), die SpaltenNummer (1) etc. der geänderten Zelle bekannt.kannst du mir erstmal erklären für was die erste Zeile deines Codes steht
"Private Sub Worksheet_Change(ByVal Target As Range)" bzw was damit eigentlich passiert.
Anhand Deiner Angaben bedeutet das programmtechnisch:
Wenn sich Bereich F1:G25 ein Zellinhalt ändert, dann ermittle die Zeilennummer und prüfe, ob in dieser Zeile in Spalte T der Wert "Wahr" steht.
Dein Makro Termin() wird dabei insoweit geändert, dass die Einträge der Zellen direkt übergeben werden. Das sieht dann in etwa so aus:
Call Termin(Text_F1, Text_G1).
Das mal vorab
Gruß Dieter
PS. Das Makro Termin liest beim Start derzeit nacheinander alle Zeilen aus und überträgt somit alle Termine an Outlook. Wenn ich Dich aber richtig verstanden habe, dann soll doch jeweils nur ein geänderter Termin übergeben werden oder sehe ich das falsch?
Hallo Peter!
Es wird nur 1 Sub Termin() benötigt.
Ich habe ja in der letzten Antwort schon geschrieben, das die Zellinhalte von der Sub Change() direkt übergeben werden. D.h. Du schreibst z.B. in die Zellen F6 und G6 etwas rein und wenn dann in der Zelle T6 Wahr steht, dann wird die Sub Termin mit dem Zellinhalt der Zellen F6 und G6 aufgerufen. Das Makro Termin(..) muss ich dann natürlich noch entsprechend anpassen.
Ausserdem würde ich nun endlich gerne noch wissen, ob z.B. in T6 jetzt eine Formel steht oder ob Du das Wahr per Hand eingibst??????
Gruß Dieter
Es wird nur 1 Sub Termin() benötigt.
Ich habe ja in der letzten Antwort schon geschrieben, das die Zellinhalte von der Sub Change() direkt übergeben werden. D.h. Du schreibst z.B. in die Zellen F6 und G6 etwas rein und wenn dann in der Zelle T6 Wahr steht, dann wird die Sub Termin mit dem Zellinhalt der Zellen F6 und G6 aufgerufen. Das Makro Termin(..) muss ich dann natürlich noch entsprechend anpassen.
Ausserdem würde ich nun endlich gerne noch wissen, ob z.B. in T6 jetzt eine Formel steht oder ob Du das Wahr per Hand eingibst??????
Gruß Dieter
Hallo!
In diesem Fall, ist die Zelle mit dem Wahrheitswert z.B. T6 vollkommen überflüssig.
Die Change-Routine wird ja bei einer Zelländerung automatisch aufgerufen, sobald Du in Zelle G6 einen Text eingibst und die Eingabe z.B. mit der Enter- oder Pfeiltaste bestätigst. D.h. die Change-Routine kann selbst überprüfen, ob die Zelle F6 und G6 ein gültiges Format enthält und die Termin-Routine mit diesen Parametern aufrufen. Bei einer Änderung des Zellinhaltes in T6 durch eine Formel, wird kein Change-Ereignis ausgelöst, insofern ist dieser Wert nicht von nutzen.
Gruß Dieter
In diesem Fall, ist die Zelle mit dem Wahrheitswert z.B. T6 vollkommen überflüssig.
Die Change-Routine wird ja bei einer Zelländerung automatisch aufgerufen, sobald Du in Zelle G6 einen Text eingibst und die Eingabe z.B. mit der Enter- oder Pfeiltaste bestätigst. D.h. die Change-Routine kann selbst überprüfen, ob die Zelle F6 und G6 ein gültiges Format enthält und die Termin-Routine mit diesen Parametern aufrufen. Bei einer Änderung des Zellinhaltes in T6 durch eine Formel, wird kein Change-Ereignis ausgelöst, insofern ist dieser Wert nicht von nutzen.
Gruß Dieter
Hallo Peter!
Hier mal was zum Testen.
Diesen Quelltext im VB-Editor in das entsprechende Tabellenblatt kopieren:
"TestMakro" nach dem testen durch "Termin" ersetzen.
Diesen Quelltext zum testen im VB-Editor in ein Modul kopieren:
Deinen Termin-Code im VB-Editor durch diesen Quelltext ersetzen:
Gruß Dieter
Hier mal was zum Testen.
Diesen Quelltext im VB-Editor in das entsprechende Tabellenblatt kopieren:
Option Explicit
Const SpalteF = 6 'Spalte F
Const SpalteG = 7 'Spalte G
Const ZeilenB = 1 'Zeilen Begin
Const ZeilenE = 25 'Zeilen Ende
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If .Column <> SpalteG Or .Row < ZeilenB Or .Row > ZeilenE Or IsNull(.Text) = True Then Exit Sub
If IsDate(Cells(.Row, SpalteF)) = True And Cells(.Row, SpalteG).Text <> "" Then
Call TestMakro(Cells(.Row, SpalteF), Cells(.Row, SpalteG))
End If
End With
End Sub
Diesen Quelltext zum testen im VB-Editor in ein Modul kopieren:
Sub TestMakro(ByRef Datum, ByRef Text)
MsgBox "Datum: " & Datum & " Text: " & Text
End Sub
Deinen Termin-Code im VB-Editor durch diesen Quelltext ersetzen:
Sub Termin(ByRef Datum, ByRef Text)
'OutApp As Outlook.Application
Dim OutApp As Object, apptOutApp As Object, Nachricht As Object
Set OutApp = CreateObject("Outlook.Application")
Set Nachricht = OutApp.CreateItem(0)
With Nachricht
.to = "xxx@xx.de"
.Subject = "Erinnerung für Angebot"
.Body = "Bitte rufen Sie beim Auftraggeber an wie weit der Bearbeitungsstand des Angebotes ist." & "Termin: " & Datum & " Bauvorhaben: " & Text
.Send
End With
Set OutApp = Nothing
Set Nachricht = Nothing
Set OutApp = CreateObject("Outlook.Application")
Set apptOutApp = OutApp.CreateItem(1) 'olAppointmentItem
With apptOutApp
'Datum aus Spalte F
.Start = Format(Datum, "dd.mm.yyyy") & " 06:00"
'Dauer. Angabe ist jeweils in ganzen Minuten zu setzen
'Betreff aus Spalte G
.Subject = Text
'Zusätzlicher Text
.Body = ""
'ort13-
.Location = ""
.Duration = "5"
'Erinnerung
.ReminderMinutesBeforeStart = 60
'Erinnerung wiederholen
.ReminderSet = True
'Termin speichern
.Save
End With
Set apptOutApp = Nothing
Set OutApp = Nothing
MsgBox "Termin an Outlook übertragen!"
End Sub
Gruß Dieter
Hallo Peter!
Yep, gern geschehen
Jenachdem, ob VBA für Access, Excel, Word usw. empfehle ich persönlich Bücher von Michael Kofler ADDISON-WESLEY-Verlag z.B über Amazon.
Viele Dinge können auch mit Hilfe der Makroaufzeichnung erlernt werden.
Gruß Dieter
Yep, gern geschehen
Jenachdem, ob VBA für Access, Excel, Word usw. empfehle ich persönlich Bücher von Michael Kofler ADDISON-WESLEY-Verlag z.B über Amazon.
Viele Dinge können auch mit Hilfe der Makroaufzeichnung erlernt werden.
Gruß Dieter