Run Time 381



  • Run Time 381
    di Mauro (utente non iscritto) data: 02/10/2012 21:55:26

    Run Time 381

    Impossibile impostare la proprietà List. Indice della matrice di proprietà non valido.

    Salve a tutti sono nuovo di questo forum e di VBA per Excel. Ho trovate un esempio su internet e ho provato a riprodurlo ma mi da questo errore da cosa può dipendere.

    Grazie a tutti

    Mauro
     
     ActiveSheet.UsedRange.Select
            Riga = Worksheets(1).UsedRange.Rows.Count
            For Indi = 2 To Riga
                If Range("E" & Indi) <= MyDate Then
                
                    RigaLista = RigaLista + 1
                    FrmScaduti.LstScaduti.List(RigaLista, 1) = _
                    Range("B" & Indi)
                    
                    FrmScaduti.LstScaduti.List(RigaLista, 2) = _
                    Range("C" & Indi)
                    FrmScaduti.LstScaduti.List(RigaLista, 3) = _
                    Range("D" & Indi)
                    FrmScaduti.LstScaduti.List(RigaLista, 4) = _
                    Range("E" & Indi)
                   
                End If
            Next
            
        End Sub



  • di HarryBosch data: 03/10/2012 09:01:46

    Ciao Mauro
    ma cosa vorresti realizzare nel tuo caso specifico?
    Tra l'altro in questo estratto non si vede l'evento che carica i dati (la riga di Sub per internderci).
    Provo a immaginare che vuoi caricare i dati quando mostri la Userform, e che, vuoi mostrare nella Listbox i valori presenti nelle colonne B, C, D, E qualora la data inserita nella colonna E sia inferiore alla data assunta dalla variabile MyDate.

    Ma aggiungerei almeno 2 proprietà alla ListBox:
    .ColumnCount per indicagli quante colonne inserire
    .AddItem per aggiungere righe alla lista
    una cosa del tipo che vedi sotto

    Dovresti spiegare il tuo intento :)
     
    Private Sub UserForm_Activate()
        ActiveSheet.UsedRange.Select
        Riga = Worksheets(1).UsedRange.Rows.Count
    
        MyDate = Date
        LstScaduti.ColumnCount = 4
        For Indi = 2 To Riga
            If Range("E" & Indi) <= MyDate Then
                RigaLista = RigaLista + 1
                LstScaduti.AddItem
                FrmScaduti.LstScaduti.List(RigaLista - 1, 0) = Range("B" & Indi)
                FrmScaduti.LstScaduti.List(RigaLista - 1, 1) = Range("C" & Indi)
                FrmScaduti.LstScaduti.List(RigaLista - 1, 2) = Range("D" & Indi)
                FrmScaduti.LstScaduti.List(RigaLista - 1, 3) = Range("E" & Indi)
            End If
        Next
    End Sub
    



  • di Vecchio Frac data: 03/10/2012 11:10:44

    Stamattina avevo risposto più o meno anch'io come HarryBosch ma forse per la fretta non ho premuto Invia :P
    In ogni caso sì, manca .AddItem; e poiché l'indice delle ListBox parte da zero ecco spiegato quel .List(RigaLista - 1, 0) ... inoltre RigaLista + 1 subito prima non ha pertanto molta utilità :)




  • Run Time 381
    di Mauro (utente non iscritto) data: 03/10/2012 14:27:12

    Grazie ragazzi per le risposte, vi allego tutto il codice cosi' capite.

    E' una semplice libreria che gestisce prestiti libi, l'intento è sapere tutti i testi in prestito che sono scaduti e vanno restituiti.

    Ho provato questo codice trovato su Internet e aggiustato alla peggio ma niente da fare.

    Forse adesso con tutto il modulo riuscite a risolvere l'enigma.

    Grazieeeeeeeeeeeeeeeeeeee

     
    Option Explicit
    
    Private Sub CmdEsci_Click()
            Unload Me
        End Sub
        
        Private Sub UserForm_Activate()
            'calcolo la data di sistema e la salvo su una variabile
            Dim MyDate As Date
            Dim RigaLista As String
            Dim Riga As Long
            Dim Indi As Byte
            
            MyDate = Date
            'creo la riga descrizioni della ListBox
            FrmScaduti.LstScaduti.AddItem "Titolo"
            FrmScaduti.LstScaduti.List(RigaLista, 1) = "Editore"
             FrmScaduti.LstScaduti.List(RigaLista, 2) = "Cognome Nome"
            FrmScaduti.LstScaduti.List(RigaLista, 3) = "Telefono"
            FrmScaduti.LstScaduti.List(RigaLista, 4) = "Data scadenza"
            
            RigaLista = 0
            ActiveSheet.UsedRange.Select
            Riga = Worksheets(1).UsedRange.Rows.Count
            For Indi = 2 To Riga
                If Range("E" & Indi) <= MyDate Then
                    RigaLista = RigaLista + 1
                    FrmScaduti.LstScaduti.AddItem Range("A" & Indi)
                    FrmScaduti.LstScaduti.List(RigaLista, 1) = _
                    Range("B" & Indi)
                    FrmScaduti.LstScaduti.List(RigaLista, 2) = _
                    Range("C" & Indi)
                    FrmScaduti.LstScaduti.List(RigaLista, 3) = _
                    Range("D" & Indi)
                    FrmScaduti.LstScaduti.List(RigaLista, 4) = _
                    Range("E" & Indi)
                End If
            Next
            
        End Sub
        
    
    Private Sub FrmScaduti_Click()
    
    End Sub
    
    Private Sub UserForm_Click()
    
    End Sub



  • di HarryBosch data: 03/10/2012 16:21:25

    Mi sembrava che lo spunto che ti avevo offerto si adattava bene al tuo caso...
    Vedi sotto come ti ho corretto il codice e se fa quello che intendi.
    Bastava spostare al posto giusto quel RigaLista=0 e aggiungere le proprietà che ti avevo indicato.

    Certo che l'uso del
    With ... End With
    sarebbe da "studiare" subito, che dici Mauro?
     
        Private Sub UserForm_Activate()
            'calcolo la data di sistema e la salvo su una variabile
            Dim MyDate As Date
            Dim RigaLista As String
            Dim Riga As Long
            Dim Indi As Byte
            
            RigaLista = 0
            MyDate = Date
            LstScaduti.ColumnCount = 5
            'creo la riga descrizioni della ListBox
            FrmScaduti.LstScaduti.AddItem "Titolo"
            FrmScaduti.LstScaduti.List(RigaLista, 1) = "Editore"
            FrmScaduti.LstScaduti.List(RigaLista, 2) = "Cognome Nome"
            FrmScaduti.LstScaduti.List(RigaLista, 3) = "Telefono"
            FrmScaduti.LstScaduti.List(RigaLista, 4) = "Data scadenza"
            
            ActiveSheet.UsedRange.Select
            Riga = Worksheets(1).UsedRange.Rows.Count
            For Indi = 2 To Riga
                If Range("E" & Indi) <= MyDate Then
                    LstScaduti.AddItem
                    RigaLista = RigaLista + 1
                    FrmScaduti.LstScaduti.AddItem
                    FrmScaduti.LstScaduti.List(RigaLista, 0) = Range("A" & Indi)
                    FrmScaduti.LstScaduti.List(RigaLista, 1) = Range("B" & Indi)
                    FrmScaduti.LstScaduti.List(RigaLista, 2) = Range("C" & Indi)
                    FrmScaduti.LstScaduti.List(RigaLista, 3) = Range("D" & Indi)
                    FrmScaduti.LstScaduti.List(RigaLista, 4) = Range("E" & Indi)
                End If
            Next
        End Sub
    



  • di Vecchio Frac data: 03/10/2012 16:27:22

    LOL




  • Run Time 381
    di Mauro (utente non iscritto) data: 03/10/2012 19:49:22

    Adesso va !!!!!! Wowowowowo

    Grazie Harry spero nel prossimo progetto di non avere problemi !!!!!



  • di HarryBosch data: 04/10/2012 00:12:00

    Bene, allora cortesemente, se pensi di aver risolto la questione, potresti spuntare la casellina di risolta.
    E se nei prossimi progetti ti servirà un aiuto siamo qua.


  • Run Time 381
    di Mauro (utente non iscritto) data: 04/10/2012 07:40:00

    Grazie Harry !!!

    Alla prossima !!!