Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Visualizzare dati in listbox prima di inserirli

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Visualizzare dati in listbox prima di inserirli

Postdi BG66 » 01/01/17 12:54

Ciao a tutti,
vorrei che la listbox mi riassuma i dati inseriti nelle singole Textbox e mi chieda conferma della correttezza, prima di copiarle su un foglio di lavoro specifico.
https://www.dropbox.com/s/1im15xifdu557c1/inserire%20dati.xls?dl=0

Grazie in anticipo


PS La parte del copiare i dati non è ancora stata sviluppata in attesa di capire se quanto sopra è fattibile.
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 261
Iscritto il: 20/08/16 07:44

Sponsor
 

Re: Visualizzare dati in listbox prima di inserirli

Postdi patel » 01/01/17 17:59

non capisco a cosa possa servire la listbox che riassuma i dati inseriti nelle singole Textbox, non ti sei spiegato molto bene, comunque è sicuramente fattibile
patel
Utente Senior
 
Post: 309
Iscritto il: 24/04/12 16:03

Re: Visualizzare dati in listbox prima di inserirli

Postdi BG66 » 01/01/17 21:06

Ciao Patel,
ti confermo che è proprio questo che vorrei imparare. Ossia come visualizzare/riassumere in una listbox solamente i dati digitati in singole textboxes.

Attendo tue dritte.

Grazie in anticipo.
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 261
Iscritto il: 20/08/16 07:44

Re: Visualizzare dati in listbox prima di inserirli

Postdi Anthony47 » 01/01/17 22:58

Ho gli stessi dubbi di patel su che interfaccia utente vorresti realizzare...
Comunque per ottenere quel che chiedi potresti usare questa macro:
Codice: Seleziona tutto
Sub LVLoad()
Dim myList()
ReDim myList(1 To 100)
For Each mycontr In UserForm1.Controls
    If TypeName(mycontr) = "TextBox" Then
        If mycontr.Text <> "" Then
            myi = myi + 1
            myList(myi) = mycontr.Text
        End If
    End If
Next mycontr
If myi > 0 Then
    ReDim Preserve myList(1 To myi)
    ListBox1.RowSource = ""
    ListBox1.List = Application.WorksheetFunction.Transpose(myList)
End If
End Sub

Rimane il bisogno di farla partire in qualche momento; io arbitrariamente (per prova) l'ho associata all'evento UserformClick:
Codice: Seleziona tutto
Private Sub UserForm_Click()
Call LVLoad
End Sub

Penso che dovresti impostare la proprieta' MultiSelect del ListBox su True (per poter scegliere piu' di un valore); come pure potresti optare per ListStyle = ListStyleOption (invece che ListStylePlain di default), e in questo caso potrai usare un checkbox per selezionare la/e voce/i.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17650
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Visualizzare dati in listbox prima di inserirli

Postdi BG66 » 02/01/17 07:52

Ciao,
ho sicuramente sbagliato nell'applicare quanto consigliatomi ma come / dove?
Ho anche creato un tasto aggiorna per avviare la sub ma senza esito.

https://www.dropbox.com/s/sb3sar9hicaddrn/inserire%20dati_V1.xls?dl=0

Grazie per la pazienza.
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 261
Iscritto il: 20/08/16 07:44

Re: Visualizzare dati in listbox prima di inserirli

Postdi patel » 02/01/17 09:24

avevo dubbi sull'utilità di quanto stai facendo e non li hai dissipati, lo fai solo a scopo didattico ?
Comunque inserisci la sub LVLoad all'interno del modulo della userform
patel
Utente Senior
 
Post: 309
Iscritto il: 24/04/12 16:03

Re: Visualizzare dati in listbox prima di inserirli

Postdi Anthony47 » 02/01/17 10:43

ho sicuramente sbagliato nell'applicare quanto consigliatomi ma come / dove?
Ho sbagliato io a non dirti quello che ti ha scritto patel.
Oppure, se vuoi lasciare il codice in un modulo standard, devi indirizzare esplicitamente la form; quindi:
Codice: Seleziona tutto
        UserForm1.ListBox1.RowSource = ""
        UserForm1.ListBox1.List = Application.WorksheetFunction.Transpose(myList)

