Sub con 2 parametri

di il
9 risposte

Sub con 2 parametri

Buonasera a tutti, sto riscontrando un problema nel chiamare una procedura con 2 parametri:

===== Modulo 1 =====
Option Explicit

Public griglia As String

Private Sub btnCrea_Click()
  Me.Hide
ERRORE======> CreaGriglia(cmbAnno.Value, griglia)  <===========ERRORE
  Unload Me
End Sub

Private Sub UserForm_Initialize()
 griglia = "tutto"
 cmbAnno.ListIndex = 0
End Sub

====Modulo 2====
Sub CreaGriglia(a As Integer, t As String)
[...]
end sub

Inizialmente, con il solo valore della combobox, filava tutto liscio, quando poi ho implementato altre funzioni e ho avuto necessità di un secondo parametro, ecco che mi arriva l'errore.

Grazie e a presto

9 Risposte

  • Re: Sub con 2 parametri

    Ciao,

    se in un Modulo dichiari una variabile Public, nel tuo caso Griglia, è del tutto inutile passarla come parametro in quanto la stessa sarà visibile in tutto il progetto.

    Nella Sub CreaGriglia avrai la variabile visibile con il valore che conterrà senza dover passare un parametro per reperirla

    Per come hai scritto il codice il parametro viene passato comunque e quindi non è un errore in quanto parametro ma caso mai per il suo contenuto inaccettabile per la Sub CreaGriglia, oppure per un operazione eseguita su tale Sub per la variabile griglia.

    Qual'è il contenuto della Sub CreaGriglia? 

  • Re: Sub con 2 parametri

    15/05/2023 - By65Franco ha scritto:


    se in un Modulo dichiari una variabile Public, nel tuo caso Griglia, è del tutto inutile passarla come parametro in quanto la stessa sarà visibile in tutto il progetto.

    Le variabili Public non sono una in generale una buona idea, se non strettamente necessarie. Lo scopo dei parametri di una Sub è proprio quello di evitarle.

    15/05/2023 - By65Franco ha scritto:


    Qual'è il contenuto della Sub CreaGriglia? 

    Per il codice cha ha pubblicato, è più facile che il problema sia sul primo parametro, ma se dice che funzionava… Servirebbe anche il codice della Sub.

    E serve più che altro capire qual è di preciso l'errore che viene segnalato.

  • Re: Sub con 2 parametri

    15/05/2023 - Sgrubak ha scritto:


    Le variabili Public non sono una in generale una buona idea, se non strettamente necessarie. Lo scopo dei parametri di una Sub è proprio quello di evitarle.

    Ciaooo, 
    Concordo pienamente, infatti io le uso raramente e solo in particolari circostanze, diciamo inevitabili…..

    Qui mi sono limitato solo al discorso del parametro griglia che inutilmente viene passato in tale contesto dopo averla dichiarata Public... 
    Boh, se non ci fa conoscere il contenuto della Sub richiamata e come dici tu il contenuto del messaggio di errore… e come tirare i dadi ;)) 
    non sai cosa esce.

  • Re: Sub con 2 parametri

    Eccomi, scusate il ritardo

    questo è il contenuto della Sub 

    Sub CreaGriglia(a As Integer) ==== ora è così ===
    
      If CheckSheet(a) Then         							'Controlla l'esistenza del foglio
        NewSheet (a)                							'Crea nuovo foglio
        Giorni (a)                  							'Crea i giorni del mese
        ScriviMesi (a)              							'Inserisce il nome dei mesi ed i relativi bordi
        DataOrarioGruppo (a)        							'Inserisce la data, l'orario e il nome del Gruppo
        Intestazione (a)            							'Inserisce l'intestazione dell'elenco personale
        Festivi (a) ==== qui mi serviva il 2° parametro ====    'Rende grigie le celle festive
        InserimentoPersonale (a)    							'Inserisce i nominativi di tutto il personale
      End If
    End Sub
    

    Alla fine, ho seguito il consiglio di  By65Franco, ed ho usato la variabile “griglia” come “Public” e non mi è servito più il 2° parametro.
    Per l'esattezza mi dava errore di sintassi.
    Per ora ho risolto ma è mia intenzione pulire ed alleggerire il codice e spero di non usare variabili “public”.
    Grazie e buona notte.

  • Re: Sub con 2 parametri

    A parte la If che è scritta correttamente la sintassi per tutte le altre chiamate non prevede le parentesi a meno che non usi la Call. Quindi

    Newsheet a

    Giorni a

    e così via. Se hai due parametri 

    Festivi a, b 

    Attualmente funziona solo perché con un solo parametro le parentesi vengono intese come parti di una espressione. Ma ripeto non le devi usare  

  • Re: Sub con 2 parametri

    16/05/2023 - oregon ha scritto:


    A parte la If che è scritta correttamente la sintassi per tutte le altre chiamate non prevede le parentesi a meno che non usi la Call. Quindi

    Grazie, è una delle tante cose che non sapevo, grazie ancora.

    Potrebbe essere questo il problema iniziale? Io le avevo scritte in parentesi.

  • Re: Sub con 2 parametri

    Sì, il problema era questo

    Le sintassi corrette sono

    Call Test(a, b)
    Test a, b

    con la seconda sintassi puoi inserire i parametri tra parentesi se vuoi, ma singolarmente, ad esempio

    Test (a), (b)

    e solo perché vengono intese (come ti dicevo) come parentesi di una espressione

  • Re: Sub con 2 parametri

    16/05/2023 - oregon ha scritto:


    Attualmente funziona solo perché con un solo parametro le parentesi vengono intese come parti di una espressione. Ma ripeto non le devi usare

    e già, era quello inghippo …  

    mannaggiaaaa…. Le basi SUB / FUNCTION / PARAMETRI ;)
    joker7421 devi approfondire gli argomenti di base… almeno via via che ti capitano cose come queste è doveroso. ;))

    • Sub : quando utilizzarle con o senza parametri
    • Function : quando e come utilizzarle,  valori di ritorno
    • ByVal / ByRef / Optional : come utilizzare i parametri e valori di Default  
    • Dichiarazioni Assegnazione Variabili : come e quando, ambito e vita
      • Dim
      • Public
      • Const
      • Enum
      • Etc…. 

    Anche se non hai molto tempo a disposizione, almeno un argomento alla volta devi approfondirlo.
    Buon lavoro

  • Re: Sub con 2 parametri

    16/05/2023 - By65Franco ha scritto:


    Anche se non hai molto tempo a disposizione, almeno un argomento alla volta devi approfondirlo.

    Anche se il tempo è poco, ogni argomento nuovo è fonte di curiosità e di approfondimento.

    Grazie ancora a tutti.

    A presto.

Devi accedere o registrarti per scrivere nel forum
9 risposte