Newsgroup: it.comp.appl.access
Titolo: Riferimento libreria da VBA

Salve a tutto il n.g.
Se con Access si vuole utilizzare un altro componente di Office, ad
es. Word, bisogna tramite l'editor VBA mettere il segno di spunta
nella libreria dei riferimenti bookmarks altrimenti si incorre
nell'errore; ora quello che vi chiedo è questo:
tramite codice VBA, ad es. all'apertura del database, si può ovviare a
tale sistema manuale?
Grazie Vladimiro.


Non è proprio come dici...!
In fase di sviluppo si fa come dici per avere l'accesso all'intellisense ed
all'Help...
poi si rimuovono i riferimenti e si usa la tecnica del LATEBINDING definendo
le variabili di tipo come Object.
Questo serve proprio per evitare di avere vincoli tra le versioni di
Sviluppo e
quelle presenti nel PC destinatario.
Cerca nel NG con LATEBINDING e vedrai che trovi tutto...!
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.alessandrobaraldi.it
---------------------------------------------------------------------------

(.....)

In aggiunta a quanto suggerito da Alessandro, se proprio ti interessa o ti serve per altri motivi, cerca nell'help la
parola chiave References: trovarai spiegato come impostarli da VBA.
Sappi però che questo si può fare solo in un mdb e non in un mde.
Vincenzo Turturro
Certificato Eucip Core Level
ITA 0000-002299 del 14/05/2007
---------------------------------------------
il sito comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------
risorse Access:
http://www.accessgroup.it
---------------------------------------------
Il sito comune di it.comp.as400
http://www.faq400.com
---------------------------------------------

 wrote:

Ciao Alessandro e ciao Vincenzo.
Allora il codice che ho modificato è il seguente:
Dim Wrd As Object, Doc As Word.Document
Dim Rst As DAO.Recordset
Dim Modello As String, NomeFile As String, i As Integer
Dim Record As String, sql As String
Dim Tbl As String * 1
Dim TotRiga As Currency, Totale As Currency
Dim ReplSel As Boolean
    Me.Requery
    Modello = CurrentDb.Name
    Modello = Left(Modello, Len(Modello) - Len(Dir(Modello))) &
"Stampa_Comunicato.dot"
    On Error Resume Next
    Set Wrd = GetObject(, "Word.Application")
    If Err.Number = 429 Then
        Set Wrd = CreateObject("Word.Application")
    End If
    On Error GoTo 0
    Wrd.Visible = True
    Wrd.Activate
    ReplSel = Wrd.Options.ReplaceSelection
    Wrd.Options.ReplaceSelection = True
    Set Doc = Wrd.Documents.Add(Modello)
    Doc.Activate
Il problema però è che mi dà l'errore su:
        'linea orizzontale tra le intestazioni e i dati
        Wrd.Selection.Borders(wdBorderTop).LineStyle =
wdLineStyleSingle
        'spaziatura di 8 punti tra la linea e il testo
        Wrd.Selection.Borders.DistanceFromTop = 8
una volta eliminato va bene. Come mai?
Vladimiro.

 - Mostra testo tra virgolette -

 - Mostra testo tra virgolette -
Ovviamente... perdendo i riferimenti l'altro problema è
l'ìmpossibilità di usare le Costanti implicite Enumerate... leggiti il
valore di wdLineStyleSingle ed usa il valore esplicito...
Io personalmente mi creo le Costanti Public e poi uso quelle.
@Alex

 - Mostra testo tra virgolette -
Ciao Alessandro,
ho provato ad inserire nel modulo         Public Const
wdLineStyleSingle = 1
però continua a darmi l'errore: Il membro richiesto dell'insieme non
esiste. (riferito solo alla linea orizzontale che vorrei inserire:
Wrd.Selection.Borders(wdBorderTop).LineStyle = wdLineStyleSingle)
Probabilmente la costante "wdLineStyleSingle" la debbo dichiarare
diversamente, ma non so come e tra l'altro non so se ho afferrato bene
il senso della tuo suggerimento.
Ciao Vladimiro.

