none
Code ins VBA übersetzen RRS feed

  • Frage

  • Hallo Leute,

    ich habe hier einen VB.net Code, den ich gerne ins VBA übersetzt hätte.

    Es geht um eine Wählfunktion für das angeschlossene Telefon.

    Unter VB2010 verweise ich auf die "TAPIAPP.dll" und trage den folgenden Code in die Form ein:

     

    Public Class frmSettings  

    Private WithEvents CallObj As TAPI.APPLICATION

        Private Sub frmMain_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

            CallObj = New TAPI.APPLICATION
            CallObj.Debugging = False

            Call CallObj.Devices.Item(currentDevice).Func_lineOpen(&H4& Or &H2&, &H10&)
            Call CallObj.Func_lineRegisterRequestRecipient()

        End Sub

     

        Private Sub cmdDialNumber_Click(sender As System.Object, e As System.EventArgs) Handles cmdDialNumber.Click
            Call CallObj.Devices.Item(6).Func_lineMakeCall(TextBox1.Text, CallObj.CountryCode)

    '...Item(6).Func... übergibt die Line, TextBox1 enthällt die zu wählende Telefonnummer
        End Sub

    End Class

    Ist es möglich, diesen Code in einer VBA Umgebung (z.B. Excel, Word oder Access) zu starten und die Nummer zu wählen?

    Am besten wäre es, wenn die DLL erst bei Bedarf aufgerufen wird, also ohne dass die DLL in der IDE über "Extras / Verweise" eingebunden wird.


    Montag, 30. Januar 2012 12:32

Antworten

  • Hallo Philipp,

     

    ich benutze das in Excel:

     ' Call MakeCall("+49 (123) 456789 ")
    
    
    Public Sub MakeCall(ByVal sTel As String)
      Dim oTapi As Object 'TAPI3Lib.TAPI
      Dim oAddr As Object 'ITAddress
      Dim oCall As Object 'ITBasicCallControl
      Const TAPIMEDIATYPE_AUDIO As Long = 8
      Const LINEADDRESSTYPE_PHONENUMBER As Long = 1
    
      On Error GoTo Ende
    
      'Verbindung zu TAPI
      Set oTapi = CreateObject("TAPI.TAPI")
      oTapi.Initialize
      
      'Verbindung zum Telefonapparat
      For Each oAddr In oTapi.Addresses
        'Debug.Print oAddr.addressname
        If IsNumeric(oAddr.addressname) Then
          'Meinen Apparat gefunden, Ruf aufbauen
          Set oCall = oAddr.CreateCall(sTel, LINEADDRESSTYPE_PHONENUMBER, TAPIMEDIATYPE_AUDIO)
          'jetzt anrufen
          oCall.Connect False
          Exit For
        End If
      Next
    Exit Sub
    
    Ende:
    MsgBox ("Es konnte nicht gewählt werden!")
    End Sub
    
    
    Function ClearNumber(ByVal sTel As String) As String
      On Error GoTo Ende
      'Regular-Expressions nutzen
      Dim RegEx As Object
      Set RegEx = CreateObject("VBScript.RegExp")
      RegEx.Global = True 'Jedes Vorkommen soll ersetzt werden
      
      RegEx.Pattern = "[^\+0-9]*"       'alles entfernen, dass nicht + oder eine Ziffer ist,
      sTel = RegEx.Replace(sTel, "")    'bis + oder Ziffer gefunden wird
      
      RegEx.Pattern = "^\+490"          'Ersetze +490 am Zeilenanfang durch 00
      sTel = RegEx.Replace(sTel, "00")
      
      RegEx.Pattern = "^\+49"           'Ersetze +49 am Zeilenanfang durch 00
      sTel = RegEx.Replace(sTel, "00")
      
      RegEx.Pattern = "\+*"             'verbliebene + entfernen
      sTel = RegEx.Replace(sTel, "")
      
      RegEx.Pattern = "^000"            'Ersetze 000 am Zeilenanfang durch 00
      sTel = RegEx.Replace(sTel, "00")
      
      RegEx.Pattern = "^0(?!0)"         'Ersetze eine einfache 0 am Zeilenanfang durch 00 für Amtsholung,
      sTel = RegEx.Replace(sTel, "00")  'wenn auf die 0 eine andere Ziffer als 0 folgt (lookforward-Funktion)
      
      
      'Rückgabe
      ClearNumber = sTel
    Ende:
    End Function
    


    Gruß

    Werner


    Woher soll ich wissen, was ich denke, bevor ich höre, was ich sage?
    • Als Antwort markiert Philipp B. _ Dienstag, 31. Januar 2012 13:29
    Montag, 30. Januar 2012 22:40
  • hmmm,

    also ich beziehe das Object

    Dim oTapi As Object 'TAPI3Lib.TAPI => aus  => in ..\System32\Tapi32.DLL


    Einen Verweis brauchst Du nicht, sofern der TAPI auf deinem System installiert ist

    Schadet aber auch nichts :-)

     

    Gruß
    Werner

     


    Woher soll ich wissen, was ich denke, bevor ich höre, was ich sage?
    Dienstag, 31. Januar 2012 09:45

