Newsgroup: it.comp.lang.visual-basic
Titolo: Visual Basic e VBA (Word)

Qualcuno sa dirmi come fare a passare il valore di una variabile da
un' applicazione VB(6)a un file.dot di word97?
Esempio:
Da vb
voglio passare la stringa "C:\MIO.DB" alla variabile
pubblica di un modulo word di nome dbpath.
Una volta istanziato l'oogetto word riesco ad aprirlo e a passare i
valori ai segnalibiri ma non so se posso individuare la variabile
pubblica e quindi darle il valore dal suo esterno.
Grazie

Elimina NoSpam per scrivermi<
a01b02...@iol.it

 Una volta istanziato l'oogetto word riesco ad aprirlo e a
passare i valori ai segnalibiri ma non so se posso individuare
la variabile pubblica e quindi darle il valore dal suo
esterno.
Per non far tanti discorsi ho provato ad illustrarti una
possibilita` con l'esempio che segue. Spero sia chiaro,
diversamente fatti vivo sul ng.
Il modello "Prova.dot" possiede, in "ThisDocument", una
variabile "g_intProva" che assume il valore 10 ad ogni
apertura di un documento basato su tale modello. In tale
modello la macro "ProvaMostraValore" fa quello che dice il suo
nome.
Il programma VB apre i documenti "Doc1.doc" e "Doc2.doc",
basati sul modello "Prova.dot", legge e visualizza il valore
iniziale della variabile "g_intProva", le assegna un valore
diverso da quello iniziale e diverso per "Doc1.doc" e
"Doc2.doc", quindi esegue la macro "ProvaMostraValore" per
dimostrare che tale variabile ha effettivamente cambiato
valore ed e` diverso per ciascun documento.
' Prova.dot
' =========
'
'
' ThisDocument
' ------------
'
' Option Explicit
'
' Public g_intProva As Integer
'
' Private Sub Document_Open( _
' )
'
'   Let Application.ActiveDocument.g_intProva = 10
'
' End Sub
'
'
' Modulo1
' -------
'
' Option Explicit
'
' Public Sub ProvaMostraValore( _
' )
'
'   With Application.ActiveDocument
'
'     Call MsgBox( _
'         "'g_intProva' = " & .g_intProva _
'       , vbInformation _
'       , .Name)
'
'   End With
'
' End Sub
Option Explicit
Const mc_strDocsPath      As String = "C:\Progetti\"
Const mc_strDoc1Name      As String = "Doc1.doc"
Const mc_strDoc1FullName  As String = mc_strDocsPath _
                                    & mc_strDoc1Name
Const mc_strDoc2Name      As String = "Doc2.doc"
Const mc_strDoc2FullName  As String = mc_strDocsPath _
                                    & mc_strDoc2Name
Sub Main( _
)
Dim blnAppIsNotRunning  As Boolean
Dim blnDoc1IsClosed     As Boolean
Dim blnDoc2IsClosed     As Boolean
Dim objWdApp            As Object   ' Word.Application
Dim objWdDoc1           As Object   ' Word.Document
Dim objWdDoc2           As Object   ' Word.Document
  On Local Error Resume Next
  Set objWdApp = GetObject(, "Word.Application")
  Let blnAppIsNotRunning = Err.Number
  On Local Error GoTo 0
  If blnAppIsNotRunning _
    Then Set objWdApp = CreateObject("Word.Application")
  With objWdApp
    With .Documents
      On Local Error Resume Next
      Set objWdDoc1 = .Item(mc_strDoc1FullName)
      On Local Error GoTo 0
      Let blnDoc1IsClosed = objWdDoc1 Is Nothing
      If blnDoc1IsClosed _
        Then Set objWdDoc1 = .Open(mc_strDoc1FullName)
      On Local Error Resume Next
      Set objWdDoc2 = .Item(mc_strDoc2FullName)
      On Local Error GoTo 0
      Let blnDoc2IsClosed = objWdDoc2 Is Nothing
      If blnDoc2IsClosed _
        Then Set objWdDoc2 = .Open(mc_strDoc2FullName)
      With objWdDoc1
        Call MsgBox( _
            objWdDoc1.Name & ":" _
          & " g_intProva" _
          & " = " & .g_intProva _
          , vbInformation _
          , App.Title)
        Let .g_intProva = 5
      End With
      With objWdDoc2
        Call MsgBox( _
            objWdDoc2.Name & ":" _
          & " g_intProva" _
          & " = " & .g_intProva _
          , vbInformation _
          , App.Title)
        Let .g_intProva = 15
      End With
      Call objWdDoc1.Activate
      Call .Application.Run("ProvaMostraValore")
      Call objWdDoc2.Activate
      Call .Application.Run("ProvaMostraValore")
      With objWdDoc1
        If blnDoc1IsClosed Then Call .Close
      End With: Set objWdDoc1 = Nothing
      With objWdDoc2
        If blnDoc2IsClosed Then Call .Close
      End With: Set objWdDoc2 = Nothing
    End With
    If blnAppIsNotRunning Then Call .Quit
  End With: Set objWdApp = Nothing
End Sub
Resta pero' il problema di fondo: perche' lavorare con
variabili quando si hanno a disposizione, per esempio, i
moduli di classe, la collezione "Variables", gli argomenti da
passare a sub e funzioni...
--
Ciao.
Maurizio

 wrote:
Grazie per l'esempio.
Ci guardo e ti diro' meglio perche' ne avveo bisogno.
Ciao