sto scrivendo una subroutine in VB 6.5 per Excel 2000. Leggo un array
di stringhe da un file corrispondenti ai nomi di alcuni casi che
l'utente può scegliere. Voglio creare una maschera con dei radio
button (forse in VB si chiamano Option Button?) per permettere
all'utente di scegliere uno solo fra i casi letti nel file. Il numero
di radio button dunque è variabile (sempre pochi, dell'ordine di una
decina) ed anche la stringa di fianco ai button. Mi date una mano?
Tenete conto che sono un quasi-neofita-autodidatta, e che la cosa non
dev'essere particolarmente robusta, è un'applicazione che sto
scrivendo per me e per dei colleghi qui in azienda ma per uso interno,
non si tratta di roba che va venduta a un cliente! Grazie mille,
ciao
Sergio
Quando dici "VB 6.5 per Excel 2000" non sono sicuro di capire a che ti
riferisci, quindi do per scontato che tu parli di VBA integrato in
Excel.
La cosa più semplice, nel caso che descrivi, è usare un banale
ListBox, invece di una serie di Option... lo carichi con le stringhe,
e lui già per sua natura prevede un numero variabile di elementi e la
possibilità di selezionarne uno solo, per default.
Si può fare anche come chiedi tu, generando i controlli Option
dinamicamente, però è un po' più complicato e devi anche eventualmente
preoccuparti di visualizzarli correttamente, non sapendo a priori lo
spazio che occupano sulla finestra.
Sì, sarà questo: io ho solo letto i nomi delle versioni di VB ed Excel
nelle finestre Help>About Microsoft Excel e Help>About Microsoft
Visual Basic.
>
> La cosa più semplice, nel caso che descrivi, è usare un banale
> ListBox, invece di una serie di Option... lo carichi con le stringhe,
> e lui già per sua natura prevede un numero variabile di elementi e la
> possibilità di selezionarne uno solo, per default.
> Si può fare anche come chiedi tu, generando i controlli Option
[..]
No, no, va benissimo la maniera semplice anche perchè già così non sto
capendo cosa devo fare. Ho provato a leggere l'help in Visual Basic
per ListBox, Microsoft Forms Object Model Overview, Controls, ecc. ma
non mi è chiaro cosa devo scrivere nella Sub . Ti faccio un esempio,
anche per farti capire cosa so e cosa non so: se volessi usare la
funzione MsgBox per mostrare i nomi dei casi letti, scriverei
MsgBox Prompt:="Test cases found in file: " & Path & '" are: "
& TestCases, Title:="Test Cases"
dove Path è una string che contiene il path del file letto, e
TestCases è un array di stringhe. Questa cosa non funziona perchè non
posso passare un array di stringhe in Prompt, quindi dovrei fare una
cosa del genere concatenare tutte le stringhe contenute nell'array
TestCases (magari separate da spazi!) in un'unica stringa, e passare
quella in Prompt. Comunque, anche se faccio così, ancora non ho dato
all'utente la possibilità di selezionare un Test Case. Quindi subito
dopo uso la funzione InputBox:
ChosenTestCase = InputBox _
(Prompt:="Choose one of the test cases found:")
Ma è una maniera davvero brutta di fare 'sta cosa. Posso unificare i
due passaggi con questa ListBox? Che istruzioni devo usare? L'help mi
dice di mettere una ListBox nelle Declarations di una form, ma cos'è
questa form? Un'altra unità di programma? Come la rendo accessibile
alla mia Sub? Grazie mille x l'aiuto,
ciao
Sergio
La form è il termine con cui VB chiama una finestra disegnata da te;
in Excel puoi crearla aprendo l'editor di VB e scegliendo "Inserisci
UserForm"
Ora, se proprio non hai mai lavorato con l'editor di Vb in questo
modo, con finestre, oggetti ed eventi, è un po' complicato spiegarti
tutto a parole... ho fatto un piccolo esempio che fa una cosa simile a
quella che chiedi (esegui "macro1" per una dimostrazione, api invece
l'editor di VB, col l'help sottomano, per studiare il codice); vedi un
po' se ti aiuta
Lo puoi scaricare qui: http://www.megaupload.com/?d=S3ZI62WI
Ciao, Luca,
grazie mille x la risposta, sei gentilissimo: dopo aver avuto certe
inqualificabili risposte su altri ng italiani, iniziavo a pensare che
solo su quelli inglesi ci fosse gente davvero desiderosa di aiutare i
principianti....Io non riesco a scaricare la macro perchè il firewall
della mia azienda blocca il link. Potresti spedirmi la macro x mail?
L'indirizzo è valido. Spero di poter ricambiare in qualche modo!
Ciao
Sergio
grazie mille x la risposta, sei gentilissimo: dopo aver avuto certe
inqualificabili risposte su altri ng italiani, iniziavo a pensare che
solo su quelli inglesi ci fosse gente davvero desiderosa di aiutare i
principianti....
*************************************************
Mostriamole le *inqualificabile risposte*, no?
http://groups.google.it/group/microsoft.public.it.office.excel/browse_thread/thread/90b5b8a5b4eb9529
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
http://www.maurogsc.eu/
http://social.microsoft.com/Forums/it-IT/excelit/threads
Ciao, Luca,
grazie per avermi spedito il file! Ho capito il tuo esempio e lo sto
adattando al mio caso, ma ho un problema: io non vorrei che la
UserForm leggesse lei stessa il file, poichè è molto complesso ed ho
già fatto il parsing nel programma principale (che corrisponderebbe al
tuo Macro1), ergo vorrei passare direttamente alla UserForm i test
case fra cui l'utente può scegliere, e poi passare al main la scelta
fatta dall'utente. Ho provato a fare così: ChoseOpCond sarebbe la tua
variabile Scelta, e OpCond è l'array di stringhe che il mio main ha
creato, facendo il parsing del file di testo.
Option Explicit
Public ChosenOpCond As String
Private Sub UserForm_Initialize(OpCond() As String)
Dim i As Long
'Load User Form
For i = 1 To UBound(OpCond)
ListBox1.AddItem OpCond(i)
Next
End Sub
ecc.
Ma sembra non funzionare, perchè dal mio main non riesco a chiamare
UserForm_Initialize(OpCond). C'è un modo per passare variabili fra la
UserForm ed il main? Grazie ancora,
ciao
Sergio
Ho visto prima la mail di questo messaggio, ho già risposto li.
A sto punto è' meglio se mandi i messaggi solo qui, altrimenti si
frammenta tutta la discussione e poi non si capisce più nulla nel
thread