Errore di compilazione Qualificatore non valido

Anonimo
2015-08-12T05:16:02+00:00

Buon giorno

Nella successiva routine, eseguendo il ciclo For Next,  mi appare una MsgBox con: “Errore di compilazione  Qualificatore non valido” ed evidenzia sStato.

Sub ControlloCodicePostale()

Dim wkGestionale As Workbook

Dim shPannello As Worksheet

Dim shAzienda As Worksheet

Dim IntervalloStato As Range

Dim UltimaRiga As Integer

Dim nRiga As Integer

'Dim sStato As String è posto all'inizio del foglio

'è lo stato selezionato nella ComboBox

‘con shAzienda.Cells(3, 1) = sStato ho verificato che funziona

Dim Test9 As String

Dim TestL9 As String

Set wkGestionale = ThisWorkbook

Set shPannello = wkGestionale.Worksheets("Pannello")

Set shAzienda = wkGestionale.Worksheets("Azienda")

Test9 = Trim(TextBox9.Text)

TestL9 = Len(Test9)

'TextBox9 è dove viene digitato il CAP

shPannello.Activate

Set IntervalloStato = shPannello.Range(Cells(1, 5), Cells(1, 5).End(xlDown))

UltimaRiga = IntervalloStato.Rows.Count

For nRiga = 1 To UltimaRiga

sStato = shPannello.Cells(nRiga, 5)

    shAzienda.Cells(4, 1) = "OK" 'Prova che funziona

    MsgBox "Va bene"

    'Fino a quì funziona

    If sStato.Offset(0, 9).Value = TestL9 Then

    ‘Nella cella indicata c’è il numero 5 che è il numero di caratteri del CAP italiano

    sStato viene evidenziato ed appare la scritta suesposta

    shAzienda.Cells(5, 1) = "OK" 'Prova che funziona

    Else

    MsgBox "NO"

Exit For

    End If

Next

Set wkGestionale = Nothing

Set shPannello = Nothing

Set shAzienda = Nothing

End Sub

Grazie per l’aiuto

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2015-08-12T14:28:08+00:00

Una ComboBox restituisce SEMPRE una stringa di testo.

Non puoi utilizzare del testo come oggetto.

Faccio un semplice esempio. Mettiamo che tu abbia definito la cella A1 con il Name Pippo e tu voglia in una MsgBox il valore della cella B1. Delle tre routine qui sotto, le prime due fanno quanto richiesto, la terza m_3() restituisce l'errore che ricevi tu:

Public Sub m_1()

    Dim s As String

    s = "Pippo"

    MsgBox Range(s).Offset(0, 1).Value

End Sub

Public Sub m_2()

    MsgBox [Pippo].Offset(0, 1).Value

End Sub

Public Sub m_3()

    Dim s As String

    s = "Pippo"

    MsgBox s.Offset(0, 1).Value '<<== errore

End Sub


Aggiungo che anche questa da errore:

Public Sub m_4()

    Dim s As String

    s = "Pippo"

    MsgBox [s].Offset(0, 1).Value '<<== errore

End Sub

La risposta è stata utile?

0 commenti Nessun commento

2 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2015-08-12T13:11:01+00:00

    sStato è la variabile estratta dalla selezione dell'azienda nella ComboBox.

    Utilizzo il nome dello stato come un codice perché non possono esistere due stati con lo stesso nome.

    Nell'intervallo dello stato, sul foglio Pannello, inserisco cinque colonne con i dati, visibili nella ComboBox, che compongono la maschera di input dei vari CAP, CF, PI, IBAN, BIC, nella forma: Numero di caratteri e le estensioni, per esempio il CAP italiano è composto da 5 caratteri compresi nelle estensioni: 0-9 0-9 0-9 0-9 0-9. quando un codice ha, in un preciso punto, un qualsiasi carattere non determinato, è sufficiente lasciare le celle vuote, viceversa, se è necessario un unico carattere, come IT dell'IBAN è sufficiente inserire I-I T-T. Nelle successive celle, raggiunte con Offset() ci sono i dati che compongono la maschera di input da utilizzare come controllo della quantità dei caratteri e come composizione della maschera, il codice If sStato.Offset(0, 9).Value = TestL9 Then si riferisce alla cella con la quantità di caratteri che deve avere il CAP italiano, le successive hanno, rispettivamente 0, 9, 0, 9, ecc. se viene digitato un CAP più lungo o corto, oppure se non viene digitato un numero il valore non viene accettato ed appare una MsgBox che avverte che c'è un errore nella digitazione.

    Faccio questo perché i suddetti codici variano da stato a stato e di conseguenza preimpostare delle maschere di input che variano da stato a stato l'oh ritenuta una cosa saggia.Se uno ne ha voglia, per i codici che lo consentono, si potrebbe aggiungere la formula di controllo.

    Sub ControlloSelezioneStato()

    'Dim sStato As String è posto all'inizio del foglio

    'viene utilizzata anche da altre routine di questo gruppo

    'Aggiunti per permettere di scrivere sStato nella cella(3, 1)

    Dim wkGestionale As Workbook

    Dim shAzienda As Worksheet

    Set wkGestionale = ThisWorkbook

    Set shAzienda = wkGestionale.Worksheets("Azienda")

    If ComboBox2.ListIndex <> -1 Then

    sStato = ComboBox2.Text

    'Indica il nome da chiamare

    shAzienda.Cells(3, 1) = sStato

    ControlloLunghezzaAzienda

    'Chiama la routine di controllo

    Else

    MsgBox ("SELEZIONA LO STATO")

    End If

    Set wkGestionale = Nothing

    Set shAzienda = Nothing

    End Sub

    Se deve essere di tipo Range devo aggiungere alcuni passaggi, scrivere su una cella la variabile sStato, riferirsi a questa nel memorizzare i dati cercati e scrivere questi dati in celle dedicate sul foglio Azienda. Basta saperlo, strano però, con il ciclo Do Loop questo non serve, nella routine postata sull'altra domanda questo ciclo funziona riferendosi a delle variabili Range

    Grazie per l'informazione, la proverò.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2015-08-12T07:34:03+00:00

    sStato è dichiarato come String:

    'Dim sStato As String

    e quindi NON può essere utilizzato così:

    sStato.Offset(0, 9).Value

    In quella posizione, sStato DEVE essere un oggetto di tipo Range, ad esempio una cella.

    Io però non ho capito cosa metti in sStato.

    La risposta è stata utile?

    0 commenti Nessun commento