Newsgroup: it.comp.appl.access
Titolo: Conversione macro excel in una macro access

Ciao a tutti
avrei seriamente bisogno di una mano per risolvere questo problema:
ho interfacciato un foglio excel con un programma TEE3270 che uso in ufficio 
per potere ricavare da transazione specifiche dei dati che compaiono sullo 
schermo e riportarle in colonne excel.
In poche parole questo foglio excel non fa altro che, all'esecuzione della 
macro, creare un'istanza con la libreria specifica del programma TEE3270 
(TeepsAPi.dll)e lanciare una transazione "MONF" che richiede in posizioni 
ben precise due dati "fermo"e "data"  (colonna A e B del foglio Excel)
ps.PutString 6, 13, fermo
ps.PutString 6, 26, data
e la pressione del tasto INVIO.
Fatto questo sullo schermo del PC mi vengono forniti dati che il programma 
colloca nelle successive colonne C D E F G H (la H la ricava come si puo' 
vedere da altra transazione ma il discorso non cambia).
                 A                               B 
C                     D                  E                               F 
G                                        H
                      Fermo            Data          Targa      Data ACI 
Num Elenco                     RP               CF                  Ditta
Ricavati questi dati il programma tramite la Stampa Unione con Word stamper� 
un report.
Poi cancella il rigo 1 in quanto lavora sempre � solo su un record alla 
volta (mi serve cos�).
La macro che raccoglie i dati e li scrive sul foglio excel � questa:
ho usato molte volte in pi� punti l'istruzione
ps.WaitMap
a causa della lentezza della risposta del sistema.
Ora vorrei fare una cosa ma non la so fare assolutamente:
Convertire questa macro in una macro che lavora solo ed esclusivamente in 
Access.
Lavorare  con una tabella con i seguenti campi
fermo
data
targa
dataaci
elenco
RP
cf
DITTA
Immettere tramite maschera i 2 campi "fermo" e "data"
e far eseguire mediante pulsante associato alla macro tutto il ciclo per 
riempire il primo record della tabella con tutti e 8 i dati.
In poche parole le celle ABCDEFGH diventano campi.
Creare poi un report in access e stampare la pagina per poi cancellare il 
singolo record per passare ad uno successivo.
La macro che funziona perfettamente in mabiente Excel � la seguente:
Dim fermo As String
Dim data As String
Dim targa As String
Dim dataaci As String
Dim elenco As String
Dim RP As String
Dim cf As String
Dim DITTA As String
Sub estraiBIS()
Set ps = CreateObject("TeePsApi.PsApiObj")      ' crea un istanza
    ps.PutString 0, 1, "MONF"
    ps.SendMap 0, 5, "ENTER"
    ps.WaitMap (2)
    ps.WaitMap (2)
    fermo = Cells(2, 1)
    data = Cells(2, 2)
    ps.PutString 6, 13, fermo
    ps.PutString 6, 26, data
    ps.SendMap 3, 75, "ENTER"
    ps.WaitMap (3)
        targa = ps.GetString(6, 53, 7)
        dataaci = ps.GetString(9, 22, 10)
        elenco = ps.GetString(9, 62, 6)
        RP = ps.GetString(10, 70, 10)
        cf = ps.GetString(4, 10, 16)
        ps.WaitMap (3)
    Cells(2, 3) = targa
    Cells(2, 4) = dataaci
    Cells(2, 5) = elenco
    Cells(2, 6) = RP
    Cells(2, 7) = cf
    ps.PutString 0, 1, "mofa"
    ps.SendMap 0, 5, "ENTER"
    ps.WaitMap (3)
    cf = Cells(2, 7)
    ps.PutString 3, 12, cf
    ps.SendMap 1, 5, "ENTER"
    ps.WaitMap (3)
    DITTA = ps.GetString(4, 16, 20)
    Cells(2, 8) = DITTA
