PDA

View Full Version : [Excel] Esperti di MACRO... AIUTO !!!


Lucky Angus
08-07-2003, 20:15
Ciao a tutti i MACROisti del forum ...


ho realizzato una macro in Excel che molto "semplicemente" importa un file TXT in un nuovo documento secondo alcuni "criteri"


Fin qui tutto funziona correttamente ... il problema è che nella macro ho specificato il nome del file TXT da aprire (es.: "pippo.txt") ... domanda:

:eek: posso fare comparire un bello "sfoglia" all'inizio della macro che mi chiede quale file aprire e poi continuare con le operazioni registrate ? :eek:


Grazie ! :)

a2000
08-07-2003, 21:13
Originally posted by "Lucky Angus"


:eek: posso fare comparire un bello "sfoglia" all'inizio della macro che mi chiede quale file aprire e poi continuare con le operazioni registrate ? :eek:




a2000
08-07-2003, 21:22
Cala Domestica e poi più.

http://www.mclink.it/com/lol/sardegna/g_tour/foto_t/a124.jpg

misterx
09-07-2003, 08:45
Originally posted by "a2000"








va che non è un referendum :D

.........ma vuole sapere com si fa :)

verloc
09-07-2003, 08:57
Originally posted by "a2000"

Cala Domestica e poi più.


Se penso che io sto a schiumare e tu... ti ammazzerei. :mad:

la laurea a luglio è zumpat' dobbiamo rimandare l'incontro... ;)

tas
09-07-2003, 10:11
Aggiungi al form o al foglio un controllo "Microsoft Common Dialog Control". Nel codice associato al pulsante sfoglia scrivi:
With CommonDialog1
.CancelError = True 'genera un errore se si preme Annulla
.Filter = "File di testo (*.txt)|*.txt|Tutti i file|*.*" 'tipi di file da aprire
.FilterIndex = 1 'filtro predefinito

On Error Resume Next
.ShowOpen 'apre la finestra di dialogo
.If Err.Number <> 0 Then 'se l'utente ha premuto Annulla
'fai qualcosa
Exit Sub
End If

'nella proprietà FileName trovi il nome del file
MsgBox .FileName
End With

atragon
09-07-2003, 11:43
Non era semplicemente così:

Application.Dialogs(xlDialogOpen).Show ("*.*")

per far comparire la finestra di dialogo per la scelta di un file all'interno di una macro? Se vuoi a ("*.*") sostituisci ("*.txt")... sorry se non ho capito bene il problema....

tas
09-07-2003, 12:16
Originally posted by "atragon"

Non era semplicemente così:

Application.Dialogs(xlDialogOpen).Show ("*.*")

per far comparire la finestra di dialogo per la scelta di un file all'interno di una macro? Se vuoi a ("*.*") sostituisci ("*.txt")... sorry se non ho capito bene il problema....


Application.Dialogs, da quanto ne ho capito io, serve per visualizzare le finestre di dialogo di Excel. In effetti con la costante xlDialogOpen apri la finestra di apertura file, ma il file richiesto deve essere una cartella di Excel, non un file qualunque. Quel codice corrisponde pressapoco al menu File/Apri di Excel. Invece Lucky Angus vuole aprire un file di testo *.TXT dal quale importare informazioni nel foglio di lavoro.

a2000
09-07-2003, 12:37
Application.GetOpenFilename



Metodo GetOpenFilename[b]

Visualizza la finestra di dialogo standard Apri e consente di specificare un nome di file senza aprire effettivamente alcun file.

Sintassi

espressione.GetOpenFilename(FileFilter, FilterIndex, Title, ButtonText, MultiSelect)
....

[/size]

a2000
09-07-2003, 12:40
Originally posted by "verloc"


Se penso che io sto a schiumare e tu... ti ammazzerei. :mad:

la laurea a luglio è zumpat' dobbiamo rimandare l'incontro... ;)

uaglio' s' mitc' !

andiamo a Sharm a novembre a festeggiare il nuovo ingegnere civile !

atragon
09-07-2003, 13:18
--Application.GetOpenFilename

Ho provato un codicillo volante siffatto:

Application.Dialogs(xlDialogOpen).Show ("*.txt")
Application.GetOpenFilename ("Text Files (*.txt), *.txt")

ma non mi pare vi siano differenze sostanziali nel comportamento dei due comandi... cosa cambia? dov'è l'inghippo?

atragon
09-07-2003, 13:22
Ah...ora ho fatto una prova più approfondita ..... mea culpa....però....GetOpenFileName non apre il file per l'importazione o sbaglio?

a2000
09-07-2003, 13:31
atragon ma scopi ogni tanto ?


nel senso d:

Scope
Program entities have the following kinds of scope (as shown in the table below):

Global
Entities that are accessible throughout an executable program. The name of a global entity must be unique. It cannot be used to identify any other global entity in the same executable program.