Mi permetto anche di suggerire di modificare l'approccio sull'uso dei checkbox: non "visualizza /nascondi" i frames ma "abilita /disabilita" i textbox; cosi' almeno non rimane quella form vuota o popolata solo qua e la a seconda delle spunte inserite.
Purtroppo questo richiede che i tanti Textbox siano rinominati per rispecchiare la scritta che compare accanto al checkbox (mentre ora, ad esempio, il textbox che compare nel frame1 e' chiamato TextBox2).

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17650
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Visualizzare dati in listbox prima di inserirli

Postdi Anthony47 » 02/01/17 10:56

Senza stare a modificare il nome del textbox, puoi ottenere quanto descritto modificando il codice della ClsUF in
Codice: Seleziona tutto
Option Explicit

Public WithEvents xlCB As MSForms.CheckBox

Private Sub xlCB_Click()
Dim nCB As Long
Dim myMatch, myArr

myArr = Array(2, 9, 10, 12, 13, 11, 15, 16, 14, 18, 19, 17, 0, 21, 22, 20, 0, 24, 25, 23, 27, 28, 26)
nCB = Right(xlCB.Caption, Len(xlCB.Caption) - 1)

Dim delta
delta = xlCB.Value * 75

    UserForm1.Controls("TextBox" & myArr(nCB - 1 + LBound(myArr))).Enabled = xlCB.Value
    UserForm1.Controls("TextBox" & myArr(nCB - 1 + LBound(myArr))).BackColor = RGB(180 - delta, 180 - delta, 180 - delta)
End Sub

In pratica ho creato una mappa tra il testo della checkbox e il nome del textbox corrispondente.

Nella Sub attivaUF bisogna modificare un paio di righe, ma preferisco darti il codice completo:
Codice: Seleziona tutto
Sub attivaUF()
Dim Ctrl As Control
Dim xlCheckBox As ClsUF
Set cll_CB = New Collection

    With UserForm1
        For Each Ctrl In .Controls
            If TypeOf Ctrl Is MSForms.CheckBox Then
                Set xlCheckBox = New ClsUF
                Set xlCheckBox.xlCB = Ctrl
                cll_CB.Add xlCheckBox
            ElseIf TypeOf Ctrl Is MSForms.TextBox Then
                If Ctrl.Name <> "TextBox7" And Ctrl.Name <> "TextBox8" Then
    '                 Ctrl.Visible = False
                     Ctrl.Enabled = False
                     Ctrl.BackColor = RGB(180, 180, 180)
                End If
            End If
        Next
        .Frame222.Visible = True
        .Frame333.Visible = True
        .Frame444.Visible = True
        .Show
    End With
End Sub


Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17650
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Visualizzare dati in listbox prima di inserirli

Postdi BG66 » 02/01/17 14:47

Ciao a tutti.

@Patel
Confermo che al momento è solo uno sviluppo didattico ma penso che al rientro in azienda possa diventare una facility per i miei operai.

@Anthony
Le tue ultime soluzioni rendono il tutto efficace ma anche gradevole.
Di seguito idea di miglioramento "grafico" anche per la listbox. E' fattibile?
Immagine


Grazie ad entrambi
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 261
Iscritto il: 20/08/16 07:44

Re: Visualizzare dati in listbox prima di inserirli

Postdi Anthony47 » 02/01/17 20:55

Si puo' fare...
Comincia col dichiarare il ListBox da 4 colonne (proprieta' ColumnCount=4). Poi modifica il codice della Sub LVLoad (che io ho mentenuto in Modulo2):
Codice: Seleziona tutto
Sub LVLoad()
Dim myList(), myARR, myTBInd As Long
'
myARR = Array(2, 9, 10, 12, 13, 11, 15, 16, 14, 18, 19, 17, 0, 21, 22, 20, 0, 24, 25, 23, 27, 28, 26)
ReDim myList(1 To 4, 1 To 100)
For Each mycontr In UserForm1.Controls
    If TypeName(mycontr) = "TextBox" Then
        If mycontr.Name <> "TextBox7" And mycontr.Name <> "TextBox8" Then
            myTBInd = CDbl(Replace(mycontr.Name, "TextBox", "", , , vbTextCompare))
            If mycontr.Text <> "" Then
                myi = myi + 1
                myList(1, myi) = UserForm1.TextBox7.Value
                myList(2, myi) = UserForm1.TextBox8.Value
                myList(3, myi) = "C" & Application.Match(myTBInd, myARR, 0)
                myList(4, myi) = mycontr.Text
            End If
        End If
    End If
Next mycontr
If myi > 0 Then
    ReDim Preserve myList(1 To 4, 1 To myi)
    UserForm1.ListBox1.RowSource = ""
    UserForm1.ListBox1.List = Application.WorksheetFunction.Transpose(myList)
End If
End Sub

Tuttavia mi sento di suggerire di rimettere mano alla form per fare in modo che ci sia corrispondenza tra il nome del textbox e l'equivalente label (es ora accanto a C1 e' posizionato TextBox2; accanto a C2 c'e' TextBox9, e cosi' via secondo l'ordine con cui i controlli sono stati inseriti); come pure per fare in modo che l'ordine di tabulazione tra i Textbox segua una qualche regola (ora dalla Data si passa all'operatore, poi C2, C3, C6, C4, e cosi' via in disordine), e se non servono piu' eliminare i Frame.
Questo consentirebbe di riscrivere il codice in modo piu' lineare e quindi piu' facilmente manutenibile.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17650
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Visualizzare dati in listbox prima di inserirli

Postdi BG66 » 02/01/17 22:56

Ciao Anthony,
mi dispiace abusare della tua disponibilità ma la listbox dopo aver effettuate le ultime modifiche non visualizza nessun dato.
Ho provato a riscrivere il file ex-novo ma continuo a sbagliare qualcosa.
https://www.dropbox.com/s/gls492m91noncop/inserire%20dati_V2.xls?dl=0

Grazie per l'aiuto
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 261
Iscritto il: 20/08/16 07:44

Re: Visualizzare dati in listbox prima di inserirli

Postdi Anthony47 » 02/01/17 23:52

Questo e' il file su cui ho applicato le modifiche descritte nel precedente messaggio:
https://www.dropbox.com/s/cyrpepho71w6n ... 2.xls?dl=0

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17650
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Visualizzare dati in listbox prima di inserirli

Postdi BG66 » 03/01/17 20:02

[RISOLTO]
Ciao Anthony,
è perfetto e funzionante.

Grazie e alla prossima
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 261
Iscritto il: 20/08/16 07:44


Torna a Applicazioni Office Windows


Topic correlati a "Visualizzare dati in listbox prima di inserirli":

Dati da web
Autore: Statix
Forum: Applicazioni Office Windows
Risposte: 6

Chi c’è in linea

Visitano il forum: Nessuno e 22 ospiti