Alle Antworten

  • Hallo Philipp,

     

    ich benutze das in Excel:

     ' Call MakeCall("+49 (123) 456789 ")
    
    
    Public Sub MakeCall(ByVal sTel As String)
      Dim oTapi As Object 'TAPI3Lib.TAPI
      Dim oAddr As Object 'ITAddress
      Dim oCall As Object 'ITBasicCallControl
      Const TAPIMEDIATYPE_AUDIO As Long = 8
      Const LINEADDRESSTYPE_PHONENUMBER As Long = 1
    
      On Error GoTo Ende
    
      'Verbindung zu TAPI
      Set oTapi = CreateObject("TAPI.TAPI")
      oTapi.Initialize
      
      'Verbindung zum Telefonapparat
      For Each oAddr In oTapi.Addresses
        'Debug.Print oAddr.addressname
        If IsNumeric(oAddr.addressname) Then
          'Meinen Apparat gefunden, Ruf aufbauen
          Set oCall = oAddr.CreateCall(sTel, LINEADDRESSTYPE_PHONENUMBER, TAPIMEDIATYPE_AUDIO)
          'jetzt anrufen
          oCall.Connect False
          Exit For
        End If
      Next
    Exit Sub
    
    Ende:
    MsgBox ("Es konnte nicht gewählt werden!")
    End Sub
    
    
    Function ClearNumber(ByVal sTel As String) As String
      On Error GoTo Ende
      'Regular-Expressions nutzen
      Dim RegEx As Object
      Set RegEx = CreateObject("VBScript.RegExp")
      RegEx.Global = True 'Jedes Vorkommen soll ersetzt werden
      
      RegEx.Pattern = "[^\+0-9]*"       'alles entfernen, dass nicht + oder eine Ziffer ist,
      sTel = RegEx.Replace(sTel, "")    'bis + oder Ziffer gefunden wird
      
      RegEx.Pattern = "^\+490"          'Ersetze +490 am Zeilenanfang durch 00
      sTel = RegEx.Replace(sTel, "00")
      
      RegEx.Pattern = "^\+49"           'Ersetze +49 am Zeilenanfang durch 00
      sTel = RegEx.Replace(sTel, "00")
      
      RegEx.Pattern = "\+*"             'verbliebene + entfernen
      sTel = RegEx.Replace(sTel, "")
      
      RegEx.Pattern = "^000"            'Ersetze 000 am Zeilenanfang durch 00
      sTel = RegEx.Replace(sTel, "00")
      
      RegEx.Pattern = "^0(?!0)"         'Ersetze eine einfache 0 am Zeilenanfang durch 00 für Amtsholung,
      sTel = RegEx.Replace(sTel, "00")  'wenn auf die 0 eine andere Ziffer als 0 folgt (lookforward-Funktion)
      
      
      'Rückgabe
      ClearNumber = sTel
    Ende:
    End Function
    


    Gruß

    Werner


    Woher soll ich wissen, was ich denke, bevor ich höre, was ich sage?
    • Als Antwort markiert Philipp B. _ Dienstag, 31. Januar 2012 13:29
    Montag, 30. Januar 2012 22:40
  • Hallo Werner, danke für die Antwort. Bei mir will es nicht funzen. Ist dafür ein bestimmter Verweis nötig?
    Dienstag, 31. Januar 2012 07:25
  • hmmm,

    also ich beziehe das Object

    Dim oTapi As Object 'TAPI3Lib.TAPI => aus  => in ..\System32\Tapi32.DLL


    Einen Verweis brauchst Du nicht, sofern der TAPI auf deinem System installiert ist

    Schadet aber auch nichts :-)

     

    Gruß
    Werner

     


    Woher soll ich wissen, was ich denke, bevor ich höre, was ich sage?
    Dienstag, 31. Januar 2012 09:45
  • Hallo Philipp B. _,

    Schau Dir mal folgenden Artikel an. Vielleicht kann er Dir weiterhelfen.

    Low Level TAPI (Wenn man hier das Projekt kompiliert bekommt man die TAPIAPP.dll).

    Kannst Du nicht diese DLL in Excel (VBA) als Verweis hinzufügen (Tools à References) und den Code anpassen?

    Grüße,

    Robert


    Robert Breitenhofer, MICROSOFT  Twitter Facebook
    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Dienstag, 31. Januar 2012 12:05
    Moderator
  • Wie geil ist das den...

    Läuft super !!!

    Danke dir Werner  :-)

    Dienstag, 31. Januar 2012 12:10
  • Hallo Robert,

    um genau sieses Tool ging es auch. Wollte es aber ohne den erwähnten Verweis tun.

     

    Der Code von Werner läuft super. Da geht es auch mit den Windows Bordmitteln, auch ohne Extraverweise.

    Das mit der TAPIAPP.dll hat sich jetzt erledigt, die ist mit TAPI3 nicht kompatibel. Auf meinerm Rechner war TAPI2 installiert. Jetzt habe ich auf 3 aktualisiert (wie auf allen anderen PCs) und die DLL läuft nicht. Dafür habe ich ein anderes Beispiel gefunden, welches auch mit TAPI3 klarkommt, daraus habe ich eine DLL gebastelt und schon funzt es.

    Im meinem Programm werden jetzt 2 DLL's gebraucht. Eine um Anrufen zu erkennen (bekomme die Nummer als CallBack) und eine DLL um zu wählen. Alles 4free.

    Danke allen, die sich Gedanken gemacht haben  :-)

    Dienstag, 31. Januar 2012 13:29
  • Hallo Philipp,

    genau solch einen Code unter VB.Net suche ich derzeit.

    Kannst Du mir deinen Code zur Verfügung stellen?

    Danke

    Gruß Lothar

    Dienstag, 7. Februar 2012 07:25
  • Hallo HELLOT,

    ist zwar lange her aber hier sind die Antworten.

    Caller-ID: dazu nimmst du die DLL hier (musst mit VB6 kompilieren)

    http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=62079&lngWId=1

    Fügst in VB.net als ActiveX ein.

    Code:

        Private Sub CallerID_OnCallerID(sender As System.Object, e As AxsrCallerID.__TAPICallerID_OnCallerIDEvent) Handles CallerID.OnCallerID
            If (Environment.TickCount - _lastCallTime) > 1000 Then 'damit wird ein Doppelereigniss verhindert
                _newCall = CallerID.LastCallerID
                _lastCallTime = Environment.TickCount
            End If
        End Sub

    _newCall= [ist die Anrufnummer]

    Nummer wählen kann man mit dem oben genannten Code.


    Dienstag, 29. Mai 2012 12:15