Newsgroup: it.comp.lang.visual-basic
Titolo: Sincronizzazione Access-Word in VBA

Ho dei problemi a sincronizzare Access con Word da routine evento in VBA.
In una maschera di Access su un pulsante di comando apro un'istanza di Word
con:
  Set oApp = CreateObject("Word.Application")
determino il pathname di un file, pathname$ e lo apro:
  oApp.Documents.Open FileName:=pathnameFile$, piu' vari parametri
a questo punto voglio cercare nel file Word una stringa:
  oApp.Selection.Find.ClearFormatting
    With oApp.Selection.Find
        .Text = stringa$
       piu' altri parametri
    End With
  oApp.Selection.Find.Execute    'trova 1.a occorrenza
e se la trovo voglio cedere il controllo a Word e quindi sospendere la
routine VBA.
Dopo aver lavorato in Word, chiudo il file e adesso vorrei rientrare in
sequenza nella routine VBA e poi ricominciare:
  DoCmd.GoToRecord        'vado sul record successivo
e riciclo su Open File Name
Non so come fare a sospendere la routine Access e poi a riprendere il
controllo, qualcuno mi puo' dare una mano?
grazie da barbi

 controllo, qualcuno mi puo' dare una mano?
Io ho provato a pensare un attimo al tuo problema... poi l'attimo e' finito
(di piu' non posso) e non ho trovato una soluzione. Se non ne sei ancora
venuto fuori perche' non provi a postare nuovamente sintetizzando e
focalizzando il problema in maniera piu' precisa?
--
Ciao.
Maurizio

 wrote in message
882hdb$e0u$3...@nslave1.tin.it...

dunque, dovrei "sospendere la routine Access" e "cedere il controllo a
Word", finora sono riuscito solo a far comparire la videata Word ponendo
oApp.visible=true; poi mi metto a lavorare in Word mentre di là la routine
Access e' sempre "sospesa", alla fine chiudo, sempre manualmente, il file
Word e su questo evento vorrei che la routine access "riprendesse il
controllo". Tutte queste virgolette significano semplicemente che non ho la
minima idea di che istruzioni usare. Esistono per caso i semafori in VB? Mi
pare comunque che si tratti di qc di routine, ossia sincronizzare degli
eventi
barbi


sono riuscito a risolvere il problema, ma in modo veramente rozzo, che spero
qualcuno riuscirà a migliorare:
  Set oApp = CreateObject("Word.Application")      'apro Word
loopfile:      'riciclo della ricerca di una stringa in un insieme di files
........            'determino nome file corrente = pathnameFile$
  oApp.Documents.Open FileName:=pathnameFile$, ConfirmConversions:=False, _
                    '(seguono altri parametri scoccianti)      apro il file
in Word
  oApp.Selection.Find.ClearFormatting
    With oApp.Selection.Find
        .Text = Me!txtStringaOccorr        'cerco una stringa battuta in
questo textbox
                    '(seguono altri parametri scoccianti)
    End With
  oApp.Selection.Find.Execute           'trova 1.a occorrenza della stringa
  Me.Visible = False
  oApp.Visible = True      'faccio comparire la finestra di Word
                   'vado avanti a cercare manualmente altre occorrenze in
Word
                  'e alla fine chiudo manualmente il file e devo riprendere
il controllo in Access
                'per fare ciò vado a testare che non ci sia piu' il file
              ' temporaneo nascosto ~$ecc.   creato da Word, che e'
pathnameFlag$
fineword:                 'aspetto
  Call sSleep(100)              'testo ogni 100 msec
  If Dir(pathnameFlag$, vbHidden) <> "" Then GoTo fineword
  oApp.Visible = False               'il file pathnameFile$ e' stato chiuso
  Me.Visible = True                 'ritorno sulla maschera di Access
avanti:
  DoCmd.GoToRecord        'vado sul record successivo
   GoTo loopfile                'riciclo su un nuovo file
-----------------
e' chiaro che il metodo scelto per aspettare che venga chiuso il file ~$ecc.
e' rozzo, ci vorrebbe qualcosa di più serio...
barbi

 e' rozzo, ci vorrebbe qualcosa di più serio...
Questa e' una riscrittura fatta molto velocemente, probabilmente imprecisa,
giusto per mostrarti come affronterei la cosa. Non avendo, pero', ben
compreso lo scopo e la reale necessita' di questo approccio a un problema
che mi sfugge. Ovvero, e' realmente necessario fare tutto questo "in linea"?
Set oApp = CreateObject("Word.Application")
With rs
  If Not (.BOF And .EOF) Then
    Do Until .EOF
      With oApp
        .Documents.Open ...
        .Selection.Find.clearformatting
        With .Selection.Find
          .Text = Me!txtstringaoccorr
          .Execute
        End With
        Me.Visible = False
        .Visible = True
        Do While Len(Dir(pathnameflag, vbHidden))
          DoEvents
        Loop
        .Visible = False
        Me.Visible = True
      End With
      .MoveNext
    Loop
  End If
End With
--
Ciao.
Maurizio

         Me.Visible = True
cosi' va bene, però quando mi appare Word la finestra non e' abilitata,
ossia la barra dell' applicazione e' grigia e devo cliccarci sopra per poter
lavorare in Word.
Inoltre vorrei inserire un test che permetta all'utente di interrompere la
ricerca tra un file e l'altro, però non vorrei usare un msgbox bloccante
grazie 1000 per il codice! tra l'altro e' elegantissimo senza gli orribili
goto, purtroppo faccio fatica a far quadrare le indentature...
barbi

