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

macro automatica richiamata da IBM Iseries (as/400)

692 views
Skip to first unread message

Pardossi@discussions.microsoft.com Marzio Pardossi

unread,
May 22, 2009, 11:23:17 AM5/22/09
to
Ciao a tutti, premesso che sono un programmatore RPG e conosco poco excel,
avrei questo problema: un utente AS400 premendo un tasto di comando su un
applicativo fatto da me, (in RPG) che gli visualizza i venduti mensili di un
articolo su 24 mesi, gli si dovrebbe aprire excel facendogli vedere gli
stessi dati in forma di grafico (quantità sulle ordinate e mesi sulle
ascisse). Come faccio a fare una macro che oltretutto parta automaticamente?
Bella domanda vero?? Tenete conto che da AS400 io esporto i miei dati in un
file .csv e lo metto in una cartella condivisa.
Ho fatto qualche prova e lanciando da AS400 il comando STRPCCMD puntando al
.csv mi si apre excel e mi importa i miei dati nel foglio1. Purtroppo se
cambio articolo visualizzato e sparo nuovamente il file csv mi si apre una
nuova copia di excel con i nuovi dati mensili, ma il brutto è che me li trovo
anche nell'altra copia quella del primo articolo in coda e cioè dalla riga 26
alla 48.... spero di essermi spiegato bene...

eliano

unread,
May 22, 2009, 6:50:01 PM5/22/09
to

"Marzio Pardossi" ha scritto:

Ciao Marzio.
Il gruppo: http://groups.google.com/group/it.comp.as400/topics dovrebbe
essere più indicato per questo tipo di domanda perchè dovresti trovarci
utenti che usano AS/400 + Excel.

Per quanto riguarda il tuo tipo di domanda, non si tratta di "Una bella
domanda" ma solo la domanda di uno che, per tua stessa ammissione, conosce
poco Excel.
Dal momento che "nessuno nasce imparato", forse sarebbe il caso di prenderci
un po' la mano; per fare questo hai molte possibilità:

La guida in linea del VBE contenuta in Excel (Alt+F11 e clicca sul punto
interrogativo)

http://ennius.interfree.it/ (vecchio e nuovo sito)
http://excelvba.altervista.org/
dove puoi trovare qualche indicazione per la scrittura di macro

Questo NG dove puoi cercare "qualche" discussione in merito a "routine di
evento"
(sono diverse centinaia)

il sito di fernando: www.prodomosua.eu per quanto riguarda Grafici e non solo

Per quanto riguarda l'accodamento dei dati nel file .csv, il STRPCCMD è un
comando Dos che dovrebbe contenere nei vari parametri anche il nome del file
in output; per i dati di un nuovo articolo prova a cambiare il nome di quel
file oppure a rinominare sul PC il file .csv relativo al primo articolo.

Leggi, prova, expertizzati (modello Gassman) e quando hai capito come
funziona, se hai problemi, chiedi.
Saluti
Eliano

Marzio Pardossi

unread,
May 25, 2009, 3:43:01 AM5/25/09
to

"eliano" ha scritto:

OK Grazie Eliano, Avevo bisogno di qualcuno che mi indirizzasse nella
strada giusta... vedo di cavarci le gambe con i link che mi hai dato, così
con questa scusa vedo di imparare anche un po' di VBE....

eliano

unread,
May 25, 2009, 6:38:01 PM5/25/09
to

"Marzio Pardossi" ha scritto:


> OK Grazie Eliano, Avevo bisogno di qualcuno che mi indirizzasse nella
> strada giusta... vedo di cavarci le gambe con i link che mi hai dato, così
> con questa scusa vedo di imparare anche un po' di VBE....

Ciao Marzio e grazie per il riscontro.
Vai tranquillo e considera che questo NG è grande; comunque il Vba (Visual
Basic for Application) è una parte del linguaggio VB prestato ad Office ed il
Vbe non è il suo profeta, ma solo il suo Editor.:-))
Saluti
Eliano

Marzio Pardossi

unread,
Jun 1, 2009, 10:04:02 AM6/1/09
to

"eliano" ha scritto:

Marzio Pardossi

unread,
Jun 1, 2009, 10:27:01 AM6/1/09
to

"eliano" ha scritto:

