useform con varie opzioni



  • useform con varie opzioni
    di Claudio (utente non iscritto) data: 22/01/2017 18:34:52

    Cari tutti, ho voluto implementare il mio progetto che Albatros54 mi aveva corretto. Ora mi trovo ad un punto morto, perché ho inserito 3 caselle di spunta che devono essere cliccabili con due opzioni della combobox1 (laurea o laurea magistrale) mentre solo per la laurea è cliccabile anche l'opzione 3.
    Una volta riempiti tutti i campi, i dati vanno riversati nei rispettivi fogli, avendo cura di incolonnare i dati secondo l'anno scelto con la casella di spunta.
    qualcuno mi può aiutare?
    Ultima cosa: nella casella di testo vorrei mettere il controllo calendario ma non riesco ad installare MSCAL.ocx.
    Grazie
     
    Private Sub Cancella_Click()
    'Claer the form
    For Each ctl In Me.Controls
    If TypeName(ctl) = "TextBox" Or TypeName(ctl) = "ComboBox" Then
    ctl.Value = ""
    ElseIf TypeName(ctl) = "CheckBox" Then
    ctl.Value = False
    End If
    Next ctl
    End Sub
    
    
    
    Private Sub Esci_Click()
    Unload Me
    
    End Sub
    
    
    
    Private Sub OK_Click()
    Dim ctl As Control
    nome = Me.ComboBox1.Value
    
    
    If Me.Materia.Value = "" Then
    MsgBox "Per favore inserire un Corso.", vbExclamation, "Orario"
    Me.Materia.SetFocus
    Exit Sub
    End If
    
    
    
    Sheets(nome).Activate
    RowCount = Worksheets(nome).Range("A1").CurrentRegion.Rows.Count
    With Worksheets(nome).Range("A1")
    .Offset(RowCount, 0).Value = Me.Materia.Value
    .Offset(RowCount, 1).Value = Me.Docente.Value
    .Offset(RowCount, 2).Value = Me.Lunedì.Value
    .Offset(RowCount, 3).Value = Me.Martedì.Value
    .Offset(RowCount, 4).Value = Me.Mercoledì.Value
    .Offset(RowCount, 5).Value = Me.Giovedì.Value
    .Offset(RowCount, 6).Value = Me.Venerdì.Value
    .Offset(RowCount, 7).Value = Me.Dipartimento.Value
    .Offset(RowCount, 8).Value = Me.Aula.Value
    .Offset(RowCount, 9).Value = Me.TextBox1.Value
    End With
    End Sub
    
    
    
    Private Sub primo_Click()
    
    If ComboBox1.Name = ("Triennale 1° semestre") Then
    
    End If
    If ComboBox1.Name = ("Triennale 2° semestre") Then
    
    End If
    If ComboBox1.Name = ("Magistrale 1° semestre") Then
    
    End If
    If ComboBox1.Name = ("Magistrale 2° semestre") Then
    
    End If
    
    If primo.Value = True Then
    secondo.Value = False
    secondo.Enabled = False
    terzo.Value = False
    terzo.Enabled = False
    Else
            secondo.Enabled = True
        End If
    Exit Sub
    End Sub
    Private Sub secondo_Click()
    
    
    
    If ComboBox1.Name = ("Triennale 1° semestre") Then
    
    End If
    If ComboBox1.Name = ("Triennale 2° semestre") Then
    
    End If
    If ComboBox1.Name = ("Magistrale 1° semestre") Then
    
    End If
    If ComboBox1.Name = ("Magistrale 2° semestre") Then
    
    End If
    
    If secondo.Value = True Then
    primo.Value = False
    primo.Enabled = False
    terzo.Value = False
    terzo.Enabled = False
    Else
            secondo.Enabled = True
        End If
    Exit Sub
    End Sub
    Private Sub terzo_Click()
    
    If ComboBox1.Name = ("Triennale 1° semestre") Then
    
    End If
    If ComboBox1.Name = ("Triennale 2° semestre") Then
    
    
    End If
    
    If terzo.Value = True Then
    secondo.Value = False
    secondo.Enabled = False
    primo.Value = False
    primo.Enabled = False
    Else
            secondo.Enabled = True
        End If
    Exit Sub
    If ComboBox1.Name = ("Triennale 1° semestre") Then
    Exit Sub
    End If
    If ComboBox1.Name = ("Triennale 2° semestre") Then
    Exit Sub
    End If
    If ComboBox1.Name = ("Magistrale 1° semestre") Then
    Exit Sub
    End If
    If ComboBox1.Name = ("Magistrale 2° semestre") Then
    Exit Sub
    End If
        If secondo.Value = True Then
            primo.Value = False
            primo.Enabled = False
           terzo.Value = False
            terzo.Enabled = False
        'Else
            'terzo.Enabled = True
    End If
    Exit Sub
    
    
    
    End Sub
    
    



  • di Albatros54 data: 22/01/2017 19:44:51

    Ho modificato un po la struttura del foglio"orario trimestrale 1° semestre". ho assegnato dei nomi alle celle "anno1" ecc.
    Ho sostituito le chekbox con OptionButton, in modo che con quest'ultime ne puoi selezionare solo una.
    modifica gli altri fogli in base al primo.
    ti allego il codice e il file.
    ciao
    albatros54
     
    Private Sub OK_Click()
    Dim ctl As Control
    nome = Me.ComboBox1.Value
    
    
    If Me.Materia.Value = "" Then
    MsgBox "Per favore inserire un Corso.", vbExclamation, "Orario"
    Me.Materia.SetFocus
    Exit Sub
    End If
    Select Case True
    Case OptionButton1
    anno = "anno1"
    Case OptionButton2
    anno = "anno2"
    Case OptionButton3
    anno = "anno3"
    End Select
    
    Sheets(nome).Activate
    RowCount = Worksheets(nome).Range(anno).CurrentRegion.Rows.Count
    With Worksheets(nome).Range(anno)
    .Offset(RowCount, 0).Value = Me.Materia.Value
    .Offset(RowCount, 1).Value = Me.Docente.Value
    .Offset(RowCount, 2).Value = Me.Lunedì.Value
    .Offset(RowCount, 3).Value = Me.Martedì.Value
    .Offset(RowCount, 4).Value = Me.Mercoledì.Value
    .Offset(RowCount, 5).Value = Me.Giovedì.Value
    .Offset(RowCount, 6).Value = Me.Venerdì.Value
    .Offset(RowCount, 7).Value = Me.Dipartimento.Value
    .Offset(RowCount, 8).Value = Me.Aula.Value
    .Offset(RowCount, 9).Value = Me.TextBox1.Value
    End With
    End Sub






  • di Claudio (utente non iscritto) data: 22/01/2017 20:28:43

    Albatros grazie mille per la rapida risposta. Mi sa dare anche una soluzione per l'inserimento del calendario?
    Grazie mille
    Claudio



  • di Albatros54 data: 24/01/2017 11:44:14

    nell'editor di vba seleziona la tua userform, apri la casella degli strumenti e selezioni
    "Controllo Calendario 12.0",se non lo vedi , lo devi aggiungere,con la casella degli strumenti aperta,
    click tasto SX del mouse e si apre la finestra controlli aggiuntivi,seleziona "Controllo Calendario 12.0".
    Trascina il controllo nella tua userform, aggiungi nella userfom una Label o Textbox, e aggiungi il codice sotto nella userform.
    Ciao
    albatros54
     
    Private Sub Calendar1_Click()
    Label12.Caption = Format(Calendar1.Value, "dd/mm/yyyy")
    End Sub
    






  • di alfrimpa data: 24/01/2017 11:54:55

    Gioacchino il problema è che in Excel 2013 il "Controllo calendario 12.0" non c'è.

    Alfredo





  • di Albatros54 data: 24/01/2017 12:03:24

    Alfredo,ciao, il controllo MonthView1 non c'è nemmeno?






  • di alfrimpa data: 24/01/2017 12:26:45

    No non c'è neanche quello ed infatti dalle versioni successive al 2007 il calendario è un grosso problema.

    Non so se installando il file MSCAL.OCX o MSCOMCTL.OCX la questione si risolva.

    Comunque date un'occhiata qui

    h t t p://archi.forumup.it/viewtopic.php?t=8697&mforum=archi

    Alfredo





  • di Claudio (utente non iscritto) data: 24/01/2017 13:24:59

    Si anche io ho seguito tutta la procedura indicata nel link di alfrimpa, ma il risultato è stato praticamente nullo, poiché il componente calendario 12.0 non mi si è installato, anche se, ripeto, ho seguito passo passo le indicazioni.
    Cosa altro si può fare?
    Grazie
    Claudio



  • di alfrimpa data: 24/01/2017 13:52:26

    Claudio ma al termine delle operazioni è venuto fuori il messaggio che la registrazione è avvenuta correttamente o ti ha dato un errore?

    Sei "entrato" come Amministratore?

    Alfredo





  • di Albatros54 data: 24/01/2017 13:55:44

    ti ricordo che tutta la procedura di ragistrazione dei componenti deve essere fatta come Amministratore.
    Secondo me il componente non è stato installato
    comunque dai un'occhiata qua:
    h t t p s://sites.google.com/site/e90e50/calendar-control-class#TOC-UPDATES
    h t t p://www.ocxdump.com/ocxhelp.html
    ciao
    albatros54





  • di Claudio (utente non iscritto) data: 24/01/2017 13:58:38

    Ho fatto per filo e per segno quesslo che era specificato nella guida. Alla fine mi ha dato un problema ma apparentemente il componente me lo avrebbe installato. Quando sono andato a cercarlo non ho trovato calendario 12.0 non lo ho trovato



  • di Claudio (utente non iscritto) data: 24/01/2017 14:12:15

    Dopo la procedura mi dice: il modulo mscal.ocx è stato caricato. ma la chiamata a DIRregisterServer non è riuscita. Codice di errore 0x8002801c



  • di alfrimpa data: 24/01/2017 14:18:35

    Quel messaggio di errore viene fuori quando non si entra come Amministratore

    Da sito Microsoft

    When you try to register a Microsoft FRx .dll file on a computer with the Windows Vista operating system installed, you receive the following error message:

    The module "C:Program FilesFRx SoftwareFRx 6.7filename.DLL" was loaded but the call to DllRegisterServer failed with error code 0x80004005.

    Cause
    This error message will be displayed if the regsvr32.exe command is not run as an administrator on the Windows Vista computer.

    Riprova come Amministratore

    Tu hai Vista?





  • di Albatros54 data: 24/01/2017 14:18:58

    ti ho allegato un file, vedi se funziona, se funziona dopo ti spiego.
    ciao
    albatros54





  • di alfrimpa data: 24/01/2017 15:11:37

    Gioacchino Roberto mensa eh?

    La vedo dura a spiegare quel po' po' di roba

    Alfredo





  • di Claudio (utente non iscritto) data: 24/01/2017 16:10:05

    Grazie Albatros, funziona bene, ma come mai non trovo il componente dopo l'installazione? Altra cosa, ma può diventare il classico calendario a scomparsa? Nel senso che mi appare se clicco sulla casellina?
    Grazie



  • di Albatros54 data: 24/01/2017 17:48:11

    Cit...ma come mai non trovo il componente dopo l'installazione

    Allora, non sei andato a guardare il sito che ti ho consigliato quello di Roberto Mensa.
    I componenti Aggiuntivi, non sono altro che dei codici, che i programmatori di microsoft, elaborano, e li installano nelle proprie piattaforme.Quindi , se c'è qualche smanettone che fa colazione con bit, byte dword, si puo creare un componemte aggiuntivo, che puo installare liberamente nelle proprie applicazioni.
    Nel caso di Excel VBA, questi componenti aggiuntivi , li possiamo creare con le "Classi".Le Classi non sono altro che del codice che fanno determinate cose.In VBA le troviamo nei moduli di Classe(se guardi il file che hai scaricato e apri l'editor VBA, trovi un modulo di classe, con del codice ,che ho incollato,dal sito di Roberto Mensa), bene, nel nostro caso il codice del modulo di classe , non fa altro, che creare ,per cosi dire, un componente aggiuntivo, che mi crea un calendario.Questo in parole povere.

    Cit...ma può diventare il classico calendario a scomparsa?

    Si, nel sito che ti ho indicato trovi tutto il materiale che ti serve, con tanti script.
    P.S. Spero di non aver scritto M..k..te.
    ciao
    albatros54





  • di Claudio (utente non iscritto) data: 24/01/2017 18:48:21

    Albatro S sei stato molto preciso e scrupoloso. Come ti ho già detto sono proprio un principiante con via, poiché finora ho usato Excel solo utilizzando e scrivendo formule per ottenere precisi risultati. Con via si apre un mondo completamente diverso ed affascinante. Ho apprezzato molto la semplicità dei codici che hai creato per me, ma ancora non riesco a capire l'arcano per realizzare in questo modo così semplici. Come avrai visto per realizzare un codice tu hai utilizzato poche righe di istruzioni, mentre io per lo stesso codice, o meglio, per fare la stessa cosa che tu hai realizzato molto semplicemente, ho usato il triplo delle tue righe, non so se rendo l'idea!!!!
    Grazie



  • di Claudio (utente non iscritto) data: 26/01/2017 14:56:54

    Albatro mi scusi, ma non riesco a realizzare il calendario a scomparsa. Dopo aver eseguito tutte le procedure per allegare il modulo di classe, vorrei che cliccando su una combobox o su un altro tipo di casella, mi si aprisse il calendario in modo da poter scegliere una data da inserire su quel comando. Oltretutto dovrei ripetere per 9 volte questa procedura sullo stesso modulo.
    Attualmente utilizzo questo codice senza alcun risultato:
    La combobox4 è quella su cui dovrebbe comparire la data scelta.
    Grazie
     
    Private Sub Calendar1_Click()
    ComboBox4.Caption = Format(Calendar1.Value, "dd/mm/yyyy")
    End Sub



  • di Albatros54 data: 26/01/2017 17:17:37

    Seguendo le istruzione del sito che ti ho consigliato, ho creato una userform2 dove ho creato il calendario, richiamando la classe che gia abiamo nel progetto, doppio click sull textbox e si apre il calendario, studialo pe rrenderti conto del funzionamento.In allegato il file.
    ciao
    albatros54





  • di Claudio (utente non iscritto) data: 27/01/2017 13:25:53

    Grande Albatros! Finalmente pare che funzioni tutto!!!!! Ma quanto è difficile per i poco esperti!!!!!! Meno male che c'è Albatros!!!!!
    Grazie ancora



  • di Albatros54 data: 27/01/2017 13:27:21

    OK spunta la casella risolto
    ciao
    albatros54





  • di Claudio (utente non iscritto) data: 04/02/2017 08:30:53

    Sicuramente ho fatto un pasticcio, ma non riesco a capire in cosa sbaglio. Ho fatto alcune modifiche al mio progetto iniziale che funzionava alla perfezione, difatti avevo dichiarato la discussione risolta. queste modifiche mi sono sembrate necessarie per facilitare la compilazione del form. Però dopo queste modifiche il form non funziona più.
    In pratica ho aggiunto due textbox che si popolano dopo che ho scelto l'opzione della combo1 (corso), la quale a sua volta si popola a seconda delle scelte fatte nelle combo2 (tipo di laurea) e combo 3 (semestre). Riempio poi gli altri campi, e faccio la scelta dell'anno (primo, secondo o terzo). Quando vado a cliccare il pulsante registra dati, mi escono una serie di errori. Il pulsante mi dovrebbe registrare i dati nel foglio che presenta le caratteristiche individuate dalla combo2 e combo 3, mentre all'interno di questo foglio i dati andranno inseriti in base all'ano corrispondente (le celle a1, a15 ed a29 di ogni foglio sono state infatti chiamate anno1, anno2 ed anno3).
    Siccome la vecchia form utilizzava la variabile nome ed anno per eseguire la routine di riempimento del foglio di lavoro, ho cercato invano di definire queste variabili, anche utilizzando una textbox di supporto (la 4) che si dovrebbe riempire, dopo le scelte effettuate nella combo 2 e 3, indicando il nome del foglio interessato alla form.
    Grazie per l'aiuto



  • di Claudio (utente non iscritto) data: 04/02/2017 08:33:26

    File allegato



  • di Albatros54 data: 04/02/2017 11:58:23

    Allora, rinomina il foglio "orario Triennale 1 trimestre" in " tirennaleprimo". nel codice dell'evento Ok_click aggiungi la riga di codice sotto e provi.
    naturalmente devi apportare le varie modifiche , in base a tutto questo
    ps. prima di fare modifiche studia il codice che vai a modificare, ti andava in debug perche non trovava il nome del foglio(variabile nome vuota)
    ciao
    albatros54
     
    nome = Me.ComboBox2 & Me.ComboBox3
    






  • di Claudio (utente non iscritto) data: 04/02/2017 14:33:37

    Albatros sei un grande, con i tuoi consigli l'inserimento funziona, però adesso c'è qualcosa che va in conflitto e non riesco a capire cosa, nel senso che prima le textbox2 e 3 mi si popolavano in automatico una volta fatta la scelta nella combo1, adesso questo non accade e neanche la textbox3 mi si riempie cliccando due volte sul calendario. Sto veramente impazzendo!!!!! Spero mi riesca a dare un giusto suggerimento. Grazie



  • di Claudio (utente non iscritto) data: 04/02/2017 14:34:59

    Ho allegato il file



  • di Albatros54 data: 04/02/2017 15:43:31

    Claudio, se tu cominci a modificare continuamente i codici ogni volta non posso arroventarmi il cervello per capire i cambiamenti che tu fai, nella userform2 del calendario , manca nelle dichiarazioni la riga di codice che rivela l'evento.
    controlla bene il codice e sappi quale parte del listato modificare.
    ciao
    albatros54 
     
    Option Explicit
    'UserForm with Frame1
    Private WithEvents Calendar1 As cCalendar
    






  • di Claudio (utente non iscritto) data: 04/02/2017 19:24:07

    Scusa Albatros, sarò pasticcione ma non capisco in cosa sbaglio. Prima di modificare i codici me li leggo mille volte e cerco di capirli. Avevo fatto la modifica della variabile nome come da te indicato ed all'inizio ha funzionato, ora non mi funziona più. Ti prego non mi uccidere!!!! Mi sai dare una dritta? Ti allego il file.
    Grazie



  • di Albatros54 data: 05/02/2017 08:37:57

    Option Explicit ti dice niente? il codice funziona bene.
    Ciao
    albatros54





  • di Claudio (utente non iscritto) data: 05/02/2017 14:23:07

    Scusa Albatros, sarò impedito ma a me il codice non funziona!!! Ti metto il codice come da me inserito. Cosa sbaglio?
     
    Option Explicit
    
    
    Private Sub OK_Click()
    Dim ctl As Control
    Dim anno As String
    Dim nome As String
    nome = Me.ComboBox2 & Me.ComboBox3
    
    If Me.ComboBox1.Value = "" Then
    MsgBox "Per favore inserire un Corso.", vbExclamation, "Orario"
    Me.ComboBox1.SetFocus
    Exit Sub
    End If
    
    
    
    
    
    Select Case True
    Case OptionButton1
    anno = "anno1"
    Case OptionButton2
    anno = "anno2"
    Case OptionButton3
    anno = "anno3"
    End Select
    
    Sheets(nome).Activate
    RowCount = Worksheets(nome).Range(anno).CurrentRegion.Rows.Count
    With Worksheets(nome).Range(anno)
    .Offset(RowCount, 0).Value = Me.ComboBox1.Value
    .Offset(RowCount, 1).Value = Me.TextBox1.Value
    .Offset(RowCount, 2).Value = Me.Lunedì.Value
    .Offset(RowCount, 3).Value = Me.Martedì.Value
    .Offset(RowCount, 4).Value = Me.Mercoledì.Value
    .Offset(RowCount, 5).Value = Me.Giovedì.Value
    .Offset(RowCount, 6).Value = Me.Venerdì.Value
    .Offset(RowCount, 7).Value = Me.ComboBox4.Value
    .Offset(RowCount, 8).Value = Me.ComboBox5.Value
    .Offset(RowCount, 9).Value = Me.TextBox3.Value
    End With
    End Sub



  • di Albatros54 data: 05/02/2017 15:00:04

    trova l'intruso!!!! 
     
    Private Sub OK_Click()
    Dim ctl As Control
    Dim nome As String
    Dim anno As String
    Dim RowCount As Integer
    
    
    Private Sub OK_Click()
    Dim ctl As Control
    Dim anno As String
    Dim nome As String






  • di Claudio (utente non iscritto) data: 05/02/2017 15:08:44

    Grazie Albatros, sei grande, mi mancava Dim RowCount As Integer ma non lo sapevo proprio che bisognava dichiarare anche questa variabile!
    Grazie ancora



  • di Albatros54 data: 05/02/2017 15:10:32

    Risolto!?





  • di Claudio (utente non iscritto) data: 05/02/2017 15:34:22

    Si.
    Avrei un'altra domanda.
    Nel momento che inserisco i dati nel foglio di lavoro con il tasto registra dati, è possibile farsi dire dal sistema che il dato principale (corso) è già presente? E successivamente farsi dire se si vuole sovrascrivere il dato oppure semplicemente aggiungere un'altra riga?
    Grazie



  • di Claudio (utente non iscritto) data: 07/02/2017 14:46:55

    Scusami Albatros, volevo sapere se esiste un codice VBA che mi permette di controllare ciò che è stato già inserito nel foglio di lavoro, nel senso che, se riempio il mio form ed i dati relativi al primo campo utile , per esempio, sono già presenti nel foglio di lavoro, il sistema mi dovrebbe chiedere se voglio sovrascrivere i dati oppure se voglio inserirli come nuova riga. E' possibile tutto ciò? Grazie



  • di Albatros54 data: 08/02/2017 10:37:09

    @Claudio
    devi rivedere il popolamento delle varie combobox, fai la prova ad inserire magistrale nel tipo di laure e a selezionare il terzo anno(che nella laurea magistrale non c'è, o sbaglio !!).ciao
    albatros54





  • di Claudio (utente non iscritto) data: 08/02/2017 11:16:12

    Si Albatros la magistrale ha solo due anni e infatti nel form selezionando il terzo anno mi faccio comparire l'avviso che la magistrale ha solo 2 anni.
    Ma cosa intendi con il rivedere il popolamento delle combobox?
    Grazie



  • di Albatros54 data: 08/02/2017 12:17:23

    Cit... terzo anno mi faccio comparire l'avviso che la magistrale ha solo 2 anni.
    Ok ,no nel form dal file che tu hai allegato e ho scaricato mi mancava questo passaggio.





  • di claudio (utente non iscritto) data: 09/02/2017 14:32:19

    Caro Albatros, non sono riuscito a risolvere il mio problema di aggiornamento o meno di dati utilizzando il form. Ho pensato di mettere un pulsante cerca che, dopo che le prime tre combo sono state inserite, mi vada a cercare nel relativo foglio se sono presenti i dati, ma non ne riesco a venire a capo. Ho utilizzato il codice di sotto ma non riesco a farlo funzionare. Se credi ti posso allegare il file, funzionante, con tutte le modifiche apportate. Il codice l'ho preso da una vecchia discussione sul forum (esempio di automazione con interfaccia utente). Ovviamente mancano tutti i riferimenti alle combobox presenti nel mio form!
    Grazie
     
    Private Sub CommandButton1_Click()
    If ComboBox2.Value = "magistrale" And ComboBox3.Value = "primo" Then
                
            Sheets("magistraleprimo").UsedRange.Select
            riga = magistraleprimo.UsedRange.Rows.Count
            For indi = 2 To riga
                If Range("C" & indi) <> TxtCategoria.Text Then
                    Range("C" & indi).Select
                    Selection.EntireRow.Hidden = True
                End If
            Next
    
    End Sub



  • di claudio (utente non iscritto) data: 09/02/2017 15:48:39

    Ho provato anche con questo codice ma nulla!!
     
    Private Sub CommandButton1_Click()
    Dim ctl As Control
    Dim rowcount As Integer
    
    nome = Me.ComboBox2 & Me.ComboBox3
    
    If ComboBox2.Value = "magistrale" And ComboBox3.Value = "primo" Then
                
            Sheets(nome).UsedRange.Select
            End If
            
            With Sheets(nome)
            Sheets(nome).Activate
    
    With Worksheets(nome)                  '.Range(anno)
    
    
    
    Me.Lunedì.Value = .Cells(, 4)     '.Value 'rowcount, 3).Value
    Me.Martedì.Value = .Cells(, 5)     '(rowcount, 4).Value
    Me.Mercoledì.Value = .Cells(, 6)     '(rowcount, 5).Value
    Me.Giovedì.Value = .Cells(, 7)     '(rowcount, 6).Value
    Me.Venerdì.Value = .Cells(, 8)     '(rowcount, 7).Value
    Me.ComboBox4.Value = .Cells(, 9)     '(rowcount, 8).Value
    Me.ComboBox5.Value = .Cells(, 10)     '(rowcount, 9).Value
    Me.TextBox3.Value = .Cells(, 11)     '(rowcount, 10).Value
    End With
     End If
            
                  End With
          
           End Sub
    



  • di Albatros54 data: 09/02/2017 16:38:15

    Non ho capito.
    Scenario:tu vuoi che quando inserisci un nuovo corso,il codice deve controllare se quel corso è stato inserito? o deve controllare tutte le voci inserite?
    se puoi allega il file e specifica cosa deve fare il codice.
    ciao
    albatros54





  • di Claudio (utente non iscritto) data: 09/02/2017 19:45:04

    In pratica vorrei controllare con il pulsante cerca se i dati evidenziati dalle prime tre combobox sono presenti nei rispettivi fogli e successivamente decidere se cancellare questi dati, aggiornali o partendo da questi aggiungerli al foglio con piccole modifiche.
    In pratica potrebbe succedere che un corso si tenga un giorno in un'aula, ed un altro giorno in un'altra aula.
    Mi sono spiegato?
    Grazie



  • di Claudio (utente non iscritto) data: 09/02/2017 20:48:23

    Ovviamente dopo aver trovato i dati delle prime tre combo, il codice mi dovrebbe popolare anche le altre combo, text ed optionbutton del form. Grazie



  • di claudio (utente non iscritto) data: 10/02/2017 12:31:48

    Ho provato ad utilizzare il codice di sotto ma quando schiaccio il pulsante cerca mi restituisce i dati della prima riga del foglio di lavoro.
    Ciao
     
    Private Sub CommandButton1_Click()
    Dim nome As String
    nome = Me.ComboBox2 & Me.ComboBox3
    Dim lRiga As Long
    Dim lng As Long
    
       
      Sheets(nome).Activate
    With Sheets(nome) '.Range(anno)
            
            lRiga = .Range("A" & .Rows.Count).End(xlUp).Row
            For lng = 2 To lRiga
                If CStr(.Cells(lng, 0).Value) = Me.ComboBox1.Value Then
                    Me.Lunedì.Value = .Cells(lng, 4).Value
                    Me.Martedì.Value = .Cells(lng, 5).Value
                    Me.Mercoledì.Value = .Cells(lng, 6).Value
                    Me.Giovedì.Value = .Cells(lng, 7).Value
                    Me.Venerdì.Value = .Cells(lng, 8).Value
                    Me.ComboBox4.Value = .Cells(lng, 9).Value
                    Me.ComboBox5.Value = .Cells(lng, 10).Value
                    Me.TextBox3.Text = .Cells(lng, 11).Value
    
    
            Exit For
            End If
            Next
            End With
                 End Sub



  • di Claudio (utente non iscritto) data: 10/02/2017 19:36:30

    Ho risolto con il codice di sotto, ma adesso mi mancherebbe il problema dell'anno, nel senso che importando i dati di un dato corso dovrei far diventare True la condizione dell'optionbutton corrispondente all'anno di corso.
    Poi come potrei fare per: o sovrascrivere e quindi correggere i dati trovati o inserirli in una nuova riga?
    Grazie
     
    Private Sub CommandButton1_Click()
    Dim nome As String
    nome = Me.ComboBox2 & Me.ComboBox3
    Dim lRiga As Long
    Dim lng As Long
      
      Sheets(nome).Activate
    With Sheets(nome)
            
            lRiga = .Range("A" & .Rows.Count).End(xlUp).Row
            For lng = 2 To lRiga
                If .Cells(lng, 1).Value = Me.ComboBox1.Value Then
                    Me.Lunedì.Value = .Cells(lng, 4).Value
                    Me.Martedì.Value = .Cells(lng, 5).Value
                    Me.Mercoledì.Value = .Cells(lng, 6).Value
                    Me.Giovedì.Value = .Cells(lng, 7).Value
                    Me.Venerdì.Value = .Cells(lng, 8).Value
                    Me.ComboBox4.Value = .Cells(lng, 9).Value
                    Me.ComboBox5.Value = .Cells(lng, 10).Value
                    Me.TextBox3.Text = .Cells(lng, 11).Value
    
    
            Exit For
            End If
            
            
            Next
            End With
                 End Sub
    



  • di Claudio (utente non iscritto) data: 11/02/2017 07:06:55

    Caro Albatros, sono riuscito a far selezionare l'anno di corso con il tasto cerca, ma adesso mi manca da realizzare un codice per far, eventualmente, sovrascrivere i dati. Mi potresti dare qualche dritta? Grazie
     
    Dim c As Range
            Dim rng As Range
            
            With Sheets(nome)
             Set rng = .Range("A1:A14" & Cells(Rows.Count, "N").End(xlUp).Row)
             For Each c In rng
               If c.Value = ComboBox1.Value Then
                   OptionButton1 = True
                 End If
                 Next
                 End With
                 
                 With Sheets(nome)
             Set rng = .Range("A17:A23" & Cells(Rows.Count, "N").End(xlUp).Row)
             For Each c In rng
               If c.Value = ComboBox1.Value Then
                   OptionButton2 = True
                 End If
                 Next
                 End With
                      
                 With Sheets(nome)
             Set rng = .Range("A26:A35" & Cells(Rows.Count, "N").End(xlUp).Row)
             For Each c In rng
               If c.Value = ComboBox1.Value Then
                   OptionButton3 = True
                 End If
                 Next
                    End With



  • di Claudio (utente non iscritto) data: 11/02/2017 09:43:19

    Ho anche aggiunto un controllo che mi dice se manca il contenuto della comobox1 nel foglio di lavoro attivato, ma il codice mi restituisce sempre il messaggio di errore, anche quando il contenuto è presente. In cosa sbaglio? Grazie
     
    'CONTROLLO SE IL CORSO E' STATO GIA' ARCHIVIATO
                 With Sheets(nome)
             Set rng = .Range("A1:A35" & Cells(Rows.Count, "N").End(xlUp).Row)
             'Set c = ComboBox1.Value
             For Each c In rng
               If c.Value = "" Then
                  MsgBox "Il Corso non è presente in archivio", 16, "Avviso"
    Me.OptionButton3.SetFocus
                 Exit Sub



  • di Claudio (utente non iscritto) data: 12/02/2017 18:53:59

    Ma non c'è nessuno in grado di aiutarmi?



  • di Albatros54 data: 13/02/2017 11:47:06

    @Claudio:
    Ho cercato di rendere la tua userform piu leggibile, per quanto riguarda la visualizzazione dei dati, perche una volta che tu inserisci i dati o li vuoi madificare, devi andare sul foglio di excel per vedere i dati che tu inserisci.
    Mi sono permeso di apportare delle modifiche.Il file dovrebbe funzionare,pero ti lascio l'arduo compito di fare tutti i collegamenti tra i controlli della userform con le varie celle del file di excel, alcune sono state fatte per effettuare delle prove, naturalmente troverai nel foglio dati che non coincidono ,sta a te fare i vari collegamenti.
    Se il lavoro non va bene, butta tutto a mare, e prendi le righe di codice che puoi utilizzare.
    in allegato il file.
    ciao
    albatros54





  • di Claudio (utente non iscritto) data: 13/02/2017 14:38:08

    Grazie Albatros, la tua idea non è male, ma mi rivoluziona un po' tutto, quindi sto cercando di risistemare un po' le cose secondo le mie esigenze. Se ho difficoltà ti posso disturbare?
    Grazie



  • di Albatros54 data: 13/02/2017 15:07:10

    Guarda che il tutto non rivoluziona niente, perche la struttura del foglio rimango cosi per come son, io ho aggiunto le listview esclusivamente per avere sott'occhio,quando apri la userfom , tutte le voci che sono sul foglio, puoi aggiungere le voci come prima , la sola differenza è che se lezioni una voce della listview, ti riempie le varie combo e la puoi modificare salvando il record che hai modificato.
    cioa
    albatros54





  • di Claudio (utente non iscritto) data: 13/02/2017 16:29:33

    Si certo, non rivoluziona niente, ma nella mia ultima versione avevo messo tutte condizioni che non mi permettevano di inserire dati incompleti, e mi ero proprio fermato alla condizione di riempire almeno un giorno della settimana con l'orario della lezione, ma non ci sono riuscito, perché ho messo la condizione e la stessa mi obbliga a riempire tutte e 5 le combo dei giorni della settimana!!! Sai dirmi come potrei bypassare questo problema?
    Grazie



  • di Albatros54 data: 13/02/2017 18:28:41

    l'ultimo file non con le tue modifiche non lo hai postato, quindi non so dove la tua condizione va a fare il controllo





  • di Claudio (utente non iscritto) data: 13/02/2017 20:04:54

    Albatros, ho allegato il file che sto modificando. In realtà il pulsante "modifica dati" non funziona. Ho aggiunto però i vari controlli che avevo creato nell'altra versione e come vedrai quello dell'orario mi obblica a scegliere una fascia oraria per tutti i giorni della settimana altrimenti non mi fa andare avanti.
    Grazie



  • di Claudio (utente non iscritto) data: 13/02/2017 21:51:17

    Mi succede un pasticcio con il semestre e l'anno. Dunque la triennale ha tre anni ed ogni anno ha il primo e secondo semestre. La magistrale ha due anni ed ogni anno ha primo e secondo semestre. Sto cercando di realizzare delle listview con le varie opzioni (quindi 6 pagine per la triennale e 4 per la magistrale) ma mi sto impicciando perché non riesco a capire bene il codice delle listview!!!



  • di Claudio (utente non iscritto) data: 14/02/2017 08:47:02

    Dunque, ho realizzato un file con 10 listview di cui solo alla prima ho indicato la rowsource, ma nonostante ciò non me la visualizza correttamente e né mi fa vedere la griglia. Ho combinato qualche pasticcio? Non so io ce la metto tutta, però questa soluzione mi sembra ottima ..... se funzionasse!!!!!!
    Ovviamente in questo ultimo file continuano ad essere presenti le condizioni per poter compilare correttamente il form e c'è anche la condizione dei giorni della settimana che non mi funziona correttamente.
    Grazie



  • di Albatros54 data: 14/02/2017 09:38:33

    Allora: ho visto ilfile che stai cercando di completare, l'idea è buona, pero mi sembra un po incasinato,per poter sfruttare al meglio la struttura della tua userform , con le varie listview, devi cambiare la struttura dei dati nei vari fogli, tipo ,per esempio, nel foglio"triennalePrimo" mettere il primo semestre nel range(A:j),quello del secondo nel range(l:v) ecc. cosi come negli altri fogli, in modo che le listwiev vanno a pescare nel proprio range, come prima cosa,.
    ciao
    albatros54





  • di Claudio (utente non iscritto) data: 14/02/2017 09:51:17

    Quindi questo comporterebbe anche modificare i puntamenti del tasto registra dati dico bene?



  • di Albatros54 data: 14/02/2017 10:00:13

    Esatto
    perche hai messo tutte queste listwiev? la soluzione postata da me non andava?Troppo semplice?





  • di claudio (utente non iscritto) data: 14/02/2017 10:44:38

    In questa maniera dovrei avere a portata di mano ogni semestre di ogni anno di corso.
    Altro problema è che nella vecchia versione la variabile nome era riferita al foglio. Questi erano TriennalePrimo, TriennaleSecondo, MagistralePrimo e MagistraleSecondo, ovviamente primo e secondo non erano riferiti all'anno ma al semestre, la variabile anno era individuata nei quattro fogli dai nomi di cella anno1, anno2 ed anno3. Credi che debba cambiare anche questo tipo di puntamento? A parte rinominare la prima cella del range.



  • di Claudio (utente non iscritto) data: 14/02/2017 13:11:55

    Dunque ho modificato i fogli di lavoro, ho cercato di eliminare i 3 optiobutton mettendo una combo che mi permetta di selezionare l'anno di corso, ho messo la condizione combobox_afterupdate() per far azzerare le altre combo quando cambio il loro valore, ma questo non succede. Inontre ho messo la condizione che se nella prima combo c'è il valore "magistrale" e nella combo della sela dell'anno seleziono il "terzo" anno mi dovrebbe restituire un messaggio di errore ma questo non avviene.
    Suggerimenti?
    Grazie



  • di Albatros54 data: 14/02/2017 16:19:44

    Cit..condizione combobox_afterupdate()
    Quale combobox vari e quale vuoi azzerare,perche?

    Cit.. combo c'è il valore "magistrale"
    puoi imporre,invece della finestra di errore, che la combobox dell'anno abbia solo i valori "primo" e "secondo".
    ciao
    albatros54





  • di Claudio (utente non iscritto) data: 14/02/2017 16:52:16

    Ma se impongo i soli due anni per la combo relativa all'anno, poi quando devo scegliere il terzo anno per la triennale come faccio?



  • di Albatros54 data: 14/02/2017 16:57:11

    Se la combobox della laurea è triennale carica i dati nella combobox anno da
    se la combobox della laurea è magistrale carica i dati i dati nella combobox anno da
    gia questo lavoro lo hai fatto, nel codice della combobox,devi solo modificarlo aggiungendo la nuova combobox
    in parole povere





  • di Claudio (utente non iscritto) data: 14/02/2017 17:13:03

    Ho fatto la modifica e pare funzioni. Ho risolto così:

    Ora però non riesco a far funzionare le listview!!!!
     
    Private Sub ComboBox2_AfterUpdate()
    'Me.ComboBox2.Clear
    Sheets("Foglio1").Activate
    
       If ComboBox2.Value = "Magistrale" Then
       ComboBox6.RowSource = Foglio1.Range("v2:v3").Address
       End If
       
       If ComboBox2.Value = "Magistrale" And ComboBox6.Value = "Primo" And ComboBox3.Value = "Primo" Then ComboBox1.RowSource = Foglio1.Range("g2:g12").Address
       If ComboBox2.Value = "Magistrale" And ComboBox6.Value = "Primo" And ComboBox3.Value = "Secondo" Then ComboBox3.RowSource = Foglio1.Range("g16:g25").Address
       If ComboBox2.Value = "Magistrale" And ComboBox6.Value = "Secondo" And ComboBox3.Value = "Primo" Then ComboBox1.RowSource = Foglio1.Range("h2:h5").Address
       If ComboBox2.Value = "Magistrale" And ComboBox6.Value = "Secondo" And ComboBox3.Value = "Secondo" Then ComboBox3.RowSource = Foglio1.Range("h8:h16").Address
       
       If ComboBox2.Value = "Triennale" Then
       ComboBox6.RowSource = Foglio1.Range("v2:v4").Address
       End If
       
       If ComboBox2.Value = "Triennale" And ComboBox6.Value = "Primo" And ComboBox3.Value = "Primo" Then ComboBox1.RowSource = Foglio1.Range("i2:i6").Address
       If ComboBox2.Value = "Triennale" And ComboBox6.Value = "Primo" And ComboBox3.Value = "Secondo" Then ComboBox1.RowSource = Foglio1.Range("j2:j6").Address
       If ComboBox2.Value = "Triennale" And ComboBox6.Value = "Secondo" And ComboBox3.Value = "Primo" Then ComboBox1.RowSource = Foglio1.Range("i8:i12").Address
       If ComboBox2.Value = "Triennale" And ComboBox6.Value = "Secondo" And ComboBox3.Value = "Secondo" Then ComboBox1.RowSource = Foglio1.Range("j8:j11").Address
       If ComboBox2.Value = "Triennale" And ComboBox6.Value = "Terzo" And ComboBox3.Value = "Primo" Then ComboBox1.RowSource = Foglio1.Range("i14:i16").Address
       If ComboBox2.Value = "Triennale" And ComboBox6.Value = "Terzo" And ComboBox3.Value = "Secondo" Then ComboBox1.RowSource = Foglio1.Range("j14:j17").Address
     End Sub



  • di Albatros54 data: 14/02/2017 18:32:26

    Codice e file troppo ingarbugliato,se puoi allega il file con tutte le modifiche che hai fatto.






  • di Claudio (utente non iscritto) data: 14/02/2017 19:01:40

    Cerco di ripulirlo un po' e poi lo allego. Grazie



  • di Claudio (utente non iscritto) data: 14/02/2017 19:28:37

    File allegato



  • di claudio (utente non iscritto) data: 15/02/2017 15:01:38

    Albatros salve. Sono riuscito a far visualizzare correttamente le listview. Adesso ho un problema, forse più semplice. C'è un conflitto fra alcune combo e ciò mi provoca un errato caricamento dei dati.
    Ti posso allegare il file in modo che tu possa dargli un'occhiata?
    grazie



  • di Albatros54 data: 15/02/2017 15:07:46

    Carica il file con nome diverso.
    Sto impazzendo ,è buona norma nei progetti con tutti questi controlli,o anche meno, di rinominare i vari controlli per non impazzire,per esempio, la combobox dei corsi, la puoi rinominare Cbcorsi,in modo che non devi cercare ogni volta a quale combobox associare il valore delle celle





  • di Claudio (utente non iscritto) data: 15/02/2017 15:24:27

    Albatros hai perfettamente ragione, ma avevo cercato di fare una cosa del genere e non mi funzionava più niente, allora sono tornato ai nomi classici che sono:
    Tipo di laurea Combo2
    Anno di corso Combo6
    Semestre Combo3
    Corso Combo1
    Poi i giorni della settimana hanno il loro nome
    Docente Text1
    Crediti Text2
    Dipartimento Combo4
    Aula Combo5
    Data Text3

    In pratica adesso cosa succede:
    se clicco una riga sulla listbox laurea, anno, semestre e corso me li da giusti , mentre al posto di lunedì trovo i dati di mercoledì, al posto di martedì i dati di giovedì e così via.
    Grazie
    Ora allego il file.



  • di Claudio (utente non iscritto) data: 15/02/2017 15:29:51

    Mi sono dimenticato un particolare. Il foglio TriennaleTerzo era inutile e quindi l'ho eliminato. Il nome dei 4 fogli si rifanno solo al semestre, mentre in ogni foglio ci sono poi i riferimenti ai vari anni.
    Grazie



  • di Albatros54 data: 15/02/2017 15:46:33

    Questo problema nasce dal fatto che non abbiamo dato dei nomi ben specifici ai cantrolli.
    ho allineato i vari controlli, ti posto il codice relativo alla listview1, devi allineare le altre , in base a questa.
     
        Private Sub ListView1_Click()
    Dim laurea As String
    Dim semestre As String
    Dim lista As Long
    Dim anno As String
    laurea = "Triennale"
    semestre = "Primo"
    anno = "anno1"
        ComboBox1.Text = ListView1.SelectedItem
        ComboBox2 = laurea
        ComboBox3 = semestre
        ComboBox6 = anno
        
        Me.Lunedì = ListView1.SelectedItem.SubItems(2)
       Me.Martedì = ListView1.SelectedItem.SubItems(3)
        Me.Mercoledì = ListView1.SelectedItem.SubItems(4)
        Me.Giovedì = ListView1.SelectedItem.SubItems(5)
         Me.Venerdì = ListView1.SelectedItem.SubItems(6)
        Me.ComboBox4 = ListView1.SelectedItem.SubItems(7)
        Me.ComboBox5 = ListView1.SelectedItem.SubItems(8)
        Me.TextBox3 = ListView1.SelectedItem.SubItems(9)
        'Me.ComboBox5 = ListView1.SelectedItem.SubItems(10)
        'TextBox3 = ListView1.SelectedItem.SubItems(11)
    End Sub






  • di Claudio (utente non iscritto) data: 15/02/2017 16:09:43

    Grande Albatros, funziona egregiamente. Ancora, però, c'è qualcosa che non va, soprattutto quando cerco di modificare i dati o aggiungerli come nuova riga se li ho caricati dalla listbox.
    Adesso provo a risolvere!!!!
    Grazie tanto per ora!



  • di Claudio (utente non iscritto) data: 15/02/2017 21:35:32

    Albatros posso approfittare ancora della tua infinita pazienza?
    Il problema è il seguente:
    Il pulsante modifica dati (commandbutton1) non funziona a dovere in quanto dopo aver selezionato i dati dalla listbox, faccio le modifiche, schiaccio il pulsante predetto ed il programma mi va a scrivere sulla prima riga del foglio, invece di aggiornarmi il dato.
    A volte poi, se cerco di inserire nuovi dati, questi non vengono messi al posto giusto perché non compaiono al modo giusto nella listbox di interesse.
    Poi se carico un dato dalla list box e cerco, per esempio, di modificare il semestre, la combo successiva riporta dato sbagliati e non quelli che dovrebbero avere con il valore di quella combobox, non so se ho reso l'idea.
    Allego il file così si capisce meglio.
    Grazie



  • di Claudio (utente non iscritto) data: 16/02/2017 10:38:51

    Dunque, ho fatto alcune modifiche al codice ed alcune anomalie sembra siano sparite. Ho sostituito innanzitutto gli anni con I, II e III, in modo da distinguerli bene. Il problema persiste con il tasto aggiorna. Ho cambiato il codice con quello che riporto. Se rendo non eseguibile la riga:
    .Cells(indice, 0).Value = Me.ComboBox1.Value
    allora il tasto mi scrive sulla riga selezionata ma mi sposta le caselle, viceversa mi da errore.
    Cosa Sbaglio?
    Grazie
     
    Private Sub CommandButton1_Click()
    Dim indice As Integer
    indice = Me.ListView1.SelectedItem.Index + 1
    nome = ComboBox2 & ComboBox3
        With Sheets(nome)
             .Cells(indice, 0).Value = Me.ComboBox1.Value
            '.Cells(indice, 2).Value = ComboBox2
            '.Cells(indice, 3).Value = ComboBox3
            .Cells(indice, 1).Value = Me.TextBox1.Value
            .Cells(indice, 2).Value = Me.Lunedì.Value
            .Cells(indice, 3).Value = Me.Martedì.Value
            .Cells(indice, 4).Value = Me.Mercoledì.Value
            .Cells(indice, 5).Value = Me.Giovedì.Value
            .Cells(indice, 6).Value = Me.Venerdì.Value
            .Cells(indice, 7).Value = Me.ComboBox4.Value
            .Cells(indice, 8).Value = Me.ComboBox5.Value
            '.Cells(indice, 9).Value = TextBox3.Value
      
        
        End With
        Call ricalcola
        End Sub
    



  • di Albatros54 data: 16/02/2017 10:52:37

    il codice sotto dice: prendi il valore della Me.ComboBox1.Value è mettilo nella cella di riga(indice) e colonna(0)
     
     .Cells(indice, 0).Value = Me.ComboBox1.Value






  • di claudio (utente non iscritto) data: 16/02/2017 11:00:27

    Si ma mi dice errore di run-time '1004' Errore definito dall'applicazione o dall'oggetto ed ovviamente non mi aggiorna i dati!!!



  • di Albatros54 data: 16/02/2017 12:01:23

    ho notato una cosa, il pulsante di modifica dell voci , per il momento non funziona, perche se leggi il codice lui seleziona sempre la ListView1, quindi quando tu ti trovi al di fuori di questa listView avrai sempre problemi, perche il codice si riferisce alla listview1.Ho pnsato , per ovviare al problema di modificare in parte la userform, aggiungendo un pulsannte per ogni listView, in modo tale che associ il codice al pulsante col nome della listview che tu vai a modificare. ti allego jpg della userform.
    ciao
    albatros54





  • di claudio (utente non iscritto) data: 16/02/2017 12:38:17

    Ho provato ma ahimè mi da' sempre lo stesso errore!!!



  • di Claudio (utente non iscritto) data: 16/02/2017 20:16:55

    Ciao Albatros, dopo varie prove ho fatto funzionare il pulsante della listview con il codice di sotto. Mi sai spiegare perché funziona così?
    Altra cosa: secondo te è possibile eliminare la prima riga della listview che non fa altro che riportare i nomi delle colonne?
    Grazie



  • di Albatros54 data: 17/02/2017 08:44:08

    IL codice di sotto non lo vedo.
    Basta iniziare il ciclo for contariga invece che dal 2 dal 3





  • di Claudio (utente non iscritto) data: 17/02/2017 09:08:37

    Grazie Albatros. Funziona, ma ho dovuto cambiare anche il codice sui tasti che nelle varie listview mi modificano i dati (l'index +1 è diventato index + 2); ti risulta?. Il problema che dopo aver schiacciato il tasto mi ricompare la prima riga di intestazione e soprattutto tutte le listview hanno lo stesso contenuto. Manca qualcos'altro?
    grazie
     
    Private Sub CommandButton9_Click()
    Dim indice As Integer
    indice = Me.ListView9.SelectedItem.Index + 2
    nome = ComboBox2 & ComboBox3
        With Sheets(nome)



  • di claudio (utente non iscritto) data: 17/02/2017 10:25:24

    Mi sono accorto che non avevo cambiato il contariga del ricalcola. Adesso mi resta il problema che dopo aver modificato i dati tutte le listview mi appaiono con lo stesso conteenuto (la listview appena modificata).
    Grazie



  • di Claudio (utente non iscritto) data: 17/02/2017 16:50:07

    Qualcuno ha idea del perché le listview del mio progetto non funzionano più a dovere dopo che ho modificato un dato in una di queste?
    Grazie



  • di Claudio (utente non iscritto) data: 18/02/2017 09:12:28

    Nessuno mi sa dire come faccio a far aggiornare il contenuto delle mie listview (ne ho 10) senza dover uscire dal form?
    Riporto il codice relativo ad una sola delle 10 listview.
    Grazie
     
    Private Sub CommandButton1_Click()
    Dim indice As Integer
    indice = Me.ListView1.SelectedItem.Index '+ 2
    nome = ComboBox2 & ComboBox3
        With Sheets(nome)
             .Cells(indice, 1).Value = Me.ComboBox1.Value
            .Cells(indice, 2).Value = Me.TextBox1.Value
            .Cells(indice, 3).Value = Me.Lunedì.Value
            .Cells(indice, 4).Value = Me.Martedì.Value
            .Cells(indice, 5).Value = Me.Mercoledì.Value
            .Cells(indice, 6).Value = Me.Giovedì.Value
            .Cells(indice, 7).Value = Me.Venerdì.Value
            .Cells(indice, 8).Value = Me.ComboBox4.Value
            .Cells(indice, 9).Value = Me.ComboBox5.Value
            .Cells(indice, 10).Value = TextBox3.Value
        End With
    
        Call ricalcola
    
    End Sub
    
    
    Private Sub ListView1_Click()
    Dim laurea As String
    Dim semestre As String
    Dim lista As Long
    Dim anno As String
    laurea = "Triennale"
    semestre = "Primo"
    anno = "I"
        ComboBox1.Text = ListView1.SelectedItem
        ComboBox2 = laurea
        ComboBox3 = semestre
        ComboBox6 = anno
        Me.Lunedì = ListView1.SelectedItem.SubItems(2)
        Me.Martedì = ListView1.SelectedItem.SubItems(3)
        Me.Mercoledì = ListView1.SelectedItem.SubItems(4)
         Me.Giovedì = ListView1.SelectedItem.SubItems(5)
        Me.Venerdì = ListView1.SelectedItem.SubItems(6)
       Me.ComboBox4 = ListView1.SelectedItem.SubItems(7)
        Me.ComboBox5 = ListView1.SelectedItem.SubItems(8)
        TextBox3 = ListView1.SelectedItem.SubItems(9)
        'Me.TextBox1 = ListView1.SelectedItem.SubItems(10)
        'Me.TextBox2 = ListView1.SelectedItem.SubItems(11)
        
    End Sub
    
    
    Private Sub UserForm_Initialize()
        Dim Lv As Object
        Dim conta_riga As Integer
        Dim riga As Integer
        Set sh = ThisWorkbook.Worksheets("Foglio1")
        With sh
            lRiga = .Range("A" & .Rows.Count).End(xlUp).Row
            Me.ComboBox1.RowSource = .Name & "!A2:A" & lRiga
        End With
    
    
    
        Sheets("TriennalePrimo").Select
        conta_riga = Sheets("TriennalePrimo").Range("A" & Rows.Count).End(xlUp).Row
        Me.ListView1.ListItems.Clear
    
        For riga = 3 To conta_riga
            Set Lv = ListView1.ListItems.Add(Text:=Sheets("TriennalePrimo").Cells(riga, 1))
            Lv.ListSubItems.Add Text:=Sheets("TriennalePrimo").Cells(riga, 1)
            Lv.ListSubItems.Add Text:=Sheets("TriennalePrimo").Cells(riga, 2)
            Lv.ListSubItems.Add Text:=Sheets("TriennalePrimo").Cells(riga, 3)
            Lv.ListSubItems.Add Text:=Sheets("TriennalePrimo").Cells(riga, 4)
            Lv.ListSubItems.Add Text:=Sheets("TriennalePrimo").Cells(riga, 5)
            Lv.ListSubItems.Add Text:=Sheets("TriennalePrimo").Cells(riga, 6)
            Lv.ListSubItems.Add Text:=Sheets("TriennalePrimo").Cells(riga, 7)
            Lv.ListSubItems.Add Text:=Sheets("TriennalePrimo").Cells(riga, 9)
             Lv.ListSubItems.Add Text:=Sheets("TriennalePrimo").Cells(riga, 10)
        Next riga
    With ListView1
       
        .Enabled = True
            .HideColumnHeaders = False
            .Appearance = ccFlat
            .Gridlines = True
            .View = lvwReport
            .FullRowSelect = True
        '.RowSource = "TriennalePrimo!A3:A14"
        .ColumnHeaders.Add Text:="Materia", Width:=50, Alignment:=0
            .ColumnHeaders.Add Text:="Docente", Width:=50, Alignment:=0
            .ColumnHeaders.Add Text:="Lun", Width:=50, Alignment:=0
            .ColumnHeaders.Add Text:="Mar", Width:=50, Alignment:=0
            .ColumnHeaders.Add Text:="Mer", Width:=50, Alignment:=0
            .ColumnHeaders.Add Text:="Gio", Width:=50, Alignment:=0
            .ColumnHeaders.Add Text:="Ven", Width:=50, Alignment:=0
            .ColumnHeaders.Add Text:=Me.ComboBox4.Value, Width:=50, Alignment:=0
            .ColumnHeaders.Add Text:=Me.ComboBox5.Value, Width:=50, Alignment:=0
            .ColumnHeaders.Add Text:="Data Inzio", Width:=100, Alignment:=0
            .MultiSelect = fmMultiSelectSingle
        
        End With
    
    
    Public Sub ricalcola()
    Dim conta_riga As Integer
    Dim riga As Integer
    Dim Lv As Object
    nome = ComboBox2 & ComboBox3
        Sheets(nome).Select
        conta_riga = Sheets(nome).Range("A" & Rows.Count).End(xlUp).Row
        Me.ListView1.ListItems.Clear
    
        For riga = 3 To conta_riga
            Set Lv = ListView1.ListItems.Add(Text:=Sheets(nome).Cells(riga, 1))
            Lv.ListSubItems.Add Text:=Sheets(nome).Cells(riga, 2)
            Lv.ListSubItems.Add Text:=Sheets(nome).Cells(riga, 3)
            Lv.ListSubItems.Add Text:=Sheets(nome).Cells(riga, 4)
            Lv.ListSubItems.Add Text:=Sheets(nome).Cells(riga, 5)
            Lv.ListSubItems.Add Text:=Sheets(nome).Cells(riga, 6)
            Lv.ListSubItems.Add Text:=Sheets(nome).Cells(riga, 7)
            Lv.ListSubItems.Add Text:=Sheets(nome).Cells(riga, 8)
            Lv.ListSubItems.Add Text:=Sheets(nome).Cells(riga, 9)
            Lv.ListSubItems.Add Text:=Sheets(nome).Cells(riga, 10)
        
        Next riga
    
    
    



  • di Albatros54 data: 23/02/2017 12:22:06

    Ciao Claudio
    non ti ho abbandpnato, sono stato per un periodo off-line.
    Dato che il file è stato modificato diverse volte, se puoi allegarmi il file definitivo, quello che tu vuoi che si aggiornano le listview, e vediamo se riusciamo a venirne fuori.
    ciao
    albatros54





  • di Claudio (utente non iscritto) data: 23/02/2017 12:51:14

    Grazie Albatros. Con molta fatica sono andato un po' avanti e e leggendo e rileggendo il codice ho apportato alcune modifiche. Ora ho aggiunto una nuova casella (Note) e dopo questo passaggio non capisco come mai solo la listview10 non si aggiorna.
    Vorrei pure mettere un pulsante che mi consenta di cancellare una intera riga da una qualsiasi listview e che la riga sul foglio che si è resa vuota venga riempita dagli altri dati già presenti sul foglio. Secondo te è possibile?
    Allego il file



  • di Claudio (utente non iscritto) data: 23/02/2017 14:22:28

    Mi sono accorto che se inserisco un dato alla "Magistrale 2° semestre, II anno" (listview10)il dato va al suo posto, ma se provo a modoficarlo, me lo scrive sul foglio "Magistrale 2° semestre, I anno" (listview8), cancellandomi la prima riga di dati quando presente.
    Stranezze!!!



  • di Claudio (utente non iscritto) data: 24/02/2017 20:19:31

    Albatros sono riuscito a trovare l'inghippo delle listview, era come al solito una stpidaggine ma chi non è abituato a programmare evidentemente non vede gli errori.
    resta in ballo il tasto cancella relativo al dato caricato dalla kistview. Mi sai dare qualche indicazione?
    grazie



  • di Claudio (utente non iscritto) data: 25/02/2017 12:58:08

    Ho bisogno di aiuto. Nel famoso useform con varie opzioni sto cercando di inserire, in ogni listview, un tasto elimina che mi cancelli sia il dato nella listview sia il dato nel foglio di lavoro (ovviamente mi deve cancellare tutti i dati del form, quindi corso, docente, lun, mar, mer, gio, ven, dipartimenti, aula, note).
    Ho provato il codice che posto ma non mi riconosce "listindex", e mi dice impossibile trovare il metodo o il membro dei dati.
    Suggerimenti?
    Questo codice mi piace perché prima di cancellare il dato mi chiede conferma
     
    Option Explicit
    Dim nome As String
    Dim rng As Range
    Private Sub Worksheet_nome_Activate()
     nome = ComboBox2 & ComboBox3
     Call m
    End Sub
    
    Private Sub m()
        Set rng = Me.Range("A3").CurrentRegion
        With Me.ListView1
            .ColumnCount = rng.Columns.Count
            .Clear
            .List = rng.Value
        End With
    End Sub
    
    Public Sub Elimina()
        rng.Rows(ListView1.ListIndex + 1).EntireRow.Delete
        Call m
    End Sub
    
    Private Sub CommandButton12_Click() 'Listview1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
        Dim lRisposta As Long
        lRisposta = MsgBox("Eliminare la riga?", vbYesNo + vbQuestion, "Attenzione!")
        If lRisposta = vbYes Then
            Call Elimina
        End If
    End Sub
    
    Public Sub Carica()
        Call m
    End Sub