Newsgroup: it.comp.lang.visual-basic
Titolo: selact case

Ciao a tutti,
devo impostare delle MsgBox di avviso in base ad una selezione
effettuata tramite casella combinata. Tale casella è chiamata linea.
Le linee che ho in elenco sono 1A, 1B, 2A, 2B,... 40A, 40B, 40C, .....
75, 77....
alcune quindi hanno una lettera a fianco altre no.
la mia idea era di impostare sul pulsante che va al report il seguente
codice :
Dim Linea As Integer
    Linea = 100
    Select Case Linea
    Case 30 To 39
    MsgBox ("Dati Ossigeno non presenti" & vbNewLine & "per questa
categoria"), vbOKOnly, "Attenzione!"
    Case 50 To 59
    MsgBox ("Dati Ossigeno non presenti" & vbNewLine & "per questa
categoria"), vbOKOnly, "Attenzione!"
    Case Else
    DoCmd.OpenReport"Q_FiltriMeseQualitàPuntuale"...
questo perchè ho troppe linee per dimensionare una MsgBox su ognuna
per cui volevo raggrupparle per intervallo.
ovviamente non funziona a causa (credo) della lettera posta a fianco
posso utilizzare comunque Select case ignorando le lettere oppure devo
impostare il tutto in un altro modo?
grazie
Marco

devo impostare delle MsgBox di avviso in base ad una selezione
effettuata tramite casella combinata. Tale casella è chiamata linea.
Le linee che ho in elenco sono 1A, 1B, 2A, 2B,... 40A, 40B, 40C, .....
75, 77....
alcune quindi hanno una lettera a fianco altre no.
la mia idea era di impostare sul pulsante che va al report il seguente
codice :
**************************************************
<cut>
Non ho capito molto.
Prova:
Private Sub Command1_Click()
    Dim sLinea As String
    sLinea = "55a"
    Select Case CLng(Left(sLinea, Len(sLinea) - 1))
        Case 31 To 50
            MsgBox "31/50"
        Case 51 To 70
            MsgBox "51/70"
        Case Else
            MsgBox "Diverso"
    End Select
End Sub
-- 
---------------------------
Mauro Gamberini
http://www.riolab.org/
 

<cut>
Visto adesso 55a o 55:
Private Sub Command1_Click()
    Dim sLinea As String
    Dim lLinea As Long
    sLinea = "55"
    If Not IsNumeric(sLinea) Then
        lLinea = CLng(Left(sLinea, Len(sLinea) - 1))
    Else
        lLinea = CLng(sLinea)
    End If
    Select Case lLinea


On 19 Dic, 12:26, "Mauro Gamberini"

Ciao,
credo che tu abbia capito bene il caso cioè deve comparire la msgbox
in caso io abbia le linee 30A, 30B, 31A, 31B fino a 40 oppure da 50A,
50B alla 60. per il resto deve eseguire la query.
Ora comunque non funziona e credo che il problema sia dovuto al fatto
che sia 55 che 55A sono entrambi stati inseriti in tabella come testo.
mi da un errore di compilazione "Sub o Function non definita" al punto
NotIsNumeric.
grazie

mi da un errore di compilazione "Sub o Function non definita" al punto
NotIsNumeric
***********************************************
If Not IsNumeric


On 19 Dic, 15:12, "Mauro Gamberini"

Sì ho messo If...
ti mando tutta la routine. La prima parte, prima del tuo codice mi
serve per evitare che venga scelta sia la data singola sia l'
intervallo data.
Private Sub Comando9_Click() 'Ossigeno
On Error GoTo Err_Comando9_click
    If Me.DataLotto And DataDal Or Me.DataAl > "" Then
    DoCmd.Close acForm, "M_FiltroDatiQualitàPuntuale"
    DoCmd.OpenForm "M_FiltroDatiQualitàPuntuale"
    MsgBox ("Non è possibile selezionare intervallo data" & vbNewLine
& "e data lotto insieme" & vbNewLine & "Ripetere la selezione"),
vbOKOnly, "ATTENZIONE!"
    DoCmd.Close acQuery, "Q_FiltriMeseQualitàPuntuale"
    Else
    Dim sLinea As String
    Dim lLinea As Long
    sLinea = "55"
    If notisnumeric(sLinea) Then                             >>>>Qui
compare l' errore
    lLinea = CLng(Left(sLinea, Len(sLinea) - 1))
    Else
    lLinea = CLng(sLinea)
    End If
    Select Case lLinea
    Case 30 To 39
    MsgBox ("Dati Ossigeno non presenti" & vbNewLine & "per questa
categoria"), vbOKOnly, "Attenzione!"
    Case 50 To 59
    MsgBox ("Dati Ossigeno non presenti" & vbNewLine & "per questa
categoria"), vbOKOnly, "Attenzione!"
    Case Else
    DoCmd.OpenQuery "Q_FiltriMeseQualitàPuntuale", , acEdit
    'DoCmd.RunCommand
acCmdOutputToRTF                                  >>Questi sono
commentati perchè per ora voglio solo vedere se funziona la query
    'DoCmd.Close acForm, "M_FiltroDatiQualitàMese"
    'DoCmd.Close acReport, "R_FiltriQualitàMeseOssigeno"
    'DoCmd.OpenForm "M_MENU PRINCIPALE"
    End Select
    End If
exit_Comando9_Click:
    Exit Sub
Err_Comando9_click:
    DoCmd.Close acReport, "R_FiltriQualitàMeseOssigeno"
Resume exit_Comando9_Click
End Sub

>    If notisnumeric(sLinea) Then
Lo riscrivo(tu prova a leggerlo bene):
Not IsNumeric
C'è uno spazio fra Not e IsNumeric?


On 19 Dic, 15:20, "Mauro Gamberini"

Lo spazio non c' era colpa mia!!
ora l' ho corretto ma con il Not parte sempre e comunque la msgbox. se
lo tolgo esegue la query senza discriminare i Case 30 to 39 e 50 to
59.
spero di non aver avuto altre sviste.... (le ferie arriveranno prima o
poi :-) )

Lo spazio non c' era colpa mia!!
ora l' ho corretto ma con il Not parte sempre e comunque la msgbox. se
lo tolgo esegue la query senza discriminare i Case 30 to 39 e 50 to
59.
spero di non aver avuto altre sviste.... (le ferie arriveranno prima o
poi :-) )
***************************************************
Questo codice:
    If Not IsNumeric(sLinea) Then
        lLinea = CLng(Left(sLinea, Len(sLinea) - 1))
    Else
        lLinea = CLng(sLinea)
    End If
    Select Case lLinea
        Case 31 To 50
            MsgBox "31/50"
        Case 51 To 70
            MsgBox "51/70"
        Case Else
            MsgBox "Diverso"
    End Select
Fa quello che mi spetto.
Se sLinea è una compresa fra
31 e 50(o 31a e 50a) mi scrive 31/50
nella MsgBox. Se è compreso fra
51 e 70(o 51a e 70) mi scrive 51/70
nella MsgBox. In tutti gli altri casi
mi scrive Diverso nella MsgBox.
Immagino che tu debba adattarla alle tue esigenze
modificandola dove serve.


On 19 Dic, 15:50, "Mauro Gamberini"

è già adatta alle mie condizioni ma purtroppo ci deve essere ancora
qualcosa perchè anche se seleziono per es la linea 16A parte la msgbox
ugualmente; ciò avviene anche selezionando la linea 31A.
l' unica differenza rispetto a quanto scritto da te è che il mio Case
Else non è una msgbox ma va a vedere la query con i risultati ricerca.
Ho riletto più volte ed il codice è corretto. forse è IsNumeric che dà
il problema in quanto sono stringhe? non voglio mettere dubbi a chi ne
sa più di me....
Intanto continuo a provare
ciao

è già adatta alle mie condizioni ma purtroppo ci deve essere ancora
qualcosa perchè anche se seleziono per es la linea 16A parte la msgbox
ugualmente;
**************************************************
Fermo restando che il codice funziona,
io non so dove ti prendi il valore che passi
a sLinea. Se io scrivo:
sLinea = "16A" non ho problemi.
Il tuo 16A da dove viene?
Prova trimmare la stringa.
    sLinea = Trim(sLinea)
    If Not IsNumeric(sLinea) Then


On 19 Dic, 16:09, "Mauro Gamberini"

Qualcosa si è mosso!
Allora, se in sLinea metto per es 30A cioè compresa nell' intervallo
msgbox compare sempre la msgbox, se invece inserisco per es 20B filtra
sempre senza msgbox.
16A, 30B ecc... sono contenute in una casella combinata la cui origine
è una query che unisce diverse tabelle (Query campi incrociati)
La tabella (o risultato query) contiene tutte le linee; te ne mando
una parte:
01A
01B
02A
02B
03A
03B
04A
04B
05A
10A
10B
11A
11B
12A
12B
...
30A
30B
31A
31B
...
40A
40B
40C
41A
41B
41C
...
75
76
77
89A
89B
....
Non è che basta impostare sLinea = Ciò che seleziono in casella
combinata?

 - Mostra testo tra virgolette -
se non compaiono improvvisi problemi forse ho risolto.
ho provato con
sLinea = forms![Maschera]![Campo linea]
e tutto sembra ok.
La mia idea (strano!!) funziona ma il 99% lo devo a te per cui non mi
resta che ringraziarti per il prezioso aiuto.
se non ci dovessimo più sentire in questi giorni ti auguro Buon natale
e felice anno nuovo.
grazie ancora
Marco

Allora, se in sLinea metto per es 30A cioè compresa nell' intervallo
msgbox compare sempre la msgbox, se invece inserisco per es 20B filtra
sempre senza msgbox
*************************************************
Se non hai un Case che comprende o è uguale a 20, è così.
Non è che basta impostare sLinea = Ciò che seleziono in casella
combinata?
*************************************************
Se(se) sei sicuro non ci siano spazi prima o dopo il valore, sì.
Il Trim era perchè non sono a conoscenza di cosa perti
nella variabile.



Ehmmm... VBA di Access?


On 19 Dic, 16:38, "Mauro Gamberini"

Sì non so la versione VBA con Access 2003 ma è proprio lui e sembra
proprio funzionare