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
Sub nomeBottone_OnClick()
on error goto errori
Dim ps as Object
> 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
>
> Set ps = CreateObject("TeePsApi.PsApiObj") ' crea un istanza
>
> ps.PutString 0, 1, "MONF"
> ps.SendMap 0, 5, "ENTER"
> ps.WaitMap (2)
>
> ps.WaitMap (2)
>
'--> assegna il valore inserito nelle caselle di testo alle variabili
fermo = Me!fermo
data = me!data
>
> 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)
>
> ps.PutString 0, 1, "mofa"
> ps.SendMap 0, 5, "ENTER"
> ps.WaitMap (3)
> ps.PutString 3, 12, cf
>
> ps.SendMap 1, 5, "ENTER"
>
> ps.WaitMap (3)
>
> DITTA = ps.GetString(4, 16, 20)
>
'--> query di accodamento
CurrentDb.Execute "Insert Into nomeTabella (fermo, data, targa, dataaci,
elenco, RP, cf, DITTA) " & _
"Values (" & me!fermo & "," & me!data & "," & _
targa & "," & dataaci & "," & elenco & "," & RP & ","
& cf & "," & DITTA & ")"
> fine:
set ps = nothing
exit sub
errori:
msgbox err.number & "," & err.description
set ps = nothing
> End Sub
> 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
Lisa mio fratello � Paolo uso il suo account dal suo pc..
Ti faccio sapere OK?
"Sergio MAZZA" <sergi...@tiscali.it> ha scritto nel messaggio
news:4a2f4b6c$0$6839$5fc...@news.tiscali.it...
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
ho provato ad accodare alla tabella solo i due campi FERMO E DATA e funziona
la query di accodamento solo che il VALORE del campo DATA, scrito per
esempio 10/06/2009 me lo converte nella tabella dove il formato DATA � testo
in una bella divisione con questo risultato 2,492522.
ho fatto come hai detto tu mettendo il valore & me!data tra # ma mi da
errore quindi penso che la stessa cosa si verificher� con DATAACI
Sigh
Se vuoi ti mando per email l'mdb tanto � solo 400 kb
ciao
"Paolo" <twi...@libero.it> ha scritto nel messaggio
news:xDaYl.20889$9f6....@twister1.libero.it...
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
Sub Comando10_Click()
On Error GoTo errori
Dim ps As Object
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
Set ps = CreateObject("TeePsApi.PsApiObj") ' crea un istanza
' ps.PutString 0, 1, "MONF"
' ps.SendMap 0, 5, "ENTER"
' ps.WaitMap (2)
'
' ps.WaitMap (2)
'
'--> assegna il valore inserito nelle caselle di testo alle variabili
FERMO = Me!FERMO
DATA = Me!DATA
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)
ps.PutString 0, 1, "mofa"
ps.SendMap 0, 5, "ENTER"
ps.WaitMap (3)
ps.PutString 3, 12, cf
ps.SendMap 1, 5, "ENTER"
ps.WaitMap (3)
DITTA = ps.GetString(4, 16, 20)
'--> query di accodamento
CurrentDb.Execute "Insert Into monf (fermo, data, targa, dataaci, elenco,
RP, cf, DITTA) " & _
"Values (" & Me!FERMO & "," & Me!DATA & "," & _
targa & "," & dataaci & "," & elenco & "," & RP & "," & cf & "," & DITTA &
")"
fine:
Set ps = Nothing
Exit Sub
errori:
MsgBox Err.Number & "," & Err.Description
Set ps = Nothing
End Sub
La tabella MONF ha tutti i campi in formato testo che possono naturalmente
essere cambiati al bisogno.
"Sergio MAZZA" <sergi...@tiscali.it> ha scritto nel messaggio
news:4a31fdfd$0$691$5fc...@news.tiscali.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
Ciao
"Sergio MAZZA" <sergi...@tiscali.it> ha scritto nel messaggio
news:4a373bd2$0$710$5fc...@news.tiscali.it...
> Allora niente di pi� semplice che modificare la stringa inserendoci i
Grazie a te per il riscontro...
Ciao.
--
Sergio MAZZA