Grazie ai vostri suggerimenti e ad averci picchiato la testa per un paio di giorni, ci sono riuscito. In particolare mi è stata utile la dritta sulla compilazione delle macro in codice vba che mi ha fornito lo spunto e l'indicazione di usare le maschere.
Vi posto il codice del modulo come l'ho realizzato, qualora dovesse servire da spunto a qualcuno:
Per iniziare ho creato un oggetto di tipo excel ed ho aperto il file da analizzare:
Dim xlapp As Object
nome = InputBox("digita il nome del file da elaborare")
Set xlapp = CreateObject("excel.Application")
xlapp.workbooks.Open ("C:\Documents and Settings\19034935\Desktop\" & nome & ".xls")
xlapp.Visible = True
Poi ho creato la variabile dove memorizzare il numero telefonico e la procedura per trasformarlo nel formato presente nella tabella access:
Dim num As Variant
num = "a"
x = 2
Do While num <> ""
num = xlapp.range("B" & x).Text
If num = "" Then
Exit Do
End If
If Mid(num, 1, 1) <> "0" Then
num = "0" + num
End If
If Mid(num, 2, 1) = "2" Then
num = "0" + num
End If
If Mid(num, 2, 2) <> "02" And Mid(num, 2, 2) <> "11" And Mid(num, 2, 2) <> "15" And Mid(num, 2, 2) <> "30" And Mid(num, 2, 2) <> "31" And Mid(num, 2, 2) <> "35" And Mid(num, 2, 2) <> "39" Then
num = Mid(num, 2, 12)
End If
Do While Len(num) < 13
num = Mid(num, 1, 3) + "0" + Mid(num, 4, 10)
Loop
A questo punto, avevo creato una maschera collegata alla tabella di access, la faccio aprire in sola lettura e senza visualizzarla:
DoCmd.OpenForm "RIENTRI", acNormal, , , acFormReadOnly, acHidden
Per evitare di cercare il numero in tutti i campi del database, cosa che porterebbe via parecchio tempo per ogni interrogazione, sposto il focus sul campo della maschera che contiene i numeri telefonici:
Forms!RIENTRI!NUMERO.SetFocus
A questo punto posso ricercare all'interno della maschera il record dove il campo contenente il telefonico corrisponde al valore prelevato da excel ed inserito nella variabile num:
DoCmd.FindRecord num, acStart, False, , False, acCurrent, True (acCurrent serve proprio per limitare la ricerca al campo su cui è stato impostato il focus)
Una volta trovato il record recupero il valore del campo che mi interessa in un'altra variabile. Ovviamente inserisco un controllo per il caso che il record restituito sia vuoto oppure la maschera resti posizionata sul primo record perchè non ha trovato la corrispondenza:
Dim Cam As String
If IsNull(Forms!RIENTRI!NUMERO) = True Or Forms!RIENTRI!NUMERO <> num Then
Cam = "NUMERO NON TROVATO"
Else
If IsNull(Forms!RIENTRI!INDIRIZZO) = True Then
Cam = "indirizzo non dichiarato"
Else
Cam = Forms!RIENTRI!INDIRIZZO
End If
End If
Fatto questo, chiudo la maschera, riporto il valore dell'indirizzo nel foglio excel e riparto con il numero successivo:
DoCmd.Close acForm, "RIENTRI", acSaveNo
xlapp.range("P" & x).Activate
xlapp.activecell.formulaR1C1 = Cam
x = x + 1
Loop
MsgBox "Fine elaborazione"
Spero vi possa servire, grazie ancora,