Errore di runtime



  • Errore di runtime ("indice non incluso")
    di davins90 data: 23/11/2013 20:44:08

    Buona sera a tutti,
    sono nuovo del mondo vba e sono alle prime armi quindi... nel cimentarmi con l'uso delle matrici ho dei problemi con la comprensione degli indici, ed ecco qua il programmino che mi genera errore:


    mi da: "errore di runtime 9"

    Qualcuno potrebbe perfavore aiutarmi? grazie mille

    Daniele




     
    Option Explicit
    Option Base 1
    Sub p()
    Dim m(3, 2) As Double
    Dim i As Integer
    Dim j As Integer
    For i = LBound(m) To UBound(m)
    For j = LBound(m, 1) To UBound(m, 1)
    m(i, j) = Rnd
    Next
    Next
    For i = LBound(m) To UBound(m)
    For j = LBound(m, 1) To UBound(m, 1)
    Cells(i, j) = m(i, j)
    Next
    Next
    End Sub



  • di gaetanopr (utente non iscritto) data: 24/11/2013 11:28:49

    Ciao prova in questo modo, hai dichiarato una matrice a due dimensioni.
    Le funzioni Ubound e Lbound, richiedono due argomenti, il primo è il nome della matrice il secondo è la dimensione, nel primo for tu hai omesso il secondo argomento, quindi di default è come se avessi scritto , LBound(m, 1) To UBound(m, 1), l'errore è nel 2° for (hai indicato nuovamente la prima dimensione) indicando LBound(m, 1) To UBound(m, 1)
    fai fare un ciclo 3 per 3 quando invece la matrice è 3 x 2 andando quindi in errore, cioè superando gli indici della matrice

     
    Option Explicit
    Option Base 1
    Sub p()
    Dim m(3, 2) As Double
    Dim i As Integer
    Dim j As Integer
    For i = LBound(m, 1) To UBound(m, 1)
    For j = LBound(m, 2) To UBound(m, 2)
          m(i, j) = Rnd
    Next
    Next
    For i = LBound(m, 1) To UBound(m, 1)
    For j = LBound(m, 2) To UBound(m, 2)
    Cells(i, j) = m(i, j)
    Next
    Next
    End Sub
    
    oppure senza bisogno di usare Option base 1
    
    Sub p1()
    Dim m(1 To 3, 1 To 2) As Double
    Dim i As Integer
    Dim j As Integer
    For i = 1 To 3
     For j = 1 To 2
          m(i, j) = Rnd
     Next
    Next
    
    Range("A1:B3") = m()
    
    End Sub



  • di gaetanopr data: 24/11/2013 11:36:55

    Per avere la prova del nove prova ad usare la tua macro ma invertendo le dimensioni della matrice in questo modo
    Dim m(2, 3) As Double
    tu ti aspetterai di vedere popolate le celle A1:C2, cioè 2 righe 3 colonne, invece si popoleranno solo le celle A2:B2, in quanto farai fare un ciclo 2 X 2 cioè solo per la prima dimensione della matrice, che in questo caso non andrà in errore perché non superi l'indice massimo



  • di gaetanopr data: 24/11/2013 12:02:06

    Salve a tutti, sono stato un po' assente e non avevo visto che la stessa discussione era già stata risolta da patel nell'altra sezione



  • di patel data: 24/11/2013 12:10:56

    Ciao Gaetano, secondo me dovrebbe essere chiarito meglio, specialmente per i principianti, cosa postare in una sezione e cosa nell'altra, ci sono varie discussioni duplicate.





  • di gaetanopr data: 24/11/2013 12:20:32

    Ciao patel, concordo infatti molti utenti a parte usare la sezione giusta o meno(questo argomento non era per l'altra sezione) spesso duplicano le discussioni, io per abitudine faccio un giro prima in questa sezione dove solitamente si trovano più discussioni e dopo leggo gli argomenti dell'altra, per questo non me ne sono accorto subito che già avevi risolto.



  • di davins90 (utente non iscritto) data: 24/11/2013 12:46:36

    Grazie mille a tutti ragazzi per le vostre rispsote! gentilissimi! Vi chiedo scusa perchè essendo nuovo non avevo trovato la prima discussione che avevo creato e allora ne ho fatta un'altra in un'altra sezione e mi è apparsa subito! cercherò di stare più attento! grazie mille e buona domenica!



  • di patel data: 24/11/2013 12:49:39

    la distinzione non è chiara, per me questo argomento riguardante problemi con una macro dovrebbe stare nella sezione programmazione, le macro non sono funzionalità di base





  • di gaetanopr data: 24/11/2013 12:59:33

    Hai ragione effettivamente le macro non sono funzionalità di base, la distinzione non è ben chiara, purtroppo la distinzione è soggetta alle proprie conoscenze e valutazione del problema, a me ad esempio capita di vedere delle formule matriciali da far girare la testa, magari una macro del genere la reputo basilare invece una formula matriciale di un certo tipo, no.
    Io credo che se si conoscesse bene l'uso delle formule, come combinarle e farle lavorare con le matrici, molte macro non servirebbero
    Alle volte è più semplice scrivere una macro che una formula.



  • di patel data: 24/11/2013 13:58:09

    sono pienamente d'accordo con te, infatti non hai mai visto una formula matriciale scritta da me.





  • di Vecchio Frac data: 24/11/2013 14:13:28

    Allora anche patel fa battute ogni tanto... benvenuto nel club ^_^

    Sul fatto di usare un forum o l'altro, non credo che possiamo essere troppo fiscali, visto che sembra già difficile per i nostri utenti individuare un titolo idoneo alle proprie discussioni :)