Hallo,
ich möchte aus meiner Accesstabelle heraus per Befehlsschaltfläche (Button) einen Kunden anrufen. Wenn ich das normalerweise mache, markiere ich die Nummer und drücke die Taste F8. Diese Taste ist bei Procall(stos) so belegt, dass sie automatisch wählt. Wenn ich Outlook nicht offen habe, wird auch nicht gewählt.
Ich kann bisher nur die Nummer markieren
Private Sub Befehl111_Click()
DoCmd.GoToControl "Telefon"
End Sub
Wenn ich dann die Tastenkombi F8 haben möchte hört mein Wissen auf. Ich habe es mit
Private Sub Befehl113_Click()
DoCmd.GoToControl "Telefon"
SendKeys "{F8}", False
End Sub
Probiert, ohne Ergebnis. Muss ich erst einen Befehl an Outlook senden, damit Procall angesprochen wird?
Kann mir jemand weiter helfen?
Danke im Voraus von jemanden, der überhaupt keine Ahnung hat
Hallo,
m.E. muss beim Senden von Tastenbefehlen an eine andere Applikation diese aktiviert sein, sonst sendest du an Access.
also z.B. AppActivate "Microsoft Outlook"
Da du ja offenbar die Informationen aus dem Steuerelement 'Telefon' benötigst (nehme an es ist die Telefonnummer),
wirst du diese ebenfalls an Outlook senden müssen
Also KÖNNTEST du folgendes mal ausprobieren:
Private Sub Befehl113_Click()
Dim nummer as String
nummer = Me!Telefon
AppActivate "Microsoft Outlook"
SendKeys nummer & "{F8}", False
End Sub
Vielleicht klappts - ist UNGETESTET und rein intuitiv in den Wind gereimt
Grüße
Peter
Leider klappt es nicht, ich bekomme:
Laufzeitfehler`5`, ungültiger Prozeduraufruf oder ungültiges Argument (debugger : AppActivate "Microsoft outlook")
Hallo,
um Outlook zu aktivieren muss es erstens gestartet sein und dann muss ein er der Standardordner angesprochen werden.
Versuche daher nochmals mit der Änderung:
Private Sub Befehl113_Click()
Dim nummer as String
nummer = Me!Telefon
AppActivate "Posteingang - Microsoft Outlook"
SendKeys nummer & "{F8}", False
End Sub
Möglicherweise hast du zum Wählen auch einen anderen Outlook-Container offen, dann trage diesen bitte ein wo jetzt 'Posteingang' steht.
Nein, funktioniert leider auch nicht...gleiche Fehlermeldung :(
Hallo,
wir reden aber schon von Outlook und nicht von Outlook-Express.
Bei der 2. Variante die gleiche Fehlermeldung hmmm...
Hab' das jetzt selbst noch mal nachgestellt und siehe da - ebenfalls Fehler - MIST!
Nachdem ich Outlook beendet hatte und den Code ein 2. Mal durchlaufen ließ - kein Fehler - allerdings habe ich den Code mit F8 abgearbeitet, also hatte Outlook auch genug Zeit um vollständig zu starten.
Das Gleiche hatte ich unbewußt auch so probiert, als ich das Posting geschrieben habe, daher hat's damals auch fehlerfrei funktioniert
Mit kommt die ganze Geschichte ein wenig suspekt vor ... sorry, da kann ich dir nicht recht viel mehr weiterhelfen. :-\
Greets
Ich glaube das Outlook ständig die Ttelleiste ändert muß du die AppActivate-Funktion mit der ProzessID aufrufen statt dem Titelleistenstring.
Private Function GetOLPID() As Long
Dim WMI, Prozesse, Prozess
Dim i As Long
Set WMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set Prozesse = WMI.ExecQuery("Select NAME, ProcessId from Win32_Process", , 48)
For Each Prozess In Prozesse
If Prozess.Name = "OUTLOOK.EXE" Then
GetOLPID = Prozess.ProcessID
Set Prozess = Nothing: Set Prozesse = Nothing: Set WMI = Nothing
Exit Function
End If
Next
Set Prozess = Nothing: Set Prozesse = Nothing: Set WMI = Nothing
End Function
jetzt noch der angepasste Code von database
Private Sub Befehl113_Click()
Dim nummer as String
Dim PID as long
nummer = Me!Telefon
Pid = GetOLPID()
if Pid <> 0 then
AppActivate PID
SendKeys nummer & "{F8}", False
end if
End Sub
Somit sollte hoffentlich nicht mehr die FM auftauchen.
Hallo,
ja, das klingt plausibel!
Die ProzessID über WMI zu holen hatte ich auch schon überlegt aber dann irgendwie wieder verworfen.
Wahrscheinlich aus Frust oder so ... ;D
So, habs mal ausprobiert - das rennt! (bis zum SenKey ohne Fehler - Procall hab' ich nicht daher kann ich das nicht prüfen)
Man könnte es jetzt noch weiter spinnen und für den Fall dass PID = 0 ist, Outlook automatisch starten ...
Naja, dann sind wir aber schon verdammt weit weg von Access-Problemen, das hat nix mehr mit Datenbanken zu tun. ;D ;)
Greets
ZitatDie ProzessID über WMI zu holen hatte ich auch schon überlegt aber dann irgendwie wieder verworfen.
Wahrscheinlich aus Frust oder so ...
Kenn ich. Aba du weist ja, proggen ohne gezetter, gefluche und gekreische ist irgendwie langweilig! ;D
ZitatMan könnte es jetzt noch weiter spinnen und für den Fall dass PID = 0 ist, Outlook automatisch starten ...
Hatte ich ursprünglich auch mit reingenommen, nur ich hab den Satz
Wenn ich Outlook nicht offen habe, wird auch nicht gewählt. von Nabimba so verstanden das dies auch so gewollt ist und Outlook nicht gestartet werden soll.
Zitatproggen ohne gezetter, gefluche und gekreische ist irgendwie langweilig
ja ja und vor allem für Nichtraucher - früher hätt' ich ein paar Glimmstengel 'gefressen' und gut wär's ... 8)
ZitatOutlook nicht gestartet werden soll
... da kannst du eigentlich Recht haben...
Mal sehen, vielleicht besucht uns Nabimba noch mal und probiert deine Variante aus... bin gespannt
Grüße
Peter
EDIT: Benutzernamen ausgebessert
Klar besuche ich Euch noch mal...ich bin ja begeistert, dass es Leute gibt, die sich mit sowas auskennen und anderen weiter helfen...Danke dafür :)
...ich habe dafür überhaupt keine Ahnung mehr was ich hier mache und übertrage alles fein säuberlich...aber selbst damit tue ich mich als Person, die nix mit Programmieren am Hut hat, sehr schwer...was in welcher Folge usw.
Ich habe es eingegeben und bekomme jetzt den Hinweis, dass mir der Bezug fehlt (mehrdeutiger Name;get OLPID)...das hängt doch bestimmt meine Telefonnummer zusammen, oder? ist die mit den ganzen Sachen jetzt auch markiert wurden?
Ich sehe gerade, wenn ich jetzt den Button drücke, mit dem ich die Nummer markert habe, kommt die gleiche Fehlermeldung.
Ach ja, ich habe Outlook die ganze Zeit auf
Hallo,
Zitatmehrdeutiger Name;get OLPID
deutet darauf hin, dass im Ablauf deines Codes der Eintrag
get OLPID mehrdeutig interpretiert werden kann - bitte kontrolliere die Schreibweisen des
GESAMTEN Codes auf Fehler get OLPID ist OHNE Leerzeichen!
Am Besten ist es IMMER, mittels
'In Zwischenablage kopieren' einen geposteten Codeausschnitt zu kopieren und per 'Einfügen' in den VBA-Editor an die richtige Stelle zu verfrachten.
Die meisten Probleme entstehen durch Tippfehler - mal ein Leerzeichen zu viel, manchmal auch eine Zeile doppelt, etc.
Wie gesagt und bereits von mir gepostet - der Code läuft bei mir fehlerfrei durch - was ich nicht testen konnte ist natürlich die Auswirkung auf Procall - mangels Vorhandensein.
Aber der Code lief bis SendKeys fehlerfrei durch - auch Outlook wurde brav aktiviert.
Peter
Okay, kapiert...ich hatte es nicht in die Zwischenablage kopiert, sondern direkt rein und mußte dadurch die Zeilen verschieben, aber ich habe es kopiert und nicht getippt... und ein Problem für mich ist es schon die richtige Stelle zu finden...sorry für so viel Unwissenheit.
Ich habe es jetzt nochmal rein kopiert und bekomme die gleiche Meldung.
(Ach ja, gibt es eine Möglichkeit die Befehle nachträglich umzubenennen damit man sie leichter zuordnen kann?)
Private Function GetOLPID() As Long
Dim WMI, Prozesse, Prozess
Dim i As Long
Set WMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set Prozesse = WMI.ExecQuery("Select NAME, ProcessId from Win32_Process", , 48)
For Each Prozess In Prozesse
If Prozess.Name = "OUTLOOK.EXE" Then
GetOLPID = Prozess.ProcessID
Set Prozess = Nothing: Set Prozesse = Nothing: Set WMI = Nothing
Exit Function
End If
Next
Set Prozess = Nothing: Set Prozesse = Nothing: Set WMI = Nothing
End Function
Private Sub Befehl113_Click()
Dim nummer as String
Dim PID as long
nummer = Me!Telefon
Pid = GetOLPID()
if Pid <> 0 then
AppActivate PID
SendKeys nummer & "{F8}", False
end if
End Sub
Hallo,
ich glaube nicht, dass Du den Code mit Copy&Paste aus Deinem VBA-Editor hierein kopiert hast... ::) :o
;D
der steht so in #6
Zitatgibt es eine Möglichkeit die Befehle nachträglich umzubenennen
klar gibt es die - wenn du genau weißt was du tust .. sonst knallts bei der Ausführung möglicherweise enorm.
Wenn du z.B. getOLPID ansprichst ---
Dieser Name steht für GET OUTLOOK PROCESS ID
Den Namen hat lumbumba (ihr machts mich fertig mit eure Namen) so für seine Function gewählt, welche die Prozess-ID von Outlook ermitteln soll.
Wenn du diesen Namen ändern willst - z.B. auf 'BringeIDVonOutlook' muss in deinem Code dann sinngemäß stehen
...
nummer = Me!Telefon
PID = BringeIDVonOutlook()
If PID <> 0 Then
...
und die Function die das leistet muss genauso heißen also
Private Function BringeIDVonOutlook() As Long
.....
....
...
..
.
Zum anderen Thema mit der Fehlermeldung ... schau mal im VBA-Editor unter Extras Verweise nach ob da vielleicht ein Verweis als 'NICHT VORHANDEN' markiert ist.
Zitat...dass mir der Bezug fehlt ...
gibts dazu eine Fehlermeldung mit Fehlernummer? Wenn nicht, dann KOPIER mal den untenstehenden Code und lese die Fehlermeldung aus:
Private Sub Befehl113_Click()
Dim nummer as String
Dim PID as long
On Error GoTo errhandle
nummer = Me!Telefon
PID = GetOLPID()
If PID <> 0 Then
AppActivate PID
SendKeys nummer & "{F8}", False
End If
Exit Sub
errhandle:
MsgBox "Fehlernummer: " & Err.Number & vbCrLf & _
"Fehler: " & Err.Description
End Sub
was soll ich sagen?
ich dachte, vielleicht habe ich irgendwas verändert und finde es nicht.
Dann bleibt es wohl ungelöst für mich.
Trotzdem danke
Nö,
wenn du die Codes so in deinem Formular stehen hast wie sie unten dargestellt sind, passt das schon.
Interessant wäre jedenfalls der Fehlergrund / Beschreibung, die erzeugt wird, wenn du auf den Button klickst, daher auch die kurze, sehr brutale Fehlerbehandlung , die ich dir reingestellt habe.
bzw. ob in den Verweisen was nicht mitkommt - und was auch interessant wäre - in welcher Routine der Fehler erzeugt wird.
Daher auch hier noch eine kleine Änderung:
Wir werden uns der Lösung schon nähern ... ;)
Private Function GetOLPID() As Long
On Error GoTo errhandle
Dim WMI, Prozesse, Prozess
Dim i As Long
Set WMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set Prozesse = WMI.ExecQuery("Select NAME, ProcessId from Win32_Process", , 48)
For Each Prozess In Prozesse
If Prozess.Name = "OUTLOOK.EXE" Then
GetOLPID = Prozess.ProcessID
Set Prozess = Nothing: Set Prozesse = Nothing: Set WMI = Nothing
Exit Function
End If
Next
Set Prozess = Nothing: Set Prozesse = Nothing: Set WMI = Nothing
Exit Function
errhandle:
MsgBox "Fehlernummer (Function): " & Err.Number & vbCrLf & _
"Fehler (Function): " & Err.Description
End Function
oh, die Antworten wurden gleichzeitig geschrieben....und ich dachte, ihr gebt auf mit mir ;)
Ich komme leider erst wieder am Freitag dazu es zu testen. Ich melde mich dann wieder.
Ob ich die Befehle umbenenne überlege ich mir lieber noch mal.
@ DF6GL
ich habe meine umgearbeitete Version kopiert, in der Hoffnung, dass ich etwas fälschlichwerweise gelöscht habe...aber wenn es genau der anderen Version gleicht, freut es mich ja!!! ;)
Hmmm...
Zitatich habe meine umgearbeitete Version kopiert, in der Hoffnung, dass ich etwas fälschlichwerweise gelöscht habe
...möglicher weise ist dir aber gerade dabei waspassiert, der Code, so wie du ihn hier hereinkopiert hast, wurde NOCH NIE ausgeführt!
Das ist an der Schreibweise zu erkennen, beim Kompilieren wären nämlich die klein geschriebenen Schlüsselworte, Variablen und Objektnamen umgewandelt worden - if in If Pid in PID usw.
Aber OK, lass dir ruhig Zeit und melde dich wieder wenn es für dich passt.
LG
Peter
Hallo,
Moin,
das mit dem "noch nie ausgeführt kommt vielleicht daher, dass ich den Code immer nochmal in Word sichere, damit ich mir ein "Handbuch" machen kann und es noch habe, falls beim Schreiben etwas verloren geht. Den Code in Access hatte ich ja wieder gelöscht, weil die Fehlermeldung die gesamte Tabelle blockiert hatte.
Aber was viel schlimmer ist, ich habe komplett den Faden verloren und verstehe gar nichts mehr...nachdem unsere Admins gestern irgendwas erneuert?, upgedatet ? oder so haben, ist mein Rechner mit einigen Macken erst beim zweiten mal in Schwung gekommen.
Und nachdem ich die Sachen wieder in den Codegenerator kopiert habe und im VBA-Editor unter Extras Verweise nach "nicht vorhanden" gesucht habe (es sind bei mir nur 2 markiert-Visual Basic for Appl. und Microsoft Access 1.0 object library...falls das der richtige Ort war?) habe ich keine Fehlermeldung mehr bekommen, sondern mein Outlook, welches offen war ist plötzlich zu sehen. Wenn outlook zu ist, bekomme ich einen Laufzeitfehler 5.
Ich habe ehrlich gesagt keine Ahnung mehr, wo und wann ich was anders gemacht habe und wo ich suchen muss. Dadurch wird es wohl nix mit der Lösung...ich schwenke die weiße Fahne.
Hallo,
nana, mal langsam - aufgegeben wird ein Brief ...
Zitatweil die Fehlermeldung die gesamte Tabelle blockiert hatte
Fehlermeldungen blockieren nichts sondern weisen darauf hin, das etwas nicht stimmt. Die Ausführung von Code,
der den Fehler verursacht hat wird dabei unterbrochen, deshalb bleibt dann scheinbar alles stecken.
So, nun haben deine Admins was erneuert, geupdated oder sonst was -
Was meinen die Jungs zu deinem Problem - sie müssten ja das System in- und auswendig kennen?
Aber egal, wie auch immer.
Die Anwendung, die Access-Datenbank, mit der wir herumexperimentiert haben - hast DU diese selbst erstellt?
Hast du vor Beginn der Änderungen eine Kopie angelegt oder hast du an der Originaldatei herumgewerkelt?
Ist das eine reine Access 2003-Datei?
Ähmmmm...
ZitatUnd nachdem ich die Sachen wieder in den Codegenerator kopiert habe
...erklärst du mir bitte in kurzen verständlichen Worten
was das ist oder du meinst - ein Codegenerator bei Access? ??? ???
ZitatVisual Basic for Appl. und Microsoft Access 1.0 object library
Der Ort deiner Recherche war der richtige.
Bei Access 2003 sind standardmässig Visual Basic for Applications, Microsoft Access 11.0 Object Library und OLE Automation angehakt.
Ich habe nun die MusterLösung, mirt der ich den Code getestet habe in eine virtuelle Maschine mit XP als Betriebssystem und einer Office 2003 Installation kopiert und durchprobiert.
Die läuft - ohne Fehler bis zu Übergabe der Nummer per F8 - wobei ich diese Funktionalität - wie schon beschreiben - nicht richtig testen kann, weil ich ja Procall nicht habe.
Ich glaube, dass durch die ganze kopiererei bei dir am System etwas verkorkst ist.
Hast du eine Kopie der DB gemacht bevor du damit begonnen hast was zu ändern dann hole dir diese Originaldatei wieder zurück und lege nochmal ein KOPIE davon an.
Das Experimentier-Exemplar kannst du dann wider löschen.
Wenn du wieder auf Ausgangsstatus bist melde dich hier nochmal, ich werde dann Schritt für Schritt mit dir die Änderungen durchführen.
Grüße
Peter
Hallo zusammen,
ich weiß das der Beitrag schon älter ist. ;D
ich habe mir auch eine Datenbank erstellt und bin beim Suchen nach einer Einbindung von Procall auf euch gestoßen. Ich habe mir den Code entsprechend kopiert und auf meine Bedürfnise angepasst.
Ich habe allerdings nun das folgende Phänomen. Wenn ich die Telefonnummer markiere und dann auf den Button klicken, dann sehe ich kurz wie die Nummern-LED auf der Tastatur aus und wieder angeht. Outlook ist geöffnet und auch als Fenster zu sehen. Liegt nur noch der Browser im Vordergrund. Mit dem drücken des Buttons wird entsprechend Outlook in den Vordergrund gelegt. Aber die Nummer die ich markiert habe, wird nicht gewählt. Ich benutze 2 Monitore wobei die DB auf dem linken und Outlook auf dem Rechten Monitor sind. Als Betriebssystem läuft XP Pro mit SP3 und Office Pro 2003.
Ich hoffe ihr könnt mir weiterhelfen.
Gruß Tobias
Anbei noch der Code aus dem VB Script.
Private Function GetOLPID() As Long
On Error GoTo errhandle
Dim WMI, Prozesse, Prozess
Dim i As Long
Set WMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set Prozesse = WMI.ExecQuery("Select NAME, ProcessId from Win32_Process", , 48)
For Each Prozess In Prozesse
If Prozess.Name = "OUTLOOK.EXE" Then
GetOLPID = Prozess.ProcessID
Exit Function
End If
Next
Set Prozess = Nothing: Set Prozesse = Nothing: Set WMI = Nothing
Exit Function
errhandle:
MsgBox "Fehlernummer (Function): " & Err.Number & vbCrLf & _
"Fehler (Function): " & Err.Description
End Function
Private Sub Befehl35_Click()
Dim nummer As String
Dim PID As Long
nummer = TelefonBeruflich
PID = GetOLPID()
If PID <> 0 Then
AppActivate PID
SendKeys nummer & "{F8}", True
End If
End Sub
Hallo,
wie schon in den Beiträgen oben erwähnt habe ich KEINE Möglichkeit die Funktionalität des Codes an ProCall zu testen,
Da ich das Ding nicht kenne und auch nicht besitze!
Aber:
setze mal einen Haltepunkt auf
Private Sub Befehl35_Click()
und führe diese Prozedur bis zu
AppActivate PID
mal mit F8 schrittweise aus.
Ist in der Variable 'nummer' was enthalten?
Wenn ja, dann klappt die Übergabe an ProCall bzw. Outlook nicht richtig.
Tja und genau da kann ich dann leider nicht mehr weiter helfen - ich hab, wie schon erwähnt - das Zeug nicht zur Verfügung!
Zitat von: database am April 05, 2011, 19:54:06
Hallo,
wie schon in den Beiträgen oben erwähnt habe ich KEINE Möglichkeit die Funktionalität des Codes an ProCall zu testen,
Da ich das Ding nicht kenne und auch nicht besitze!
Aber:
setze mal einen Haltepunkt auf
Private Sub Befehl35_Click()
und führe diese Prozedur bis zu
AppActivate PID
mal mit F8 schrittweise aus.
Ist in der Variable 'nummer' was enthalten?
Wenn ja, dann klappt die Übergabe an ProCall bzw. Outlook nicht richtig.
Tja und genau da kann ich dann leider nicht mehr weiter helfen - ich hab, wie schon erwähnt - das Zeug nicht zur Verfügung!
Wenn ich das richtig verstehe, dann muss ich der Variable Nummer den Feldnamen bzw. Steuerelementnamen angeben, in der meine Telefonnummer steht, die ich wählen möchte? Wenn das der Fall ist, dann lautet der Name TelefonBeruflich
Ich habe mal den Haltepunkt gesetzt, und den Code Schritt für Schritt durchlaufen lassen.
Sobald der Code auf den Abschnitt
AppActivate PID läuft, springt der Code in die Funktion zur Ermittlung der PID von Outlook. Soweit habe ich das ganze verstanden. Sobald der Code dann an die folgende Stelle gelangt,
If Prozess.Name = "OUTLOOK.EXE" Then
GetOLPID = Prozess.ProcessID
Set Prozess = Nothing: Set Prozesse = Nothing: Set WMI = Nothing
Exit Function
End If
Next
und dann auf das Next läuft, springt er wieder zurück auf zum Anfang auf
If Prozess.Name = "OUTLOOK.EXE" ThenWas das ProCall angeht, kann man als Testversion installieren ;)
Ich hoffe ich habe jetzt einen nicht allzu sehr alten Beitrag aus der Versenkung geholt und ihr könnt mir trotzdem weiterhelfen.
@Database du sagst ja selbst der Code bis zu dem Schritt wo die übergabe an Procall passieren soll funktionieren müsste, nur das du auf Grund fehlendes ProCall es nicht weiter testen kannst.
Gruß Beginner666
Hallo,
willst Du wirklich über Outlook die Telefonnummer übermitteln? bzw. ich denke, das ist de rfalsche Ansatz. Ermittele besser die PID von Procall und übergibt dort die Nummer:
Public Function GetOLPID0(Nummer As String) As Long
Dim WMI, Prozesse, Prozess, GetOLPID1 As Long
Dim i As Long
Set WMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set Prozesse = WMI.ExecQuery("Select NAME, ProcessId from Win32_Process", , 48)
For Each Prozess In Prozesse
If Prozess.Name = "ECtiClientOne.EXE" Then
GetOLPID1 = Prozess.ProcessID
AppActivate GetOLPID1
Debug.Print Prozess.Name, Prozess.ProcessID
SendKeys "{F6}" & Nummer & "{F4}", True
Set Prozess = Nothing: Set Prozesse = Nothing: Set WMI = Nothing
Exit Function
End If
Next
Set Prozess = Nothing: Set Prozesse = Nothing: Set WMI = Nothing
End Function
Ich denke das leuchtet ein das man das über die PID von ProCall macht.
Ich verstehe nur nicht warum du den SendKey Befehl oben eingebaut hast, dort ist doch kein Click Befehl eingetragen, oder verstehe ich das jetzt falsch?
Ich habe mein Code mal angepasst. Allerdings bekomme ich eine Fehlermeldung. Sub oder Function nicht definiert. Und zwar kommt die Fehlermeldung an der Stelle PID = PID = GetOLPID(). Ich denke mal das dort noch eine Zahl fehlt, da du ja in deinem Code mit GetOLPID 1 und 0 arbeitest. Ich habe dort beide Varianten eingebunden leider ohne Erfolg.
Der aktulle Code
Public Function GetOLPID0(nummer As String) As Long
Dim WMI, Prozesse, Prozess, GetOLPID1 As Long
Dim i As Long
Set WMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set Prozesse = WMI.ExecQuery("Select NAME, ProcessId from Win32_Process", , 48)
For Each Prozess In Prozesse
If Prozess.Name = "ECtiClientOne.EXE" Then
GetOLPID1 = Prozess.ProcessID
AppActivate GetOLPID1
Debug.Print Prozess.Name, Prozess.ProcessID
Set Prozess = Nothing: Set Prozesse = Nothing: Set WMI = Nothing
Exit Function
End If
Next
Set Prozess = Nothing: Set Prozesse = Nothing: Set WMI = Nothing
End Function
Private Sub Befehl35_Click()
Dim nummer As String
Dim PID As Long
nummer = TelefonBeruflich
PID = GetOLPID()
If PID <> 0 Then
AppActivate PID
SendKeys "{F8}" & nummer, True
End If
End Sub
Gruß Beginner666
Hallo,
da hat alles nichts weiter zu sagen, habe nur auf die "Auslagerung" von Sendkeys verzichtet...
Ruf die Funktion (die am Besten noch umbenannt werden sollte, weil sie nichts mit OL zu tun hat) einfach so auf:
Sub btnTelefonieren_Click()
GetOLPID0 "0999123654"
End Sub
Trotzdem ist sowas nicht stabil. Vermutlich geht das Ganze ins Leere, wenn das ProCall-Fenster nicht geöffnet ist.
ZitatVermutlich geht das Ganze ins Leere, wenn das ProCall-Fenster nicht geöffnet ist.
War ja vom ursprünglichen Threadstarter auch so gewollt, wenn kein Outlook läuft dann mach nix.
Hab den Code mal geändert, so das ne Meldung kommt wenn die Tel-Soft nicht läuft.
Public Function Ich_Ruf_Dich_An(nummer As String) As Long
Dim WMI, Prozess, Prozesse
Dim SQL As String
SQL = "Select ProcessId from Win32_Process WHERE Name like 'ECtiClientOne.EXE'" 'ECtiClientOne.EXE
Set WMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set Prozesse = WMI.ExecQuery(SQL)
If Prozesse.Count = 0 Then
MsgBox "Telefonsoftware 'ECtiClientOne' läuft nicht"
GoTo Sub_ExitClean
Else
For Each Prozess In Prozesse
AppActivate Prozess.ProcessID
SendKeys "{F6}" & nummer & "{F4}", True
Exit For
Next
End If
Sub_ExitClean:
Set Prozess = Nothing: Set Prozesse = Nothing: Set WMI = Nothing
End FunctionUnd nun lautet der Aufruf in der Befehl35_Click Routine:
Private Sub Befehl35_Click()
Dim nummer As String
nummer = TelefonBeruflich
Ich_Ruf_Dich_An nummer
end Sub
Ob der von DF6GL gepostete SendKey-befehl funktioniert kann ich nicht sagen da ich ebenfalls die Software nicht habe.
Hallo,
@daolix:
Bist Du sicher, dass der geänderte Code das tut, was er lt. Deiner Aussage sollte?
Hallo,
@Beginner666
Zitatkann man als Testversion installieren
werde ich tunlichst vermeiden - was meinst du wie mein Rechner nach einiger Zeit aussehen würde ... ? :o
Hallo DF6GL
eigentlich schon, in ermangelung der nicht vorhandenen Telefonsoftware ( und werd ich auch nicht installieren ) hab ich den Code mit Firefox und einem gesendeten {F5} getestet. Läuft FF wird die momentane Aktive Seite aktualisiert, wenn nicht kommt die Meldung.
Hallo,
Wenn du nach genau EINEM bestimmten Prozess suchst ("Select ProcessId from Win32_Process WHERE Name like 'ECtiClientOne.EXE'")
ist das aber eigentlich unnötig oder?
For Each Prozess In Prozesse
AppActivate Prozess.ProcessID
SendKeys "{F6}" & nummer & "{F4}", True
Exit For
Next
wenn mich nicht alles beißt, sollten dann diese beiden Zeilen genügen:
AppActivate Prozess.ProcessID
SendKeys "{F6}" & nummer & "{F4}", True
Hallo
im Normalfall ja, ein Set Prozess = Prozesse.Item(0) und die beiden anderen Zeilen und das wäre es dann. Nur ist die Prozesse-Collection ein wenig anders gestrickt, da führt das Set Prozess =.. zu einem Fehler und den statt 0 dafür notwendigen StrObjectPath kenn ich erstmal nicht. Von daher verwende ich For Each als Ersatz um das Prozess-Object zu erhalten. Die ForEach-Schleife wird ja nur einmal durchlaufen ( weil exit for am Ende ).
Hallo zusammen,
ich glaube so langsam ist Licht am Ende des Tunnels zu sehen.
Ich habe den neuen Code von daolix verwendet und angepasst. Da die ProCall Exe bei mir ECtiClient.exe heißt sieht der Code nun so aus. Das Keybinding ist denke ich auch mit ProCall verknüpft deshalb habe ich diese auch angepasst. Inzwischen ist es auch möglich das die Nummer in ProCall übergeben wird, allerdings nur wenn ich einen Doppelklick auf den Button machen, bei einem einfachen Klick, geht der Nummblock auf der Tastatur aus und wieder an. Wenn die Nummer übergeben wurde, dann wird sie allerdings nicht gewählt, sondern ich muss dann im ProCall noch mal die Entertaste drücken.
Public Function Ich_Ruf_Dich_An(nummer As String) As Long
Dim WMI, Prozess, Prozesse
Dim SQL As String
SQL = "Select ProcessId from Win32_Process WHERE Name like 'ECtiClient.EXE'" 'ECtiClient.EXE
Set WMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set Prozesse = WMI.ExecQuery(SQL)
If Prozesse.Count = 0 Then
MsgBox "Telefonsoftware 'ECtiClient' läuft nicht"
GoTo Sub_ExitClean
Else
For Each Prozess In Prozesse
AppActivate Prozess.ProcessID
SendKeys "{F8}" & nummer & "{F4}", True
Exit For
Next
End If
Sub_ExitClean:
Set Prozess = Nothing: Set Prozesse = Nothing: Set WMI = Nothing
End Function
Private Sub Befehl38_Click()
Dim nummer As String
nummer = TelefonBeruflich
Ich_Ruf_Dich_An nummer
End Sub
Gruß Beginner666