Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

attivare via codice vba il riferimento a tutte le versioni di Microsoft Word xx.x Object Library

135 views
Skip to first unread message

Lucky

unread,
Oct 12, 2014, 4:34:15 AM10/12/14
to
Buongiorno a tutti,
avrei bisogno di un aiuto circa il seguente problema:
ho realizzato un applicativo che gira su vari PC sui quali sono installate
le varie versioni di Microsoft Office (2003, 2007, 2010 e 2013).
Tramite il prezioso aiuto del Newsgroup, ho il codice vba per attivare e
rimuovere i riferimenti a Microsoft Word 11.0 Object Library:
================================================================

Per aggiungere la Reference di Word ecco il codice
================================================================
Private Sub Command15_Click()
Dim i As Reference
For Each i In Application.References
If i.Name = "Word" Then
Exit Sub
End If
Next

' Aggiunge Word_Reference se non esiste
'Application.References.AddFromFile _
"C:\Program Files\Microsoft Office\office11\MSWORD.OLB"

Application.References.AddFromGuid _
"{00020905-0000-0000-C000-000000000046}", 8, 3

End Sub
================================================================

================================================================
Per rimuovere la Reference di Word ecco il codice
================================================================

Private Sub Command28_Click()
Dim i As Reference
For Each i In Application.References
If i.Name = "Word" Then
GoTo RemoveRef
End If
Next
Exit Sub

RemoveRef:
Application.References.Remove i

End Sub
================================================================