Eccomi di nuovo..... Dopo alcuni giorni di "studio approfondito" del VBA
sono riuscito ad ottenere quello che volevo creando una macro di questo tipo:

Sub Auto_Open()
'
' Auto_Open Macro
' macro automatica x grafico
'
ActiveWorkbook.Sheets("foglio1").Activate
Cells.Select
Selection.ClearContents
Selection.FormatConditions.Delete
Range("A1:B25").Select
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:="ODBC;DSN=SIM;", _
Destination:=Range("$A$1")).QueryTable
.CommandText = Array( _
"SELECT TR0001.MESEXY, TR0001.QTAVXY" & Chr(13) & "" & Chr(10) &
"FROM (mio iSeries).SGA_SIM_U.TR0001 TR0001")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = "Tabella_Query_da_SIM"
.Refresh BackgroundQuery:=False
End With
End Sub


Quando dall'applicativo rpg dell'iSeries lancio l'apertura del file .xlsm
parte automaticamente questa macro che fa il refresh dei dati dal file di
database dell'iSeries tramite ODBC e non appena completata l'acquisizione
emette il
grafico dell'andamento delle vendite sui vari mesi.

Ora, volendo ulteriormente affinare questa macro chiedo:
come si può fare in maniera che se da iSeries l'utente sceglie un nuovo
articolo (e quindi modificando il contenuto del file che verrà letto col
query) i dati e la rappresentazione grafica anzichè sostituire il precedente
nel foglio1 mi vada nel foglio2, poi nel 3 e così via...?
Questo sarebbe utile all'utente per poter fare dei confronti tra l'andamento
del primo articolo che aveva selezionato e quello successivo, specialmente se
si
tratta di articoli della stessa categoria merceologica.

Spero di essermi spiegato sufficientemente..... Un caro saluto a tutti

eliano

unread,
Jun 1, 2009, 5:49:01 PM6/1/09
to

"Marzio Pardossi" ha scritto:

Ciao Marzio.
Non sono la persona più indicata (non mi interessano i grafici e la mia
competenza in Vba è solo artigianale), cimunque per rispondere alla lettera
della tua domanda, prova:

Sub Auto_Open()
Dim pippo As String
pippo = InputBox("digitare il nome del foglio che riceverà i dati")
ActiveWorkbook.Sheets(pippo).Activate
End Sub

Non è una soluzione ottimale e ritengo che dovresti aggiungere nel file un
foglio diverso per ogni articolo riportando su quello i dati del grafico,
oltre a prendere nota (sul primo foglio = situazione fogli utilizzati ?) dei
vari fogli che via via adoperi nell'importazione dei dati.
Considera inoltre che, oltre alla routine Auto_Open esistono anche routines
di evento specifiche, per le quali prova a cercare sulla guida, ad esempio:
evento open
Saluti
Eliano
P.S. Se quella è la prima macro Vba che scrivi, complimenti e alla via così,
come disse Colombo. :-))!
Prova a fare una ricerca su questo NG o con Google

eliano

unread,
Jun 1, 2009, 8:57:01 PM6/1/09
to

"eliano" ha scritto:

Ciao Marzio.
Rileggendo il post vedo che ne manca un bel pezzo, per cui lo completo.

Oltre a cercare su questo NG o con Google i vari argomenti che ti possono
interessare, per l'aggiunta di un foglio una soluzione potrebbe essere questa:

Copia nel Modulo ThisWorkbook:

Private Sub Workbook_Open()
Call prova
End Sub

Copia in un Modulo Standard, ad esempio Modulo1:
'<------------------------------
Public Sub prova()
Dim WB As Workbook
Dim SH As Worksheet


Dim pippo As String
pippo = InputBox("digitare il nome del foglio che riceverà i dati")

Set WB = Workbooks("GraficiArticolo.xls") '<<--- da cambiare
With WB
Set SH = .Worksheets.Add(After:=.Sheets(.Sheets.Count))
End With
ActiveSheet.Name = pippo

'-inserisci qui la tua macro; il foglio è già attivo

End Sub
'----------------------------->
Chiudi il file, salvalo e riaprilo: dovrebbe apparirti l'InputBox (sarebbe
da prevedere comunque il test sull'univocità del nome del foglio)

Facci sapere, magari aprendo un nuovo thread che risulterebbe così più
visibile.
Eliano

0 new messages