fine:
End Sub
Datemi una mano ve ne sar� grata

 Datemi una mano ve ne sar� grata
Grata? Paolo?
A parte gli scherzi; crea una maschera, ci inserisci due caselle di testo 
(chiamale: fermo e data), crea un bottone e gestisci l'evento "su clic" 
inserendoci il tuo codice con le modifiche che ti ho suggerito.
Ovviamente dovrai creare la tabella con i campi e adattare la stringa della 
query di accodamento con la tipologia giusta di campo definita nella 
tabella; per essere pi� chiari: se il campo fermo lo hai definito in tabella 
come un testo, nella stringa dovrai racchiudere i suoi valori con doppi 
apici (") o apice singolo ('):
...
 "Values ('" & me!fermo & "'," & me!data & "," & _
...
occhio con i campi in formato data/ora; dovrai racchiuderli tra # e (se non 
ricordo male) formattarli mm/gg/aaaa.
Dovrai anche, ma penso che lo sai di sicuro, inserire i riferimenti alla 
libreria TeepsAPi.dll.
Altra cosa; non utilizzare nomi riservati ad access: es. data, numero, 
descrizione... pu� generare confusione ad access interpretandoli male...
Ciao.
-- 
Sergio MAZZA 

 ha scritto nel messaggio 
news:4a2f4b6c$0$6839$5fc...@news.tiscali.it...


 Ti faccio sapere OK?
Sono qui...
Ciao.
-- 
Sergio MAZZA


Ho fatto come mi hai detto:
la tabella creata si chiama MONF e i campi al suo interno sono tutti di tipo 
testo.
La macro sembra funzionare benissimo infatti in TEE3270 vedo le varie 
transazioni che si susseguono riportando i dati corretti ma nel momento in 
cui mi f� (credo) la query di accodamento mi esce questo msg:
3075,Errore di sintassi (operatore mancante) nell'espressione della query 
'COLETTA UGO'.
dove coletta ugo � esattamente il nome della DITTA che dovrebbe scrivere nel 
campo della tabella.
Naturalmente non scrive nulla nel record 1.
Ma siccome sono imbranata non ho trovato l'errore.
Vedi se ci capisci qualcosa

 ha scritto nel messaggio 
news:xDaYl.20889$9f6....@twister1.libero.it...


 ciao
Con l'mdb non ci faccio nulla perch� il problema � la costruzione della 
query di accodamento con i valori che vengono ricevuto al momento.
Invia, qui nell'NG, l'istruzione che fa l'accodamento, o tutto il codice che 
stai utilizzando; magari si risolve in poco...
Ciao.
-- 
Sergio MAZZA 

 ha scritto nel messaggio 
news:4a31fdfd$0$691$5fc...@news.tiscali.it...


 ha scritto nel messaggio 
news:8AyZl.23191$9f6....@twister1.libero.it...

Allora niente di piï¿½ semplice che modificare la stringa inserendoci i 
caratteri, indicati rima, che delimitano le stringhe:
...
CurrentDb.Execute "Insert Into monf (fermo, data, targa, dataaci, elenco, 
RP, cf, DITTA) " & _
"Values (" & chr$(34) & Me!FERMO & chr$(34) & "," & _
                chr$(34) & Me!DATA & chr$(34) & "," & _
                chr$(34) & targa & chr$(34) & "," & _
                chr$(34) & dataaci & chr$(34) & "," & _
                chr$(34) & elenco & chr$(34) & "," & _
                chr$(34) & RP & chr$(34) & "," & _
                chr$(34) & cf & chr$(34) & "," & _
                chr$(34) & DITTA & chr$(34) & ")"
...
Ho utilizzato il chr$(34) per evitare un problema con apici o doppi apici...
Ciao.
-- 
Sergio MAZZA 

 Allora niente di pi� semplice che modificare la stringa inserendoci i 


 Ciao
Grazie a te per il riscontro...
Ciao.
-- 
Sergio MAZZA