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
---------------------------------------------
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.
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
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.
MMmmmm prova a vedere cosa restituisce la proprietà Count
di Borders... c'è qualche cosa che non quadra...
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
Io sono arrivato non sò che altro suggerire.
> P.S. : li hai messi i diffusori acustici al tuo pc?
> Mi dovresti testare una cosa.
Scherzi... non ho scheda audio ed ho staccato il doppino del Buzzer...!
Il mio PC oltre essere ormai BisBisnonno è VERGINE e deve campare ancora
100anni
Non masterizza(non ho nè masterizzatore nè DVD)
Non conosce P2P
Non installo programmi di prova(non ho VM)
Non...
Non...
Appena appena lo accendo per leggere la posta e qualche NG...
;-) sembra uno scherzo... ma è vero.
> Io ce l'ho bianco e profumato mica come Pablitomf!
Cosa...?
> --
> ac
> y-1=x
Spiacente
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.
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.
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
Sai che quello preferirebbe OpenSource... almeno così mi ha detto di
dire...!
;-)
Ovviamente FateVobis.
A casa LEGGO.
@Alex
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
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
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.
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.
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.
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.