Chiamare usando il telefono da Excel (con modem), ma composizione automatica di un numero di telefono presente in un elenco sul foglio di lavoro.          (08/04/03)

Presento delle istruzioni che ho trovato e rese freeware (riporto il testo originale in inglese), adattate e modificate da me per l'utilizzo in una cartella di Excel.

Il testo originale:

'AutoDial - Telephone dialer demo program
'Copyright (c) 1996-97 SoftCircuits
'Redistributed by Permission.
'This Visual Basic 5.0 example program demonstrates how an application
'can dial a telephone number under Windows 95 using Assisted Telephony
'which is a subset of TAPI. This code is simple because it relies on a
'call manager applet to perform the actual dialing.
'This program may be distributed on the condition that it is
'distributed in full and unchanged, and that no fee is charged for
'such distribution with the exception of reasonable shipping and media
'charged. In addition, the code in this program may be incorporated
'into your own programs and the resulting programs may be distributed
'without payment of royalties.
'This example program was provided by:
' SoftCircuits Programming
' http://www.softcircuits.com
' P.O.Box 16262
' Irvine, CA 92623
' Downloaded from http://surf.to/VbArea

Il progetto su citato si basa sull'uso delle librerie TAPI32.DLL, che sono le stesse utilizzate dal Dialer.exe citato nel paragrafo precedente.

Ma vediamo come gestire le istruzioni. Visto che avremo necessità di disporre di un elenco telefonico dal quale attingere i numeri da chiamare, bisognerà creare una "Rubrica" con nominativo e relativo numero telefonico, posta su un foglio di lavoro. Poi useremo una UserForm con una casella combinata che "peschi" i dati, su due colonne, presenti nella "rubrica". Con la selezione di un nominativo, otterremo che in una textbox compaia il numero correlato, e con un pulsante attiveremo la routine che chiamerà il dialer usando come numero da comporre il numero presente nella textbox. Un semplice controllo che la textbox non sia vuota, impedirà l'esecuzione della routine.

Istruzioni da inserire nella sezione Generale  -  Dichiarazioni  della UserForm

Option Explicit


Private Declare Function tapiRequestMakeCall& Lib "TAPI32.DLL" (ByVal DestAddress$, ByVal AppName$, ByVal CalledParty$, ByVal Comment$)
'Questa è tutta una riga
Private Const TAPIERR_NOREQUESTRECIPIENT = -2&
Private Const TAPIERR_REQUESTQUEUEFULL = -3&
Private Const TAPIERR_INVALDESTADDRESS = -4&

Istruzioni da inserire nell'apertura della UserForm per assegnare alla ComboBox1 il range di celle che formerà il RowSource (elenco nomi e numeri che nell'esempio pongo in A1:B10)

Private Sub UserForm_Activate()
ComboBox1.RowSource = "A1:B10"
End Sub

Impostazione delle "proprietà" della ComboBox perchè ci mostri due colonne: colonna A con i nomi e colonna B con i numeri. Le proprietà interessate sono:

  • ColumnCount - che andrà impostata a 2 (imposta a due le colonne visualizzate nella combobox)

  • BoundColumn - che andrà impostata a 2 (Identifica la fonte dati di un controllo ComboBox a colonne multiple. Il valore indicato (in questo caso 2) assegna al controllo il valore della colonna specificata. Le colonne vengono numerate a partire da 1).

e questo è l'aspetto dell'elenco sul foglio e della ComboBox a due colonne in cui si notano i nomi e relativi numeri:

Poichè avremo bisogno che selezionando un nominativo nella ComboBox, nella TextBox1 compaia il numero associato e presente nella seconda colonna della stessa combo, useremo l'evento Change della ComboBox indicando però quale colonna ci interessa (BoundColumn) ma sfruttando l'argomento Value anzichè Text (con Text verrebbe restituito il nome e non il numero di colonna. Con Value si identifica il numero di colonna assegnato a BoundColumn, indipendentemente dal fatto che nella colonna siano presenti numeri o testo  )

Private Sub ComboBox1_Change()
ComboBox1.BoundColumn = 2
TextBox1 = ComboBox1.Value
TextBox1.SetFocus
End Sub

e questo è il risultato:


E queste sono le istruzioni collegate al pulsante "Componi..." , chiamato cmdDial:

Private Sub cmdDial_Click()

'controllo se la textbox1 è vuota, allora avviso ed esco dalla routine
If TextBox1 = "" Then
MsgBox "Seleziona il Nominativo da chiamare o scrivi un numero di telefono"
Exit Sub
End If

'inizio delle istruzioni originali da me riportate
Dim buff As String
Dim nResult As Long


'Invoke tapiRequestMakeCall. If tapiRequestMakeCall returns 0, the
'request has been accepted. It is up to the call manager application
'to do any further work. The second-to-last argument should be
'changed to be the name of the person you are dialing.

'riga sotto: modifica con TextBox1(casella dove si trova il numero da chiamare) assegnata a nResult
nResult = tapiRequestMakeCall&(Trim$(TextBox1), CStr(Caption), "Test Dial", "")
'Display message if error

If nResult <> 0 Then
buff = "Error dialing number : "
Select Case nResult
Case TAPIERR_NOREQUESTRECIPIENT
buff = buff & "No Windows Telephony dialing application is running and none could be started."
Case TAPIERR_REQUESTQUEUEFULL
buff = buff & "The queue of pending Windows Telephony dialing requests is full."
Case TAPIERR_INVALDESTADDRESS
buff = buff & "The phone number is not valid."
Case Else
buff = buff & "Unknown error."
End Select
MsgBox buff
End If
End Sub

 

Buon lavoro.


prelevato sul sito http://ennius.interfree.it