Newsgroup: it.comp.appl.access
Titolo: modificare riferimento in base alla versione

salve
 
ho inserito in un'applicazione il riferimento 
Microsoft Outlook 14.0 Object Library
 
come faccio se eseguo l'applicazione con access 2003 a cambiare in automatico il riferimento?
 
GRAZIE

Basta non inserirli.
Si sviluppa proprio per questo motivo in modalità LateBinding... per no  essere VERSION DIPENDENT.
 
Argomento trattato mille volte... trovi do sicuro molto cercando.
 
@Alex

@Alex formulated on Monday :

Convertimi questa in LateBinding, debbo fare un esperimemto
e non ci sono riuscito:
===============================
Private Sub Command0_Click()
'
' Microsoft Outlook 16.0 Object Library
'
Dim olObject As New Outlook.Application, i
For Each i In Session.GetDefaultFolder(olFolderContacts).Items
    MsgBox i
Next
 
End Sub
===============================
 
Molte Grazie
Bruno

Bruno rileggi il 3d di qualche settimana fa in cui esponevo la medesima cosa...
Usare Latebinding richiede l'istanza degli oggetti e/o assegnazione a variabili di tipo Object poi ovviamente si devono usare le costanti rigenerate ovvero non puoi usare le costanti di tipo dal momento che non hai i riferimenti... quindi ti crei una costante  on lo stesso nome e valore...
 
Come dissi anche allora... di solito si usa la compilazione condizionale in modo da distinguere lo sviluppo dall'uso poi Runtime.
 
Provaci e vediamo...
 
@Alex

@Alex laid this down on his screen :

Io ho provato e riprovato e, come già dissi, non ci sono riuscito.
Pazienza, non si può aver tutto dalla vita!
 
Bruno

Scusa Bruno... riprendi il 3d precedente, io non  lo ritrovo, avevo scritto una quota parte di codice finito... ripartiamo da lì se vuoi a capire cosa non va...
 
@Alex

Trovata...
 
Public Function SelectOutlookSender() 
    Dim olApp           As Object 
    Dim mItem           As Object 
    Dim i               As Long 
    Dim S               As String 
    Const olMailItem    As Integer = 0 
 
    On Error Resume Next 
 
    Set olApp = GetObject(, "Outlook.Application") 
 
    If olApp Is Nothing Then 
        Set olApp = CreateObject("Outlook.Application") 
    End If 
 
    For i = 1 To olApp.Session.Accounts.Count 
        S = S & i & " - " & olApp.Session.Accounts.Item(i) & vbCrLf 
    Next 
    MsgBox S 
 
'    Set mItem = olApp.CreateItem(olMailItem) 
'    'mItem.SendUsingAccount = 
'    olApp.Session.Accounts.Item (Forms![miaform]![IDazienda]) 
'    mItem.SendUsingAccount = olApp.Session.Accounts.Item(2) 
'    MsgBox mItem.SendUsingAccount 
    Exit Function 
 
End Function 
 
Cosa non torna...?

@Alex submitted this idea :

Non tornano i Contacts... di quelli si parlava.
 
Laddove mi si pianta tutto in GetDefaultFolder(olFolderContacts).
Ho provato anche passando da MAPI (altra robaccia
che non digerisco), ma non ho risolto nulla.
 
Bruno

Ovviamente come ti dicevo non può trovare la costante [olFolderContacts]...
La devi dichiarare come costante di progetto
 
Quando si sviluppa si usa la compilazione condizionale proprio per queste cose...
 
CONST Latebinding=True/False
 
# If Latebinding then 
Dim olFolderContacts=10
# End if
 
Poi anche nella fumzione:
 
Public Function EsempioOutlook()
  # If Latebinding then 
     DIM objOutlook  As Object
  # Else
     DIM objOutlook  As Outlook.Application
  # End If
 
....
End Function
 
In questo caso si sviluppa con i riferimenti ad Outlook per avere Help/Metodi/proprietà e costanti con l'intellisense...  e si metta a False la costante Latebinding... alla fine senza più toccare nulla modifichi la costante a True e compili in Accde/Mde e distribuisci il compilatore ignora EarlyBinding in quanto non validati i condiionamenti del codice.
 
Stessa cosa che si fa con le API.
 
Spero di essere stato chiaro.
 
@Alex

@Alex submitted this idea :

Credi che non l'abbia messo il 10 al posto di olFolderContacts?
Lì, da dentro il mio Access 2019, si pianta comunque.
Da te no?
 
Bruno


Bruno.... fai arrabbiare...
 
Ovviamente con il LATEBINDING gli oggetti non sono ESPLICITI devi pertanto inserire la RADICE sempre...!
 
Così FUNZIONA perfettamente, anche se il codice non è il massimo...:
 
Public Const olFolderContacts  As Integer=10
 
Public Function SelectOutlookSender()
    Dim olApp           As Object
    Dim mItem           As Object
    Dim i               As Long
    Dim S               As String
    Const olMailItem    As Integer = 0
 
    On Error Resume Next
 
    Set olApp = GetObject(, "Outlook.Application")
 
    If olApp Is Nothing Then
        Set olApp = CreateObject("Outlook.Application")
    End If
 
    For Each mItem In olApp.Session.GetDefaultFolder(olFolderContacts).Items
        Debug.Print mItem
    Next
 
    Exit Function
 
End Function
 
 
Ciao
@Alex

 Così FUNZIONA perfettamente, anche se il codice non è il massimo...:
 
No, non è il massimo... secondo il mio canone estetico
è sotto il livello della decenza.
Questo è il minimo INDISPENSABILE, privato degli
inutili orpelli grafico-sintattico-grammaticali:
===================================
Public Sub SelectOutlookSender()
Dim olApp As Object, i
Const olFolderContacts As Integer = 10
 
Set olApp = CreateObject("Outlook.Application")
For Each i In olApp.Session.GetDefaultFolder(olFolderContacts).Items
    Debug.Print i
Next
 
End Sub
==================================
 
È talmente semplice che io mi sto incazzando con me stesso
per non esserci arrivato da solo...
Beh, comunque qulacosa di nuovo l'ho imparato.
 
Ti ringrazio
Bruno

 Bruno
 
Ora impara a scrivere codice serio... invece di quelle 3 righe del piffero che fanno ridere a noi "professionisti", non le scriverebbe nemmeno il mio cane.
 
;-)
 
Ciao Bruno
 
@Alex