SMS per VBA (Access) verschicken

Antworten
Leosn
Beiträge: 6
Registriert: Fr 7. Dez 2018, 10:23

SMS per VBA (Access) verschicken

Beitrag von Leosn »

Hallo an alle,

ich habe ein Problem mit dem Text beim Verschicken von SMS durch VBA Shell in Access.

Ich richtete mich nach diesem Post
https://www.fjsoft.at/forum/viewtopic.p ... hlight=vba

Soweit so gut alles hat geklappt, ausser dass nur die erste Zeile abgeschickt wird.

Mein Code in VBA ist

Code: Alles auswählen

Private Sub SendSMS1_Click()

Dim SMS_Tel_1 As String
Dim SMS_Text_1 As String

SMS_Tel_1 = Me!SMS_Tel_1
SMS_Text_1 = Me!resulttext


Shell "C:\Program Files (x86)\MyPhoneExplorer\MyPhoneExplorer.exe action=sendmessage savetosent=1 number=" & SMS_Tel_1 & " text=" & Chr$(34) & SMS_Text_1 & Chr$(34)
End Sub
also wenn im Textfeld ein mehrzeiliger Text steht, wird nur die erste Zeile abgeschickt.

Beispiel:

Sehr geehrte Frau Muster,

nach dem tel. Gespräch schicke ich ihnen... usw.

mit freundlichen Grüßen


was der Empfänger tatsächlich bekommt ist:

Sehr geehrte Frau Muster,

weiter nichts.

Hat jemand einen Tipp oder kennt jemand die Lösung?

Eine SMS als one-row-text ist nicht gerade schön :-/

Edit: Es sieht so aus als würde MyPhoneExplorer nicht richtig mit dem Zeilenumbruch in einem Textfeld durch VBA Shell zurechtkommen.
Wenn ich nämlich ... & "Text" & Chr$(13) & "Text... einsetze, dann geht es wunderbar.

Das ist aber immer noch nicht die richtige Lösung
wtuppa
Beiträge: 71
Registriert: Di 19. Jan 2016, 20:14
Wohnort: Wien

Beitrag von wtuppa »

es könnte auch gut sein, dass MPE gar nicht die volle SMS bekommt, da VBS die SMS nicht richtig übergibt (wegen Newline), da ist $CHR(13) etwas anderes.

nimm doch mal statt MPE einfach ein Shell Script, dass dir alle Parameter ausgibt (und die Anzahl). Vielleicht siehst du dann genauer was passiert.
Phone: Xiaomi A1 (Android 9.0)
Phone: Samsung A51 (Android 10.0)
Windows 10/64bit, MPE / Client aktuelle
Leosn
Beiträge: 6
Registriert: Fr 7. Dez 2018, 10:23

Beitrag von Leosn »

Hab etwas versucht aber leider ohne Erfolg. Ich habe dafür leider noch keine Lösung gefunden die Shell mit VBA Parameterweise auszugeben.

Das einzige was mir eingefallen ist, mehrere Textfelder in Access als einzelne Zeilen zu erstellen und diese auch so zu nutzen.

Statt also in einem Textfeld alles zu haben, ist jetzt in mehreren Feldern die Nachricht zerteilt um diese in einer Shell mit richtigem Zeilenumruchsbefehl zusammenzuführen. Irre.
icke1954
Moderator
Beiträge: 18172
Registriert: Sa 19. Apr 2014, 10:35

Beitrag von icke1954 »

So sollte es funktionieren:

Code: Alles auswählen

Private Sub SendSMS1_Click()

  Dim SMS_Tel_1 As String, SMS_Text_1 As String
  Dim arr() As String

  SMS_Tel_1 = Me!SMS_Tel_1
  arr = Split(Me!resulttext.Text, vbLf)
  
  For i = 0 To UBound(arr)
    SMS_Text_1 = SMS_Text_1 & arr(i)
  Next
  
  Shell "C:\Program Files (x86)\MyPhoneExplorer\MyPhoneExplorer.exe action=sendmessage savetosent=1 number=" & _
  SMS_Tel_1 & " text=" & Chr$(34) & SMS_Text_1 & Chr$(34)
  
End Sub
Leosn
Beiträge: 6
Registriert: Fr 7. Dez 2018, 10:23

Beitrag von Leosn »

Hallo Icke,

danke für dein Tip, so funktioniert es leider nicht aber die Idee war hervorragend.

Mit deinem Code geht es schon aber als one-row-text und statt
arr = Split(Me!resulttext.Text, vbLf)
muss man arr = Split(Me!resulttext, vbLf) schreiben.

Wer es aber mit Zeilenumbruch haben möchte (ja es geht doch :D ) nutzt diesen Code:

Code: Alles auswählen

Private Sub SendSMS1_Click()

Dim linktoMPE As String
Dim SMS_Tel_1 As String
Dim SMS_Text_1 As String
Dim arr() As String

linktoMPE = "C:\Program Files (x86)\MyPhoneExplorer\MyPhoneExplorer.exe" 'Link zum MyPhoneExplorer, muss gegebenenfalls geändert werden

SMS_Tel_1 = Me!SMS_Tel_1 'Me!SMS_Tel_1 = Access Feld mit Telefonnummer z.B. +49 123 456 789
arr = Split(Me!resulttext, vbLf)  'Me!resulttext = Access Feld mit kompletten Text

