Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Ausführen einer VBA Anweisung wenn in der Zelle C1 Wahr steht

Frage Microsoft Microsoft Office

Mitglied: wachsi08

wachsi08 (Level 1) - Jetzt verbinden

16.11.2009 um 19:04 Uhr, 20694 Aufrufe, 17 Kommentare

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.

Mit freundlichen Grüßen

Wachsi
Mitglied: TsukiSan
17.11.2009 um 04:03 Uhr
oder schau dir die eingetragenene Kommentare/Links auf dieser Seite mal an.
Wenn du was hast und es immer noch nicht ganz will, dann poste es bitte und wir schauen drüber.

Gruss
Tsuki
Bitte warten ..
Mitglied: 76109
17.11.2009 um 08:06 Uhr
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.
=Wenn(Und(A1=1;B1=1);Wahr();Falsch())
würde dieser Code in das entsprechende Tabellenblatt kopiert Dein Makro automatisiert aufrufen:
01.
Private Sub Worksheet_Change(ByVal Target As Range) 
02.
    If (Target.Address = "$A$1" Or Target.Address = "$B$1") And Range("C1") = True Then Call MakroName 
03.
End Sub
zum testen diesen Code z.B. in Modul 1 einfügen:
01.
Sub MakroName() 
02.
    MsgBox "Test" 
03.
End Sub
Gruß Dieter
Bitte warten ..
Mitglied: wachsi08
17.11.2009 um 09:45 Uhr
Hallo,

ich danke euch für eure Beiträge, ich werde es heute gleich mal ausprobieren danke vorab.

Gruß Wachsi
Bitte warten ..
Mitglied: wachsi08
18.11.2009 um 10:18 Uhr
Hallo Didi,

ich habe deine Anweisung mal augeführt und es funktioniert schon aber man muss den Makro immer noch von Hand starten, er soll von alleine gestartet werden sobald " true" ausgewiesen wird.

Geht das irgendwie

Mit freundlichen Grüßen
Bitte warten ..
Mitglied: 76109
18.11.2009 um 11:39 Uhr
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
Bitte warten ..
Mitglied: wachsi08
18.11.2009 um 14:53 Uhr
Hallo,

ich habe mich nochmal mit deinem Makro beschäftigt das funktioniert wunderbar. Ich habe diesen jetzt genommen und für meine Begriffe weiterverwendet

Private Sub Worksheet_Change(ByVal Target As Range)
If Range("T6") = True Then Call Termin1
End Sub

Nun habe ich eine Zelle in der ich einen Text eintragen habe und in T6 wird das Ergebniss True bezeichnet somit wird mein Makro Termin aufgerufen, (Das klappt alles super, nun würde mich mal Interessieren
wie kann die Prüfung auch für die T7-T25 durchführen) Das bedeute das wenn ich einen Text in die Zelle F8 ein Trage das nur der Wert der Zelle T8 ein Aufruf den Marko verursacht.

Es soll sozusagen per Prüfung Wahr oder Falsch die Zellen F8 für den Aufruf deines Markos veranwortlich sein und wenn ich Später mal die Zelle F12 beschreibe soll nur dies deine Marko aufrufen.

Ich hoffe du verstehst mich

Gruß Peter
Bitte warten ..
Mitglied: 76109
18.11.2009 um 15:44 Uhr
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
Bitte warten ..
Mitglied: wachsi08
19.11.2009 um 07:44 Uhr
Guten Morgen Didi,

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.

Ich hab in meiner Excelliste einen Marko der aus einer Aktiven Zellen zb. F6 eine Email generiert in der der Zelleninhalt der Zelle übertragen wir + die Zelle G6. Nun war mein Problem das ich immer wieder auf einen Button drücken muss um die Daten in das Outlook zu übergeben. Dieses wollte ich um gehen in dem ich in der Zelle T6 eine Wahrheitsprüfung durchführ, also wenn ich zb. in die Zelle F6 und G6 einen Text geschrieben habe soll der Marko automtisch ausgeführt werden, ohne das ich den Button betätigen. Diese aktion soll für die Zeilen 1-25 erfolgen.

SendMakro:

Sub Termin()

'E 2000
'Dim OutApp As Outlook.Application
Dim OutApp As Object, apptOutApp As Object
Dim i As Integer
Dim 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: " & ActiveCell & " Bauvorhaben: " & ActiveCell.Offset(0, 1)
.Send
End With