Ora vorrei poter disporre del codice vba per attivare (in un'unica routine)
e rimuovere (in un'unica routine) il codice di tutte le versioni di Word sui
vari PC.
Per cortesia, potrei avere un aiuto circa il codice da utilizzare ?
Grazie a tutti.
Un saluto
Lucky


Bruno Campanini

unread,
Oct 12, 2014, 6:45:02 PM10/12/14
to
Lucky laid this down on his screen :
La subroutine che t'ho inviato dovrebbe valere per
l'eliminazione di Reference Word, di qualunque versione si tratti.

Per l'inserimento invece è necessario conoscere gli specifici
parametri GUID+Major+Minor oppure l'esatto nome del file.
O gli uni o gli altri aggiungi poi alla routine, facendo in modo
che ti venga chiesto quale versione inserire.
Con la solo parola "Word" non puoi aggiungere nulla.

Bruno

Lucky

unread,
Oct 13, 2014, 3:48:55 AM10/13/14
to
Grazie Bruno per i tuoi consigli che ho immediatamente applicato.
Un'ultima domanda: al fine di evitare che nella routine mi venga chiesto
quale versione inserire, avrei pensato di scriverla cosě.
Secondo te, potrebbe andar bene ?

'=======================================================
Private Sub Comando2386_Click()
On Error Resume Next

Dim i As Reference
For Each i In Application.References
If i.Name = "Word" Then
Exit Sub
End If
Next

'Microsoft Word versione 2003 - Aggiunge Word_Reference se non esiste
'Application.References.AddFromFile "C:\Program Files\Microsoft
Office\office11\MSWORD.OLB"
Application.References.AddFromGuid _
"{00020905-0000-0000-C000-000000000046}", 8, 3

'Microsoft Word versione 2007 - Aggiunge Word_Reference se non esiste
'Application.References.AddFromFile "C:\Program Files\Microsoft
Office\office12\MSWORD.OLB"
Application.References.AddFromGuid _
"{00020905-0000-0000-C000-000000000046}", 8, 4

'Microsoft Word versione 2010 - Aggiunge Word_Reference se non esiste
'Application.References.AddFromFile "C:\Program Files\Microsoft
Office\office14\MSWORD.OLB"
Application.References.AddFromGuid _
"{00020905-0000-0000-C000-000000000046}", 8, 5

'Microsoft Word versione 2013 - Aggiunge Word_Reference se non esiste
'Application.References.AddFromFile "C:\Program Files\Microsoft
Office\office15\MSWORD.OLB"
Application.References.AddFromGuid _
"{00020905-0000-0000-C000-000000000046}", 8, 6

Exit_Comando2386_Click:
Exit Sub

End Sub
'=======================================================
Grazie mille
Saluti
Lucky

>> Ora vorrei poter disporre del codice vba per attivare (in un'unica
>> routine) e rimuovere (in un'unica routine) il codice di tutte le versioni
>> di Word sui vari PC.
>> Per cortesia, potrei avere un aiuto circa il codice da utilizzare ?
>> Grazie a tutti.
>> Un saluto
>> Lucky
>
> La subroutine che t'ho inviato dovrebbe valere per
> l'eliminazione di Reference Word, di qualunque versione si tratti.
>
> Per l'inserimento invece č necessario conoscere gli specifici

Bruno Campanini

unread,
Oct 13, 2014, 4:33:16 AM10/13/14
to
Lucky presented the following explanation :
> Grazie Bruno per i tuoi consigli che ho immediatamente applicato.
> Un'ultima domanda: al fine di evitare che nella routine mi venga chiesto
> quale versione inserire, avrei pensato di scriverla così.
> Secondo te, potrebbe andar bene ?
Così facendo verrebbero installate tutte le Reference
che possono coesistere e verrebbe generato errore alla
volta di quelle che non possono coesistere.
Non mi sembra una buona soluzione.

Poi un'altra cosa: con i parametri Guid installi una reference
il cui file esista già registrato nel PC.
Ma questo file normalmente non esiste sul PC nel quale
la Reference cui si riferisce non è installata.
Detto file viene installato dalla versione di Office
al momento dell'installazione.

Non puoi con un unico file. sempre uguale per tutti, risolvere
il problema che ti sei posto.

1 - devi copiare il file della Reference che vuoi installare
sul quel determinato PC
2 - riportare il nome e il path corretti nella routine VBA
3 - eseguire l'installazione usando appunto il file name
e non i parametri Guid.

Bruno

BFS

unread,
Oct 13, 2014, 5:15:31 AM10/13/14
to
Il 13/10/2014 10:33, Bruno Campanini ha scritto:
> Lucky presented the following explanation :
>> Grazie Bruno per i tuoi consigli che ho immediatamente applicato.
>> Un'ultima domanda: al fine di evitare che nella routine mi venga
>> chiesto quale versione inserire, avrei pensato di scriverla cosᅵ.
>> Secondo te, potrebbe andar bene ?
> Cosᅵ facendo verrebbero installate tutte le Reference
> che possono coesistere e verrebbe generato errore alla
> volta di quelle che non possono coesistere.
> Non mi sembra una buona soluzione.
>
> Poi un'altra cosa: con i parametri Guid installi una reference
> il cui file esista giᅵ registrato nel PC.
> Ma questo file normalmente non esiste sul PC nel quale
> la Reference cui si riferisce non ᅵ installata.
> Detto file viene installato dalla versione di Office
> al momento dell'installazione.
>
> Non puoi con un unico file. sempre uguale per tutti, risolvere
> il problema che ti sei posto.
>
> 1 - devi copiare il file della Reference che vuoi installare
> sul quel determinato PC
> 2 - riportare il nome e il path corretti nella routine VBA
> 3 - eseguire l'installazione usando appunto il file name
> e non i parametri Guid.
>
> Bruno


perchᅵ complicarsi cosi la vita quando con il late-binding si dormirebbe
tranquilli?


ciao
BFS

Simone Calligaris

unread,
Oct 13, 2014, 5:36:35 AM10/13/14
to

"Lucky"

(cut)

> Ora vorrei poter disporre del codice vba per attivare (in un'unica
> routine) e rimuovere (in un'unica routine) il codice di tutte le versioni
> di Word sui vari PC.



... come volevasi dimostrare: usa l'associazione tardiva.

Saluti.


Lucky

unread,
Oct 14, 2014, 8:55:10 AM10/14/14
to
Scusate il ritardo con cui Vi rispondo, ma ho dovuto "alletterarmi" circa il
consiglio di risolvere il problema attraverso il "late-binding".
Sarei giunto alla seguente soluzione, per la quale chiedo, cortesemente, il
vostro consenso. Il codice da me prodotto per arrivare ad avere un file di
word con campi in unione contenuti in una tabella e scaricati in un file
Modello di Word � il seguente:
'=============================================================================
Private Sub Comando2232_Click()
On Error Resume Next

DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70

Dim myApp As Object
Dim mydoc As Object

Set myApp = CreateObject("Word.Application")
Set mydoc = myApp.Documents.Add(CurrentProject.Path &
"\Documenti\InformativaClienti.dot")

myApp.Workbooks.Open mydoc

Dim myData As DAO.Database, myRec As DAO.Recordset
Set myData = CurrentDb
Set myRec = myData.OpenRecordset("SELECT * FROM [Anagrafica
Professionista]")

mydoc.FormFields("Primariga").Result = myRec![Primariga]
mydoc.FormFields("Secondariga").Result = myRec![Secondariga]
mydoc.FormFields("Terzariga").Result = myRec![Terzariga]
mydoc.FormFields("Quartariga").Result = myRec![Quartariga]
mydoc.FormFields("Quintariga").Result = myRec![Quintariga]
mydoc.FormFields("Responsabile").Result =
myRec![ResponsabileTrattamentoDati]
mydoc.FormFields("Primariga2").Result = myRec![Primariga]
mydoc.FormFields("Secondariga2").Result = myRec![Secondariga]
mydoc.FormFields("Terzariga2").Result = myRec![Terzariga]

mydoc.FormFields("NOMINATIVO").Result = Forms!SchedeClienti.[NOMINATIVO]
mydoc.FormFields("NOMINATIVO2").Result = Forms!SchedeClienti.[NOMINATIVO]
mydoc.FormFields("INDIRIZZO").Result = Forms!SchedeClienti.[INDIRIZZO]
mydoc.FormFields("CAP").Result = Forms!SchedeClienti.[CAP]
mydoc.FormFields("LOCALITA").Result = Forms!SchedeClienti.[LOCALITA]
mydoc.FormFields("PROVINCIA").Result = Forms!SchedeClienti.[PROVINCIA]

myApp.Visible = True

myRec.Close
Set myData = Nothing
Set myRec = Nothing
Set mydoc = Nothing
Set myApp = Nothing

End Sub
'=============================================================================

Che ne pensate ?
Le prove che ho fatto hanno dato esito positivo.
Devo forse tenere conto di altro ?
Grazie a tutti Voi.
Saluti
Lucky



"BFS" <b...@tin.it> ha scritto nel messaggio
news:m1g57h$jb0$1...@speranza.aioe.org...
> Il 13/10/2014 10:33, Bruno Campanini ha scritto:
>> Lucky presented the following explanation :
>>> Grazie Bruno per i tuoi consigli che ho immediatamente applicato.
>>> Un'ultima domanda: al fine di evitare che nella routine mi venga
>>> chiesto quale versione inserire, avrei pensato di scriverla cos�.
>>> Secondo te, potrebbe andar bene ?
>> Cos� facendo verrebbero installate tutte le Reference
>> che possono coesistere e verrebbe generato errore alla
>> volta di quelle che non possono coesistere.
>> Non mi sembra una buona soluzione.
>>
>> Poi un'altra cosa: con i parametri Guid installi una reference
>> il cui file esista gi� registrato nel PC.
>> Ma questo file normalmente non esiste sul PC nel quale
>> la Reference cui si riferisce non � installata.
>> Detto file viene installato dalla versione di Office
>> al momento dell'installazione.
>>
>> Non puoi con un unico file. sempre uguale per tutti, risolvere
>> il problema che ti sei posto.
>>
>> 1 - devi copiare il file della Reference che vuoi installare
>> sul quel determinato PC
>> 2 - riportare il nome e il path corretti nella routine VBA
>> 3 - eseguire l'installazione usando appunto il file name
>> e non i parametri Guid.
>>
>> Bruno
>
>
> perch� complicarsi cosi la vita quando con il late-binding si dormirebbe
> tranquilli?
>
>
> ciao
> BFS


0 new messages