For i = 0 To UBound(arr)
    SMS_Text_1 = SMS_Text_1 & arr(i) & " " & Chr$(10)  'Zeilenumbruch = " " & Chr$(10) ohne die " " Leerstelle geht es eben nicht
Next
 
    Shell linktoMPE & " action=sendmessage savetosent=1 number=" & SMS_Tel_1 & " text=" & Chr$(34) & SMS_Text_1 & Chr$(34)

End Sub
Danke! 8)
icke1954
Moderator
Beiträge: 18172
Registriert: Sa 19. Apr 2014, 10:35

Beitrag von icke1954 »

Leosn hat geschrieben:danke für dein Tip, so funktioniert es leider nicht
Also bei mir funktioniert ...
1. Me!resulttext.Text
2. Me!resulttext
3. resulttext
... problemlos
Ich vermute mal, dass das u.U. an unterschiedlichen Textfeldern in den Userformen liegt ?!

Auch der Zeilenumbruch, allerdings nur beim Empfänger, war OK
In meinem Handy allerdings, wurde der Text der gesendeten SMS, ohne Zeilensprung angezeigt.

Mit Deinem Code werden beim Empfänger dann doppelte Zeilensprünge erzeugt.
Um diese beim Empfänger zu vermeiden, habe ich das jetzt so gelöst:

Code: Alles auswählen

Private Sub SendSMS1_Click()

  Dim linktoMPE As String
  Dim SMS_Tel_1 As String
  Dim SMS_Text_1 As String
  Dim arr() As String

  linktoMPE = "C:\Program Files (x86)\MyPhoneExplorer\MyPhoneExplorer.exe" 'Link zum MyPhoneExplorer, muss gegebenenfalls geändert werden

  SMS_Tel_1 = Me!SMS_Tel_1 'Me!SMS_Tel_1 = Access Feld mit Telefonnummer z.B. +49 123 456 789
  arr = Split(Me!resulttext, vbLf)  'Me!resulttext = Access Feld mit kompletten Text
  
  For i = 0 To UBound(arr)
    If Not i = UBound(arr) Then
      SMS_Text_1 = SMS_Text_1 & Replace(arr(i), Chr$(13), "") & " " & Chr$(10)
    Else
      SMS_Text_1 = SMS_Text_1 & Replace(arr(i), Chr$(13), "")
    End If
  Next
  
  Shell linktoMPE & " action=sendmessage savetosent=1 number=" & SMS_Tel_1 & " text=" & Chr$(34) & SMS_Text_1 & Chr$(34)

End Sub
FJ
Site Admin
Beiträge: 32113
Registriert: Mi 15. Feb 2006, 01:16
Wohnort: Tirol

Beitrag von FJ »

Es gibt eine FAQ zu den Startparametern von MyPhoneExplorer: https://www.fjsoft.at/forum/viewtopic.php?t=373
Dort steht unter anderem:
action=sendmessage savetosent=1 number=0123456789;453827684;7365465 text="Hallo%nTesttext" - eine Nachricht wird direkt versandt. Es können mehrere Empfänger angegeben werden - durch Seperator getrennt. Der Text MUSS in Anführungszeichen stehen. Zeilenumbruch wird durch %n representiert
Außerdem sollte in VBA immer die Konstante vbNewLine verwendet werden - nicht vbCr oder vbLf oder Chr(10) oder Chr(13) - also:

Code: Alles auswählen

text = Replace(text,vbNewLine,"%n")
Ich bitte um Verständnis daß ich aufgrund des hohen Aufkommens im Forum und meines zeitlichen Rahmens nichtmehr jeden Thread im Forum persönlich lesen bzw. beantworten kann.

Bitte benutzt auch die Forum-Suche bzw. die FAQ
icke1954
Moderator
Beiträge: 18172
Registriert: Sa 19. Apr 2014, 10:35

Beitrag von icke1954 »

Hallo Franz,
da fällt mir nur folgendes zu ein:
Betrifft (%n) : Wer lesen kann ist eindeutig im Vorteil !
Der Rest: Warum so einfach, wenn es auch kompliziert geht :oops:
Jedenfalls, vielen Dank für die Hilfe!
Gruß icke
Leosn
Beiträge: 6
Registriert: Fr 7. Dez 2018, 10:23

Beitrag von Leosn »

Super danke das ist es.
Ja ich hatte die Vermutung dass sowas gibt nur gefunden habe ich es nicht (hab nicht richtig danach gesucht :roll: )

Also nochmal und richtig:

Code: Alles auswählen

Private Sub SendSMS1_Click()

Dim linktoMPE As String
Dim SMS_Tel_1 As String
Dim SMS_Text_1 As String

linktoMPE = "C:\Program Files (x86)\MyPhoneExplorer\MyPhoneExplorer.exe" 'Link zum MyPhoneExplorer, muss gegebenenfalls geändert werden

SMS_Tel_1 = Me!SMS_Tel_1 'Access Feld mit Telefonnummer z.B. +49 123 456 789

SMS_Text_1 = Me!resulttext 'Access Feld mit Text

SMS_Text_1 = Replace(SMS_Text_1, vbNewLine, "%n")

Shell linktoMPE & " action=sendmessage savetosent=1 number=" & SMS_Tel_1 & " text=" & Chr$(34) & SMS_Text_1 & Chr$(34)

End Sub
Antworten