Ciao Alessandro,
ho provato ad inserire nel modulo         Public Const
wdLineStyleSingle = 1
però continua a darmi l'errore: Il membro richiesto dell'insieme non
esiste. (riferito solo alla linea orizzontale che vorrei inserire:
Wrd.Selection.Borders(wdBorderTop).LineStyle = wdLineStyleSingle)
Probabilmente la costante "wdLineStyleSingle" la debbo dichiarare
diversamente, ma non so come e tra l'altro non so se ho afferrato bene
il senso della tuo suggerimento.
Ciao Vladimiro.
Ciao Vladimiro.
Scusa rileggendo mi sono accorto che forse non sono stato chiaro..!
TUTTE le costanti che usi devono essere replicate... così come wdBorderTop
che
è esattamente quella che ti permettere di usare l'indicizzazione della
Collection Borders.
Di fatto non avendo la costante non riesce a puntare ad un Bordo esistente.



Macchè, ho inserito anche questa : Public Const wdBorderTop = -1
Stesso errore.
Vladimiro.

Macchè, ho inserito anche questa : Public Const wdBorderTop = -1
Stesso errore.
Vladimiro.
MMmmmm prova a vedere cosa restituisce la proprietà Count
di Borders... c'è qualche cosa che non quadra...


 
Con vladimiro e' dura, fa cose strane ma te lo dice quando te so' venuti 
tutti i capelli bianchi (per chi li ha) ;<)
comunque e' un bravo "regazzo"
P.S. : li hai messi i diffusori acustici al tuo pc? Mi dovresti testare 
una cosa.
Io ce l'ho bianco e profumato mica come Pablitomf!
-- 
ac
y-1=x

 y-1=x
Spiacente


 comunque e' un bravo "regazzo"
beh, ti ringrazio... almeno per il regazzo (romano parlando)


 ---------------------------------------------------------------------------
Alessandro B, lascia perdere Alessandro C, gli piace ...speculiare...
ma poi le soluzioni te le trova sempre!!!

 di Borders... c'è qualche cosa che non quadra...
non ho capito!


 Cosa...?
Il suonatore di mp3 e assimilati. Solo che questo "suona" anche gli .avi 
(quindi i film muti li puoi "suonare") ed ha un po' di altri gadgets. 
Proprio in questo momento mi sta suonando random una selezione di roba 
promiscua.
Sto sistemando ancora un po' di bugs e imprecisioni,
e poi stavo pensando di farmelo *pubblicare* da uno che conosco. A lui 
manderei anche l'mdb ma siccome mi sono un po' rotto di una serie di 
sfaccendati lo vorrei pubblicare in forma mde (ha degli "earlybound" ma 
chi lo vuole vedere si arrangi, sull'Help.doc ho scritto quello che serve)
Anzi comincio a mandarti l'help.doc cosi' se hai dei suggerimenti.....!
-- 
ac
y-1=x

 - Mostra testo tra virgolette -
Ciao Alessandro, riprendiamo il discorso.
Dopo l'errore, se mi avvicino con il cursore vicino la riga rimasta
gialla mi esce: wdLineStyleSingle=vuoto
Può servire a farti capire qualcosina in più?
Vladimiro.

 - Mostra testo tra virgolette -
Un'ultima cosa.
 wdAlignTabCenter  e   wdAlignTabCenter  non sono state dichiarate nel
modulo eppure su queste, anche stando prima di wdLineStyleSingle  o
wdBorderTop non esce l'errore (anche se le tabulazioni sono
leggermente diverse da come uscivano prima dell'inserimento della
variabile Object).
    With Wrd.Selection.Paragraphs.TabStops
        .Add Wrd.Application.CentimetersToPoints(7), wdAlignTabCenter
        .Add Wrd.Application.CentimetersToPoints(9),
wdAlignTabCenter
    End With
Di nuovo, Vladimiro.

 ha scritto nel messaggio 
news:ef55d81c-39a5-42f0...@e4g2000hsg.googlegroups.com...
Un'ultima cosa.
 wdAlignTabCenter  e   wdAlignTabCenter  non sono state dichiarate nel
modulo eppure su queste, anche stando prima di wdLineStyleSingle  o
wdBorderTop non esce l'errore (anche se le tabulazioni sono
leggermente diverse da come uscivano prima dell'inserimento della
variabile Object).
    With Wrd.Selection.Paragraphs.TabStops
        .Add Wrd.Application.CentimetersToPoints(7), wdAlignTabCenter
        .Add Wrd.Application.CentimetersToPoints(9),