Scoping unit (Local scope)
Entities that are declared within a scoping unit. These entities are local to that scoping unit. The names of local entities are divided into classes (see the table below).

A scoping unit is one of the following:

A derived-type definition
A procedure interface body (excluding any derived-type definitions and interface bodies contained within it)
A program unit or subprogram (excluding any derived-type definitions, interface bodies, and subprograms contained within it)

....
[/size]

atragon
09-07-2003, 14:35
Il problema è che a volte leggo poco :D ora è chiaro, thx.

Lucky Angus
10-07-2003, 20:03
Grazie a tutti per le info ... ;)

CE L'HO FATTA !!! :D


Adesso devo un'attimo mettere a posto un paio di cose tipo: clicco sul bottone ... si apre la finestra di dialogo che mi fa scegliere il file da aprire ... appena premo annulla mi da un messaggio di errore ... cosa devo aggiungere per far si che quando prema annulla si chiuda il processo senza errori ? :confused:

a2000
10-07-2003, 20:32
????[/siz]

ragazzi che fatica !


Esempio di metodo GetOpenFilename[b]
Questo esempio visualizza la finestra di dialogo Apri con il filtro file impostato a file di testo. Se l'utente sceglie un nome di file, il codice visualizzerà quel nome file in una finestra di messaggio.

fileToOpen = Application.GetOpenFilename("Text Files (*.txt), *.txt")
If fileToOpen <> False Then
MsgBox "Open " & fileToOpen
End If[/size]

a2000
10-07-2003, 20:38
dicono a Milano:
" .... è più facile metterglielo in c++o che metterglielo in testa"

Lucky Angus
10-07-2003, 23:30
Grazie "a2000" ... domani ci provo ! ;)


Comunque non ti inca**are ... mi dicevano che voi programmatori siete una brutta razza ! :D

a2000
11-07-2003, 09:10
don't worry ! :)

[/siz]

cionci
11-07-2003, 10:53
Originally posted by "Lucky Angus"

mi dicevano che voi programmatori siete una brutta razza ! :D
No !!! E' a2000 la brutta razza... Noi programmatori siamo una bella razza ;)

a2000
11-07-2003, 14:06
"Noi programmatori ... " ????? http://forum.hwupgrade.it/faccine/44.gif

caro cionci tu scambi "cazzi per equinozi" !

http://forum.hwupgrade.it/faccine/46.gif

cionci
11-07-2003, 19:20
Originally posted by "a2000"

"Noi programmatori ... " ????? http://forum.hwupgrade.it/faccine/44.gif
Io mi considero "programmatore"...perchè sbaglio ?!?!?!

a2000
11-07-2003, 20:59
no, no ... è che anche misterx quando gli passa l'effetto del Serenase si considera un orologio a cucù ...



VALIUM TAVOR SERENASE
il valium mi rilassa
il serenase mi stende
il tavor mi riprende
c'è chi mi dà energia
e chi me la porta via
e voi cosa volete?
di che cosa vi fate?
dov'è la vostra pena?
qual'è il vostro problema?
perchè vi batte il cuore?
per chi vi batte il cuore?
meglio un medicinale
o una storia infernale?
meglio giornate inerti
o dei capelli verdi?
eppur tutto va bene
va proprio tutto bene
manca un po' di appetito e
il valium per dormire l'ho finito
"quando ci penso vorrei tornare
dalla mia bella al casolare
Emilia mia Emilia in fiore
tu sei la stella tu sei l'amore"
e voi cosa volete?
di che cosa vi fate?
dov'è la vostra pena?
qual'è il vostro problema?
perchè vi batte il cuore?
per chi vi batte il cuore?

misterx
25-07-2003, 13:54
Originariamente inviato da a2000
no, no ... è che anche misterx quando gli passa l'effetto del Serenase si considera un orologio a cucù ...


VALIUM TAVOR SERENASE
il valium mi rilassa
il serenase mi stende




:confused:



ce l'hai un pò del perditempo però :sofico:



:O io non sono un programmatore :mad:

polpy2
08-01-2008, 12:21
Ciao Lucky Angus,

io ho il tuo stesso problema (quello che tu hai risolto circa 5 anni fa).
Puoi darmi indicazioni su come risolverlo?

Ti spiego:
ho capito che con

fileToOpen = Application.GetOpenFilename("Text Files (*.txt), *.txt")

apro un file di testo
e con

With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\testo_prova2.txt", _
Destination:=Range("$T$7"))
.Name = "testo_prova2_14"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False

importo il file in una casella di testo.

Il problema è collegare le due azioni:
come faccio a dire all'"Add connection" che il file da aprire è quello inserito in "fileToOpen" e non è sempre "testo_prova2.txt"?

Grazie per il tuo aiuto.

Ciao