Newsgroup: it.comp.lang.visual-basic
Titolo: [?2] DLL e oggetti

Come si fa ad usare in un form gli oggetti contenuti nelle DLL (es.
MSO97.DLL = Microsoft Office 8.0 Object Library)?

...


Ciao,
ho dato un'occhiata al tuo problema, esposto anche in altre mail se non
sbaglio.
Ho provato a dare un'occhiata a quanto riportato dalla guida in linea di
Access ed in effetti non solo non e' facilmente capibile, ma contiene delle
imprecisioni (classico in casa M$=:-)))) dando ad es opzionali dei parametri
che sono obbligatori sia sulla guida che negli esempi.
Ho quindi corretto un esempio e adesso funziona, vedi se ti puo' essere
utile.
In un form metti un button, collega al progetto la libreria di Access 8.0
(msacc8.olb) e poi copia il codice sotto.
' Dichiara variabile di oggetto nella sezione Dichiarazioni di un modulo
Dim AppAccess As Access.Application
Sub RicercaDati()
    Dim strDB As String
    Dim strNomeReport As String
    ' Inizializza stringa a percorso database.
    '=================================
    ' questo file esiste effettivamente devi pero' cercarlo
    ' ed adeguare la stringa del percorso
    '=================================
   strDB = "D:\Programmi\Office\Esempi\Northwind.mdb"
    '=================================
    ' Inizializza stringa a nome report.
    strNomeReport = "Catalogo"
'    PrintAccessReport strDB, strNomeReport ' qui chiamava una sub
            ' inesistente !!!! grazie BILL
    StampaReport strDB, strNomeReport 'corretta
End Sub
Sub StampaReport(strDB As String, strNomeReport As String)
' Restituisce riferimento all'oggetto Application di Microsoft Access.
    Set AppAccess = New Access.Application
    ' Apre database in Microsoft Access.
    AppAccess.OpenCurrentDatabase strDB, False ' qui il false della
condivisione
    ' lo avevamo omesso in quanto opzionale!!! e' obbligatorio !!:-[[[
    ' Stampa report.
    AppAccess.DoCmd.OpenReport strNomeReport, acViewNormal
    ' stesso discorso per il parametro acViewNormal. NON e' opzionale !!!!
    MsgBox "Fare clic su OK al " & strNomeReport & _
        " termine della stampa"
    AppAccess.CloseCurrentDatabase
    Set AppAccess = Nothing
End Sub
Credo che il principio che ne possiamo trarre sia "GIRA E RIGIRA CHE FORSE
LA SOLUZIONE LA TROVI!!!"
Ciao e auguri.
giuseppe


Mi dispiace, ma non è questa. Il VB genera un errore appena si tenta di
istanziare (nota bene, non dichiarare) un oggetto della libreria (es.
CommandBar).
Se qualcuno riesce ad usare questa DLL (o altre simili), me lo faccia
sapere.

Ciao.
Continuo a rispondere sul Ng perche' potrebbe interessare anche altri.
Ho provato ad utilizzare la DLL che interessava al Ns amico Raffaele dopo
che mi ha postato privatamente i chiarimenti.
La DLL e' la MSO97.DLL (Microsoft Office 8.0 Object Library).
Io non sono riuscito a fare molto, ci ho lavorato un po' sopra e mi e' parso
di capire che la si puo' utilizzare quanto meno per poter variare con
istanze gli oggetti del pacchetto Office collegati a mezzo di riferimenti al
progetto, mentre non sono ancora riuscito a capire se e come e' possibile
utilizzarle direttamente all'interno del progetto come modelli di oggetti
utente.
Comunque ad ogni buon conto invio il codice su cui ho lavorato.
Collega al progetto i riferimenti alla dll incriminata ed all'Access 8.0
(msacc8.olb) quindi nella form due button e due text di seguito il codice:
Private Sub Form_Load()
    Command2.Caption = "Visualizza Barre Stumenti"
    Command1.Caption = "Aggiungi Barra a Menu Strumenti"
End Sub
Private Sub Command1_Click()
    ' aggiunge una voce nella barra menu strumenti
    ' con descrizione contenuta in text1
    Set newItem = CommandBars("Tools").Controls.Add(Type:=msoControlButton)
    With newItem
        .BeginGroup = True
        .Caption = Text1
        .FaceId = 0
        .OnAction = "RoutineDaInserire"
        'richiama la routine RoutineDaInserire
    End With
End Sub
Private Sub Command2_Click()
'Controlla se esiste il nome della barra comando che scriviamo
' in Text2
' se ad esempio scrivi Query la dovrebbe trovare
Dim NomeBarra As String
foundFlag = False
For Each cb In CommandBars
    Debug.Print cb.Name
'qui visualizzo nel debug i nomi delle barre
    If cb.Name = Text2 Then
        NomeBarra = cb.Name
        cb.Protection = msoBarNoChangeDock
        foundFlag = True
    End If
Next cb
If Not foundFlag Then
    MsgBox "L'insieme non contiene una barra dei comandi " & Text1
Else
    MsgBox "L'insieme contiene una barra dei comandi " & NomeBarra
End If
End Sub
Quando clicco su i bottoni, faccio automaticamente un'istanza ad Access, che
mi apre una finestra sulla barra di avvio e mi esegue quanto richiesto,
infatti se vado a verificare l'inserimento della nuova barra nel menu' degli
strumenti, vedro' che effettivamente ho aggiunto una voce con la descrizione
riportata nella textbox.
Se anche termino l'applicazione e vado poi ad aprire Access autonomamente,
vedro' che ha mantenuto il  nuovo inserimento.
Questo e' quanto.
A domani l'eventuale nuova puntata.
Ciao.
giuseppe









Grazie della sollecita risposta.
Anch'io avevo provato ad usare gli oggetti descritti dalla MSO97.DLL
all'interno di Access modificando una barra degli strumenti (già presente
nel contenitore, cioè l'istanza caricata del programma).
In questo caso tutto è OK.
Quello che mi chiedo è perché non sia possibile all'interno di un progetto
creare una nuova CommandBar usando la stessa sintassi.
Forse è necessaria una OLB invece di una DLL?