Set OutApp = Nothing
Set Nachricht = Nothing
Do Until ActiveCell.Value = ""
Set OutApp = CreateObject("Outlook.Application")
Set apptOutApp = OutApp.CreateItem(1) 'olAppointmentItem)
With apptOutApp
'Datum und Uhrzeit aus der Zelle genommen
.Start = Format(ActiveCell.Value, "dd.mm.yyyy") & " 06:00"
'Dauer. Angabe ist jeweils in ganzen Minuten zu setzen
'Betreff steht in der Spalte rechts von den Terminen
.Subject = ActiveCell.Offset(0, 1)
'Zusätzlicher Text
.Body = ""
'ort13-
.Location = ""
.Duration = "5"
'Erinnerung
.ReminderMinutesBeforeStart = 60
'Erinnerung wiederholen
.ReminderSet = True
'Termin speichern
.Save
End With
'Nächste Zelle auswählen
ActiveCell.Offset(1, 0).Select
'Variablen leeren
Set apptOutApp = Nothing
Set OutApp = Nothing
Loop
MsgBox "Termine an Outlook übertragen!"

End Sub


Ich hoffe du kannst meine gedanken nachvollziehen und ich Dank ich schon mal

Gruß Peter
Bitte warten ..
Mitglied: 76109
19.11.2009 um 10:10 Uhr
Hallo Peter!

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.

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?
Bitte warten ..
Mitglied: wachsi08
19.11.2009 um 11:39 Uhr
Hallo,

du hast mich Richtig verstanden, es sollen nur Daten übertragen werden die geändert werden. Sagmal kann ich es aus so machen in dem
ich

Termin1 bis Termin25 schreibe und je nach Termin soll die fest definierten zellen übertragen werden z.B.
01.
Sub Termin6() 
02.
 
03.
'E 2000 
04.
'Dim OutApp As Outlook.Application 
05.
Dim OutApp As Object, apptOutApp As Object 
06.
Dim i As Integer 
07.
Dim Nachricht As Object 
08.
 
09.
 
10.
Set OutApp = CreateObject("Outlook.Application") 
11.
Set Nachricht = OutApp.CreateItem(0) 
12.
With Nachricht 
13.
.to = "xxx@xx.de" 
14.
.Subject = "Erinnerung für Angebot" 
15.
.Body = "Bitte rufen Sie beim Auftraggeber an wie weit der Bearbeitungsstand des Angebotes ist." & "Termin: " & ("F6") & " Bauvorhaben: " & ("G6") 
16.
.Send 
17.
End With 
18.
 
19.
Set OutApp = Nothing 
20.
Set Nachricht = Nothing 
21.
Do Until ActiveCell.Value = "" 
22.
Set OutApp = CreateObject("Outlook.Application") 
23.
Set apptOutApp = OutApp.CreateItem(1) 'olAppointmentItem) 
24.
With apptOutApp 
25.
'Datum und Uhrzeit aus der Zelle genommen 
26.
.Start = Format(ActiveCell.Value, "dd.mm.yyyy") & " 06:00" 
27.
'Dauer. Angabe ist jeweils in ganzen Minuten zu setzen 
28.
'Betreff steht in der Spalte rechts von den Terminen 
29.
.Subject = ActiveCell.Offset(0, 1) 
30.
'Zusätzlicher Text 
31.
.Body = "" 
32.
'ort13- 
33.
.Location = "" 
34.
.Duration = "5" 
35.
'Erinnerung 
36.
.ReminderMinutesBeforeStart = 60 
37.
'Erinnerung wiederholen 
38.
.ReminderSet = True 
39.
'Termin speichern 
40.
.Save 
41.
End With 
42.
'Nächste Zelle auswählen 
43.
ActiveCell.Offset(1, 0).Select 
44.
'Variablen leeren 
45.
Set apptOutApp = Nothing 
46.
Set OutApp = Nothing 
47.
Loop 
48.
MsgBox "Termine an Outlook übertragen!"
Diese Anweisung würde ich jetzt so oft wieder soviel Zeilen ich benötige. Anschliessend ist mein gedanke in der Spalte T soll pro Zeile überprüft werden ob in der Zelle T6 ein Text steht oder nicht wenn je wird True geschrieben, wenn dies dastehe soll der Termin6 aufgerufen werden.

Meine Anweisung sollt in diesen fall heissen:
01.
Sub Uebergabe6 () 
02.
 
03.
If cells ("T6")=True Then call Termin6 
04.
End Sub
Diese übergabe Subs sollen jetzt wieder so oft wie benötigt wieder holt werden.

Kann ich mein Problem auch so lösen oder ist das völliger MIST. Ich hoffe ich nerv dich damit nicht zu sehr aber ich bin Neuling auf dem Gebiet der VBA Programmierung.

Gruß Wachsi

[Edit Biber] Codetags nachgetragen [/Edit]
Bitte warten ..
Mitglied: 76109
19.11.2009 um 12:48 Uhr
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
Bitte warten ..
Mitglied: wachsi08
19.11.2009 um 13:04 Uhr
Hi,

in meiner Zelle steht