wdAlignTabCenter
    End With
Di nuovo, Vladimiro.
[risposta]
Se non ricordo male; quando uso il late-binding utilizzo solo il valore 
numerico delle costanti, non le dichiaro proprio.
Prova a sostituire il nome della costante con il valore corrispondente; ma 
di tutte le costanti che utilizzi nelle istruzioni.
E oltretutto dovresti (se non l'hai già fatto) cambiare dichiarazione nella 
Dim:
(da)
Dim Wrd As Object, Doc As Word.Document
(a)
Dim Wrd As Object, Doc As Object
altrimenti non hai nessun late-binding...
Ciao.
-- 
Sergio MAZZA 


wrote:

Sai che quello preferirebbe OpenSource... almeno così mi ha detto di
dire...!
;-)
Ovviamente FateVobis.
A casa LEGGO.
@Alex

 ha scritto nel messaggionews:ef55d81c-39a5-42f0...@e4g2000hsg.googlegroups.com...

Se le Costanti le dichiari funziona, io però non le chiamo mai come
quelle definite, ma aggiungo un "c_" in modo che no mi dia errore in
fase di progettazione in cui ho abilitato Early con i Riferimenti.
Peraltro sembra che non vengano valorizzate, ma ho il sospetto che non
siano stati tolti i rifeirmenti ... o che il nome possa generare
anomalia.
@Alex

 ha scritto nel messaggio 
news:e442fb56-aa46-4a69...@k2g2000hse.googlegroups.com...
Se le Costanti le dichiari funziona, io però non le chiamo mai come
quelle definite, ma aggiungo un "c_" in modo che no mi dia errore in
fase di progettazione in cui ho abilitato Early con i Riferimenti.
Peraltro sembra che non vengano valorizzate, ma ho il sospetto che non
siano stati tolti i rifeirmenti ... o che il nome possa generare
anomalia.
@Alex
[risposta]
Si lo so'; lo dicevo perché se non leggo male, non ha dichiarato alcune 
costanti che invece utilizza, sempre che il codice inviato sia completo...
Ciao.
-- 
Sergio MAZZA 

 ha scritto nel messaggionews:e442fb56-aa46-4a69...@k2g2000hse.googlegroups.com...

Ciao Sergio, questo è il codice completo con un solo Bookmarks:
Private Sub AnteprimaWord_Click()
Dim Wrd As Object, Doc As Object
Dim Rst As DAO.Recordset
Dim Modello As String, NomeFile As String, i As Integer
Dim Record As String, sql As String
Dim Tbl As String * 1
Dim TotRiga As Currency, Totale As Currency
Dim ReplSel As Boolean
    Me.Requery
    Modello = CurrentDb.Name
    Modello = Left(Modello, Len(Modello) - Len(Dir(Modello))) &
"Stampa_Comunicato.dot"
    On Error Resume Next
    Set Wrd = GetObject(, "Word.Application")
    If Err.Number = 429 Then
        Set Wrd = CreateObject("Word.Application")
    End If
    On Error GoTo 0
    Wrd.Visible = True
    Wrd.Activate
    ReplSel = Wrd.Options.ReplaceSelection
    Wrd.Options.ReplaceSelection = True
    Set Doc = Wrd.Documents.Add(Modello)
    Doc.Activate
 
'----------------------------------------------------------------------------------------------
    Doc.Bookmarks("Girone").Select
    'impostazione delle tabulazioni:
    With Wrd.Selection.Paragraphs.TabStops
        .Add Wrd.Application.CentimetersToPoints(7), wdAlignTabCenter
'G
        .Add Wrd.Application.CentimetersToPoints(9), wdAlignTabRight
'Girone1
    End With
    sql = "SELECT * FROM RisultatoQuery WHERE G=" & Me.G & _
          " ORDER BY G_A_R;"
    Set Rst = CurrentDb.OpenRecordset(sql)
    If Not Rst.BOF Then
        Tbl = Chr$(9)
        'linea orizzontale tra le intestazioni e i dati
        Wrd.Selection.Borders(wdBorderTop).LineStyle =
wdLineStyleSingle
        'spaziatura di 8 punti tra la linea e il testo
        Wrd.Selection.Borders.DistanceFromTop = 8
                Record = Tbl & [G_A_R] & "^" & "  Giornata - " & Tbl &
_
                         "Girone di " & [Girone]
                Wrd.Selection.Font.Bold = True 'abilita il grassetto
                Wrd.Selection.TypeText Record & vbCrLf 'scrivi la riga
                Wrd.Selection.Font.Bold = False 'togli il grassetto
        Rst.Close: Set Rst = Nothing
        'linea orizzontale tra i dati e il totale
        Wrd.Selection.Paragraphs(1).Borders(wdBorderTop).LineStyle =
wdLineStyleDouble
        Wrd.Selection.Paragraphs(1).Borders.DistanceFromTop = 8
    Else
        Wrd.Selection.TypeText "" & vbCrLf
    End If
    Wrd.Options.ReplaceSelection = ReplSel
    Wrd.Application.WordBasic.MsgBox "Esportazione terminata",
"Esportazione dati da Access"
    Set Doc = Nothing
    Set Wrd = Nothing
End Sub
e queste le costanti (per il momento le ho inserite tutte):
Public Const wdWindowStateMaximize As Long = 1
Public Const wdWindowStateMinimize As Long = 2
Public Const wdWindowStateNormal As Long = 0
Public Const wdOrientLandscape As Long = 1
Public Const wdOrientPortrait As Long = 0
Public Const wdToggle As Long = 9999998
Public Const wdPageBreak As Long = 7
Public Const wdAlignTabLeft = 0
Public Const wdTabLeaderSpaces = 0
Public Const wdAlignTabRight = 2
Public Const wdAlignParagraphLeft = 0
Public Const wdAlignParagraphCenter = 1
Public Const wdAlignParagraphRight = 2
Public Const wdAlignParagraphJustify = 3
Public Const wdAlignTabCenter = 1
Public Const wdStory = 6
Public Const wdTextureNone = 0
Public Const wdAuto = 0
Public Const wdBlack = 1
Public Const wdLineStyleNone = 0
Public Const wdLineStyleSingle = 1
Public Const wdLineWidth050pt = 4
Public Const wdBorderLeft = -2
Public Const wdBorderRight = -4
Public Const wdBorderTop=-1
Public Const wdBorderBottom = -3
Public Const wdCharacter = 1
Public Const wdExtend = 1
Come vedi ho inserito "Dim Wrd As Object, Doc As Object" ma l'errore è
sempre e solo sulla linea orizzontale.
Ciao Vladimiro.

 - Mostra testo tra virgolette -
Allora ho risolto in questo modo:
ho eliminato le costanti nel modulo e le ho modificate nel codice
così:
Wrd.Selection.Borders(1).LineStyle = wdLineStyleSingle
non mi dà più errore ma la linea orizzontale non la segna
Wrd.Selection.Borders(1).LineStyle = 1
in questo modo funziona alla grande.
L'1 tra parentesi può variare fino a 6, oltre dà lo stesso errore.
A voi l'eventuale commento.
Vladimiro.


A questo punto alzo le mani.
Ho in totale 13 Bookmarks, variando solo il primo in questo modo:
Wrd.Selection.Borders(1).LineStyle = 0
e lasciando gli altri invariati compreso
Wrd.Selection.Borders(wdBorderTop).LineStyle = wdLineStyleSingle
mi riporta il Word allo stato "originale" comprese le tabulazioni.
Vladimiro.


Pardon, piccolo passo indietro.
Bisogna modificare tutti i Bookmarks in quanto non mi ero accorto che
sulle librerie c'era nuovamente il segno di spunta su Object Library.
Mi raccomando Alessandro C.... non commentare eh! :-)
Vladimiro.

Pardon, piccolo passo indietro.
Bisogna modificare tutti i Bookmarks in quanto non mi ero accorto che
sulle librerie c'era nuovamente il segno di spunta su Object Library.
Mi raccomando Alessandro C.... non commentare eh! :-)
Vladimiro.
Commento io perchè è stata una delle prime cose che ti ho detto di
verificare almeno 10 Post fa ma
siccome non leggi bene...
Ti riporto quanto ho scritto in risposta a Sergio:
    ------------------------------------------------------------------------