=ISTTEXT(G6)
Bitte warten ..
Mitglied: 76109
19.11.2009 um 13:22 Uhr
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
Bitte warten ..
Mitglied: 76109
19.11.2009 um 14:19 Uhr
Hallo Peter!

Hier mal was zum Testen.

Diesen Quelltext im VB-Editor in das entsprechende Tabellenblatt kopieren:
01.
Option Explicit 
02.
 
03.
Const SpalteF = 6       'Spalte F 
04.
Const SpalteG = 7       'Spalte G 
05.
Const ZeilenB = 1       'Zeilen Begin 
06.
Const ZeilenE = 25      'Zeilen Ende 
07.
 
08.
Private Sub Worksheet_Change(ByVal Target As Range) 
09.
    With Target 
10.
        If .Column <> SpalteG Or .Row < ZeilenB Or .Row > ZeilenE Or IsNull(.Text) = True Then Exit Sub 
11.
        If IsDate(Cells(.Row, SpalteF)) = True And Cells(.Row, SpalteG).Text <> "" Then 
12.
            Call TestMakro(Cells(.Row, SpalteF), Cells(.Row, SpalteG)) 
13.
        End If 
14.
    End With 
15.
End Sub
"TestMakro" nach dem testen durch "Termin" ersetzen.

Diesen Quelltext zum testen im VB-Editor in ein Modul kopieren:
01.
Sub TestMakro(ByRef Datum, ByRef Text) 
02.
    MsgBox "Datum: " & Datum & "  Text: " & Text 
03.
End Sub


Deinen Termin-Code im VB-Editor durch diesen Quelltext ersetzen:
01.
Sub Termin(ByRef Datum, ByRef Text) 
02.
     
03.
    'OutApp As Outlook.Application 
04.
    Dim OutApp As Object, apptOutApp As Object, Nachricht As Object 
05.
     
06.
    Set OutApp = CreateObject("Outlook.Application") 
07.
    Set Nachricht = OutApp.CreateItem(0) 
08.
     
09.
    With Nachricht 
10.
        .to = "xxx@xx.de" 
11.
        .Subject = "Erinnerung für Angebot" 
12.
        .Body = "Bitte rufen Sie beim Auftraggeber an wie weit der Bearbeitungsstand des Angebotes ist." & "Termin: " & Datum & " Bauvorhaben: " & Text 
13.
        .Send 
14.
    End With 
15.
     
16.
    Set OutApp = Nothing 
17.
    Set Nachricht = Nothing 
18.
    Set OutApp = CreateObject("Outlook.Application") 
19.
    Set apptOutApp = OutApp.CreateItem(1) 'olAppointmentItem 
20.
     
21.
    With apptOutApp 
22.
        'Datum aus Spalte F 
23.
        .Start = Format(Datum, "dd.mm.yyyy") & " 06:00" 
24.
        'Dauer. Angabe ist jeweils in ganzen Minuten zu setzen 
25.
        'Betreff aus Spalte G 
26.
        .Subject = Text 
27.
        'Zusätzlicher Text 
28.
        .Body = "" 
29.
        'ort13- 
30.
        .Location = "" 
31.
        .Duration = "5" 
32.
        'Erinnerung 
33.
        .ReminderMinutesBeforeStart = 60 
34.
        'Erinnerung wiederholen 
35.
        .ReminderSet = True 
36.
        'Termin speichern 
37.
        .Save 
38.
    End With 
39.
     
40.
    Set apptOutApp = Nothing 
41.
    Set OutApp = Nothing 
42.
     
43.
    MsgBox "Termin an Outlook übertragen!" 
44.
End Sub
Gruß Dieter
Bitte warten ..
Mitglied: wachsi08
19.11.2009 um 14:53 Uhr
Hi Dieter,

Super Sachen ich Dank Dir wie verrückt.

Kannst du mir ein gutes VBA Buch empfehlen.

Gruß

Peter
Bitte warten ..
Mitglied: 76109
19.11.2009 um 15:16 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Microsoft Office
gelöst Excel VBA Letzte Zelle Suchen dann rechnen und Wert in Zelle Übertragen (3)

Frage von Addi089 zum Thema Microsoft Office ...

VB for Applications
Powershell Script aus VBA heraus ausführen (2)

Frage von mcnico1978 zum Thema VB for Applications ...

Visual Studio
Net - Autostart erst ausführen wenn Netzwerkverbindung steht (6)

Frage von Rene1976 zum Thema Visual Studio ...

VB for Applications
gelöst VBA-Makro verschwindet nach Speichern (5)

Frage von lupi1989 zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...

Exchange Server
DNS Einstellung - zwei feste IPs für Mailserver (15)

Frage von ivan0s zum Thema Exchange Server ...