---------
    Se le Costanti le dichiari funziona, io però non le chiamo mai come
    quelle definite, ma aggiungo un "c_" in modo che no mi dia errore in
    fase di progettazione in cui ho abilitato Early con i Riferimenti.
    Peraltro sembra che non vengano valorizzate, ma ho il sospetto che non
    siano stati tolti i rifeirmenti ... o che il nome possa generare
    anomalia.
Mah.....


 ---------------------------------------------------------------------------
Allora ti riassumo in breve quello che ho modificato senza dichiarare
le costanti per ottenere lo stesso risultato:
Wrd.Selection.Borders(1).LineStyle = 2   - già ne ho parlato
Wrd.Selection.Font.Color = RGB(0, 128, 0) -  ho usato le combinazioni
in quanto mi restituiva un verde troppo acceso(prima era -
Wrd.Selection.Font.Color = wdColorGreen)
Wrd.Selection.Font.Color = vbBlue  - prima era
Wrd.Selection.Font.Color = wdColorBlue
L'unica cosa che non sono riuscito a fare è centrare i numeri nelle
colonne, cioè se il numero è singolo va bene, mentre se è a due cifre
si sposta a sinistra (all'inizio del campo):
    With Wrd.Selection.Paragraphs.TabStops
        .Add Wrd.Application.CentimetersToPoints(10), wdAlignTabCenter
'Punti
        .Add Wrd.Application.CentimetersToPoints(11.1),
wdAlignTabCenter 'Giocate
        .Add Wrd.Application.CentimetersToPoints(12.2),
wdAlignTabCenter 'Vinte
        .Add Wrd.Application.CentimetersToPoints(13.3),
wdAlignTabCenter 'Pareggiate
        .Add Wrd.Application.CentimetersToPoints(14.4),
wdAlignTabCenter 'Perse
        .Add Wrd.Application.CentimetersToPoints(15.5),
wdAlignTabCenter 'Goal_Fatti
        .Add Wrd.Application.CentimetersToPoints(16.6),
wdAlignTabCenter 'Goal_Subiti
        .Add Wrd.Application.CentimetersToPoints(17.7),
wdAlignTabCenter 'Sanzione_Squadra
    End With
in quanto wdAlignTabCenter naturalmente non me la riconosce.
Che ne pensi, debbo rivedere il tutto?
Fammi sapere.
Vladimiro.

 - Mostra testo tra virgolette -
Ciao Alessandro B, ho visto che stai in linea.
A prescindere che l'automazione va quasi bene (l'ho provata su un
altro computer senza inserire i riferimenti), ci tengo ad avere un tuo
commento; cioè se ho tralasciato qualcosa, se quello che magari volevi
dirmi io l'ho travisato... insomma ho come la sensazione(come dice
Alessandro C) di mostrarmi nei vostri confronti duro di comprendonio.
Non è una bella senzazione...!
Vladimiro.


x Sergio e Alessandro B
Ho riletto con calma il tutto..
Effettivamente Sergio la risposta me l'aveva data:
------------------------------------------------------------------------------------------------------------
Se non ricordo male; quando uso il late-binding utilizzo solo il
valore
numerico delle costanti, non le dichiaro proprio. <--------------
Prova a sostituire il nome della costante con il valore
corrispondente; ma
di tutte le costanti che utilizzi nelle istruzioni.
E oltretutto dovresti (se non l'hai già fatto) cambiare dichiarazione
nella
Dim:
(da)
Dim Wrd As Object, Doc As Word.Document
--------------------------------------------------------------------------------------------------------------
mentre qui mi ero un pò perso:
 
-----------------------------------------------------------------------------------------------------------
Se le Costanti le dichiari funziona, io però non le chiamo mai come
    quelle definite, ma aggiungo un "c_" in modo che no mi dia errore
in
    fase di progettazione in cui ho abilitato Early con i
Riferimenti.
------------------------------------------------------------------------------------------------------------
Adesso mi è tutto più chiaro e così ho risolto anche con le
tabulazioni.
Vi ringrazio Vladimiro.