Come configurare smartphone e PC. Portale informativo

Operatori di filiale VBA: scelte difficili. Salto incondizionato

LINGUAGGIO DI PROGRAMMAZIONE VISUAL BASIC. RAMI DI PROGRAMMAZIONE

La ramificazione in Visual Basic è organizzata utilizzando:

  • istruzione IF condizionale;
  • funzione IIF incorporata;
  • Operatore di selezione CASO.

Per testare una condizione ed eseguire un'istruzione o un blocco di istruzioni, utilizzare istruzione condizionale SE...THEN. Questo operatore può essere utilizzato con diverse sintassi: a riga singola (lineare) e a più righe (blocco).

L'operatore lineare ha la seguente sintassi:

Se<условие>Poi<операторы!>

L'operatore di blocco ha la seguente sintassi:

Se<условие>Poi
<блок операторов 1>
Finisci se

Se la condizione data è vera, viene eseguito il blocco di istruzioni, altrimenti viene eseguito il blocco di istruzioni2. Se la clausola Else non è specificata, ifQuando la condizione è soddisfatta, il controllo viene immediatamente trasferito all'operatore successivo a If.

L'istruzione If può essere annidata, ovvero posizionata all'interno di blocchi di istruzioni. Per testare più di una condizione ed eseguire uno dei diversi blocchi di istruzioni, utilizzare un'istruzione condizionale estesa nella forma:

Se<условие 1>Poi
<блок операторов 1>
Altro<условие 2>Poi
<блок операторов 2>
Altro<условие n>Poi
<блок операторов n>
Finisci se

Per selezionare uno dei valori in base al soddisfacimento o al fallimento di qualche condizione, utilizzare la funzione condizionale IIF, che ha la seguente sintassi:

IIF (<условие>, <значение1>, <значение2>)

Questa funzione restituisce valore1 se la condizione è vera e valore2 se la condizione è falsa.

È possibile utilizzare un'espressione booleana come condizione che restituisce True o

False o qualsiasi espressione aritmetica (un valore zero è equivalente a False e un valore diverso da zero è equivalente a True).

Istruzione SELECT CASE utilizzato per testare una singola condizione ed eseguire uno dei diversi blocchi di istruzioni.

Formato del record dell'operatore:

Seleziona Caso<проверяемое выражение>
Caso<список выражений 1>
<операторы 1>Caso<список выражений 2>
<операторы 2>Caso<список выражений 3>
<операторы 3>
Caso Altro
<операторы группы Else>
Fine Seleziona

L'espressione da testare viene valutata all'inizio dell'istruzione Select Case. Questa espressione può restituire un valore di qualsiasi tipo (booleano, numerico, stringa).

Un elenco di espressioni è costituito da una o più espressioni separate da un carattere delimitatore standard (punto e virgola).

Quando l'operatore viene eseguito, viene verificato se almeno uno degli elementi di questo elenco corrisponde all'espressione da testare.

Gli alimenti dell'elenco di espressioni possono assumere una delle seguenti forme:

  • <выражение>- verifica la coincidenza di una data espressione con una delle espressioni - elementi della lista;
  • <выражение 1>Quello<выражение 2>- controlla se una determinata espressione rientra nell'intervallo specificato;
  • < Is <логический оператор> < выражение>- verifica il rispetto della condizione specificata per una determinata espressione.

VBA dispone di un operatore di salto condizionale da utilizzare nei casi in cui è necessario scegliere tra un gran numero di diversi rami di codice: operatore SelezionareCaso(è molto conveniente implementare una struttura a scelta multipla). Funziona più o meno allo stesso modo delle istruzioni multiple indipendenti Se, ma è più comprensibile per chi scrive il codice e per chi legge questo codice. Questo operatore è più efficiente dell'operatore SePoiAltro.

Parole chiave SelezionareCaso utilizzato con molti operatori Caso,dove ciascun operatore Caso controlla il verificarsi di un'altra condizione e viene eseguito solo uno dei rami Caso.Ramo Caso può contenere una, più o nessuna istruzione VBA.

Seleziona Caso– un'istruzione di controllo che esegue uno dei diversi blocchi di istruzioni a seconda del valore dell'espressione.

SelezionareCaso selezione_espressione

[ Caso Expression_list_1

[Blocco_operatore_1]

[Caso lista_espressioni_2]

[Blocco_operatore_2]]

……………………………………………………………………………

[Caso Else

[Blocco_operatore_N]]

EndSeleggere

– Selection_expression: qualsiasi espressione numerica o simbolica;

– Expression_list – ogni elenco è un elenco di espressioni logiche separate da virgole; hanno lo stesso tipo di choice_expression;

– Statement_block: contiene un numero qualsiasi di istruzioni VBA.

Durante l'esecuzione della dichiarazione SelezionareCaso VBA valuta innanzitutto Selection_Expression, e quindi confronta il risultato di tale espressione con ciascuna espressione elencata in ciascuna Expression_List . Se il valore rappresentato da Selection_Expression corrisponde all'espressione in Expression_List per uno di Caso,VBA esegue StatementBlock per questa istruzione Caso.Se il valore di Selection_Expression corrisponde a più di un operatore Caso,VBA esegue solo istruzioni Nel primo frase corrispondente Caso.Spesso un'espressione_scelta è semplicemente il nome di una singola variabile, matematica o numerica, piuttosto che un'espressione logica. Espressioni in Expression_List - Di solito si tratta di espressioni logiche.

Dopo che le istruzioni nella prima istruzione corrispondente hanno terminato l'esecuzione Caso VBA continua l'esecuzione del codice dalla prima affermazione dopo parole chiave FINESelezionare, che indicano la fine SelezionareCaso.

Se il valore di Selection_Expression non corrisponde a nessuno dei Caso e facoltativo CasoAltroè presente, VBA esegue le istruzioni rappresentate da Statement_Block_N prima di passare all'operatore dopo SelezionareCaso. Blocco operatore Caso Else eseguito solo se Selection_Expression non soddisfa nessuna delle condizioni Caso. In genere utilizzato per gestire valori indesiderati. Azione dell'operatore SelezionareCaso illustrato dallo schema a blocchi riportato in Fig. 5.

Fig 5. Schema a blocchi del progetto SelezionareCaso

Gli elementi dell'elenco di espressioni devono avere una delle tre forme seguenti:

Espressione_1, Espressione_2, …, Espressione_N

Espressione To Espressione

IOS Espressione con operazione

– Expression_ – qualsiasi espressione numerica, simbolica o logica dello stesso tipo dell'espressione di selezione;

– Espressione con operazione – un'espressione contenente una delle seguenti operazioni:<, <=, >, >=, < >, =.

Se viene utilizzata la parola chiave Quello per determinare i limiti di un'espressione, il valore più piccolo deve venire prima. Ad esempio, bloccare le istruzioni Caso da -1 a -5 non vengono eseguiti se Selection_Expression è -4. Questa riga dovrebbe essere scritta come Caso da -5 a -1.

Le operazioni di confronto possono essere utilizzate solo con una parola chiave È, ad eccezione dell'operazione di uguaglianza. Se non c'è la chiave È l'editor intelligente lo inserirà nel posto giusto.

È possibile utilizzare più espressioni o limiti in ciascuna condizione Caso. Per esempio, Caso 1 TO 4, 7 TO 9, 11, 13, Is > n %.

Esempio 4. Un programma che calcola uno sconto in base all'importo dell'acquisto.

Sub Skidka()

"Definizione dello sconto (in%) a seconda

"quantità di beni venduti

Fioco skidka Come intero

Fioco summa Come Single

somma = InputBox(“Inserisci importo acquisto”, “Calcolo sconto”, 0)

Se somma > 0 Poi

Seleziona Caso summa

Il caso è > 1000

Il caso è > 500

Caso Altro

Fine Seleziona

MsgBox"Sconto" & skidka & "%"

MsgBox"Importo di acquisto non specificato"

Seleziona Esempio di dichiarazione del caso

Sarebbe sicuramente utile avere un esempio per mostrare come potrebbe effettivamente apparire una struttura Select Case.

Selezionare Case objRol l OfFi l m.Type

Custodia "Slitta"

intSlide = intSlide + 1

Custodia "Negativo a colori"

intColoredNegativo = intColoredNegativo + 1

Caso "BW negativo"

intBWnegativo = intBWnegativo + 1

MgaBox "Tipo di film sconosciuto."

Questo frammento di codice fa sostanzialmente la stessa cosa del codice di esempio riportato sopra nella sezione Istruzioni If. . .ElseIf (viene omesso solo il controllo della scadenza). Tuttavia, da allora il nostro ipotetico oggetto che rappresenta un rullino sembra essere stato leggermente modificato: le informazioni sul colore e sull'incolore della pellicola sono ora rappresentate anche dalla proprietà Ture, e non da una proprietà Color separata, come prima.

E se questo è il caso, il programma deve funzionare solo con un valore: il valore restituito dalla proprietà Type. - ma questo valore viene confrontato con molti di quelli validi. Quindi Select Case è proprio ciò che il medico ha ordinato per il nostro caso.

Il primo utilizzo dell'operatore Case in questo esempio equivale a utilizzare If objRollOf Film.Type = "Slide" Then, ad es. se la proprietà Type dell'oggetto è "Slide", il programma esegue l'istruzione successiva, altrimenti passa alla seconda istruzione Case.

Si prega di notare che il segno dell'operazione, la cui presenza sembra logica a prima vista, non è incluso nei criteri. Il motivo è che le istruzioni Select Case presuppongono semplicemente l'uguaglianza come operatore di confronto.

Dal libro SOFTWARE PER SISTEMI EMBEDDED. Requisiti generali per lo sviluppo e la documentazione autore Gosstandart della Russia

Dal libro Computer + telefono cellulare: interazione efficace autore Il goltsman Viktor Iosifovich

Invio dal sito dell'operatore Oggi, probabilmente, tutti gli operatori supportano già l'invio di SMS dal proprio sito. I messaggi possono però essere inviati solo agli abbonati di un determinato operatore, ma di norma questo è sufficiente. Ora guarderemo

Dal libro UNIX: Process Communication autore Stephens William Richard

Esempio: code di messaggi Posix e funzione di selezione L'handle della coda di messaggi (una variabile di tipo mqd_t) non è un handle “normale” e non può essere utilizzato con le funzioni di selezione e poll (Capitolo 6). Tuttavia, possono essere utilizzati insieme al canale e alla funzione mq_notify. (Simile

Dal libro VBA for Dummies di Steve Cummings

Dal libro Firebird DATABASE DEVELOPER'S GUIDE di Borri Elena

Testare le condizioni nelle istruzioni Select Case La struttura Select Case non utilizza esplicitamente espressioni condizionali complete come quelle discusse sopra (vedere la sezione "Un corso sull'uso delle espressioni condizionali"). Dovresti suddividere ciascuna condizione in due parti, rappresentate come

Dal libro L'arte della programmazione del linguaggio di scripting Shell di Cooper Mendel

Dal libro Il linguaggio C: una guida per principianti di Prata Steven

Dal libro Linux e UNIX: programmazione della shell. Guida per gli sviluppatori. di Tainsley David

Dal libro C++ per principianti di Lippmann Stanley

Esempio 10-24. Usando il caso #!/bin/bashecho; echo "Premi un tasto e poi il tasto Invio." read Keypresscase "$Keypress" in ) echo "lettera minuscola";; ) echo "Lettera maiuscola";; ) echo "Numero";; *) echo "Segno di punteggiatura, spazio o qualcos'altro";;esac # Il puntatore è consentito

Dal libro UNIX: Sviluppo di applicazioni di rete autore Stephens William Richard

Esempio 10-25. Creazione di un menu utilizzando case #!/bin/bash# Esempio approssimativo di database clear # Cancellazione dello schermoecho " Elenco"echo " ------"echo "Seleziona la persona che ti interessa:"echoecho "[E]furgoni, Roland"echo " [J]ones, Mildred"echo "[S]mith, Julie"echo "[Z]ane, Morris"echoread personcase "$person" tra# Nota: la variabile è tra virgolette.

Dal libro dell'autore

Esempio 10-26. L'istruzione case consente di utilizzare la sostituzione del comando al posto della variabile analizzata #!/bin/bash# Sostituzione del comando in "case".case $(arch) in # il comando "arch" restituisce una stringa che descrive l'architettura hardware.i386) echo "Macchina basata su 80386";;i486) echo "Macchina basata su

Dal libro dell'autore

Esempio A-18. Generazione di numeri primi utilizzando l'operatore modulo (modulo) #!/bin/bash# primes.sh: Generazione di numeri primi senza l'utilizzo di array.# Autore: Stephane Chazelas.# Questo script non utilizza il classico algoritmo "Setaccio di Eratostene", #+ invece

Dal libro dell'autore

ESTENDERE L'OPERATORE IF USANDO else La forma più semplice dell'operatore if è quella che abbiamo appena usato: if(espressione)istruzione Tipicamente, un'espressione qui è intesa come un'espressione condizionale che confronta i valori di due quantità (ad esempio, x > sì

Dal libro dell'autore

18.8.2. Terminare l'esecuzione di un'istruzione case Considerare il seguente esempio. Lo script esegue un ciclo infinito finché l'utente non immette un numero maggiore di 5. Per interrompere il ciclo e tornare alla riga di comando dell'interprete, utilizzare il comando break.$ pg

Dal libro dell'autore

Dal libro dell'autore

Un semplice esempio di utilizzo della funzione di selezione Ora rielaboreremo il nostro codice del ricevitore fuori banda e utilizzeremo la funzione di selezione invece del segnale SIGURG. Il Listato 24.3 mostra il programma ricevente.Listato 24.3. Il programma ricevente, in cui (erroneamente)

Le strutture di controllo consentono di controllare la sequenza di esecuzione di un programma. Senza istruzioni di controllo, tutte le istruzioni del programma verranno eseguite da sinistra a destra e dall'alto verso il basso. Tuttavia, a volte è necessario eseguire ripetutamente una serie di istruzioni in modo automatico o risolvere un problema in modo diverso a seconda del valore delle variabili o dei parametri specificati dall'utente in fase di esecuzione. A questo scopo vengono utilizzati costrutti e cicli di controllo.

VBA supporta i seguenti costrutti decisionali:

Se. . . Poi. . . Altro

6.1 Se costruzione. . . Poi

Se costrutto. . . Then viene utilizzato quando è necessario eseguire una o un gruppo di istruzioni a seconda di alcune condizioni. La sintassi di questo costrutto consente di specificarlo in una o più righe del programma:

Condizione If Then espressione Condizione If Then espressione End If

In genere la condizione è un semplice confronto, ma può essere qualsiasi espressione con un valore calcolato. Questo valore viene interpretato come False se è null e qualsiasi valore non null viene considerato True. Se la condizione è vera, vengono eseguite tutte le espressioni dopo la parola chiave Then. Per eseguire in modo condizionale una singola istruzione, è possibile utilizzare la sintassi a riga singola o quella a più righe (costruzione a blocchi).

Le due affermazioni seguenti sono equivalenti:

Se presenteData< Now Then anyDate = Now If anyDate < Now Then anyDate = Now End If

Si noti che la sintassi dell'istruzione If è . . . Quindi per una riga non viene utilizzata l'istruzione End If. Per eseguire una sequenza di istruzioni se una condizione è vera, è necessario utilizzare un costrutto del blocco If. . . Poi. . . Finisci se.

Se presenteData< Now Then anyDate = Now Timer.Enabled = False " Запретить таймер. End If

Se la condizione è falsa, le istruzioni dopo la parola chiave Then non vengono eseguite e il controllo viene passato alla riga successiva (o alla riga dopo l'istruzione End If in un costrutto di blocco).

6.2 Se costruzione. . . Poi. . . Altro

definisce diversi blocchi di istruzioni, uno dei quali verrà eseguito a seconda della condizione:

Se condizione1 Allora espressione1 ElseIf condizione2 Allora espressione2. . . Else espressione-n End If

Una volta eseguita, la condizione1 viene verificata per prima. Se è falsa, VBA controlla la condizione successiva2 e così via, finché non trova una condizione vera. Una volta trovato, VBA esegue il blocco di istruzioni appropriato e trasferisce il controllo all'istruzione successiva all'istruzione End if. Questo costrutto può includere un blocco di istruzioni Else che VBA esegue se nessuna delle condizioni è soddisfatta.

Se costrutto. . . Poi. . . ElseIf è in realtà solo un caso speciale del costrutto If. . . Poi. . . Altro. Si noti che questa costruzione può avere un numero qualsiasi di blocchi ElseIf o anche nessuno. Un blocco Else può essere incluso indipendentemente dalla presenza o, al contrario, dall'assenza di blocchi ElseIf.

Sub esempio1() Dim a As Single, b As Single, x As Single Dim z As Double Call read("A1", a) Call read("B1", b) Let x = CSng(InputBox("enter x", "Inserimento dati", 0)) Se x<= a Then z = Sin(x) ElseIf x >= b Then z = Tan(x) Else: z = Cos(x) End If Call out("C1", z) End Sub

Tieni presente che puoi aggiungere un numero qualsiasi di blocchi Elself alla clausola If. . . Poi. Tuttavia, il numero di blocchi Elself può diventare così grande che il costrutto If. . . Quindi diventerà molto ingombrante e scomodo. In una situazione del genere, dovrebbe essere utilizzata un'altra struttura decisionale: Select Case.

6.3 Selezionare il design della custodia

Il costrutto Select Case è un'alternativa al costrutto If. . . Poi. . . Altrimenti quando si esegue un blocco costituito da un ampio insieme di istruzioni. Il costrutto Select Case fornisce una funzionalità simile a quella del costrutto If. . . Poi. . . Altrimenti, ma a differenza di esso, rende il codice più leggibile quando ci sono più selezioni.

Il costrutto Select Case opera su una singola espressione da testare, che viene valutata una volta inserita nel costrutto. VBA confronta quindi il risultato risultante con i valori specificati nelle istruzioni Case del costrutto. Se viene trovata una corrispondenza, viene eseguito il blocco di istruzioni associato all'istruzione Case:

Selezionare Maiuscole/minuscole espressione_testata ] ] . . . ] Fine Seleziona

Ogni elenco di espressioni è un elenco di uno o più valori. Se in un elenco è presente più di un valore, questi vengono separati da virgole. Ogni blocco di istruzioni contiene diverse o nessuna istruzione. Se risulta che il valore calcolato dell'espressione da testare corrisponde ai valori di diverse istruzioni Case, viene eseguito il blocco di istruzioni associato alla prima istruzione Case da tutte le corrispondenze trovate. VBA esegue il blocco di istruzioni associato all'istruzione Case Else (nota che è facoltativo) se non vengono trovate corrispondenze tra il valore dell'espressione da testare e i valori di tutti gli elenchi di istruzioni Case.

Consideriamo un esempio di calcolo della funzione

Sub esempio2() Const pi2 = 1.57 Dim x As Single Dim z As Double Let x = CSng(InputBox("enter x", "Data input", 0)) Select Case x Case -pi2 z = Sin(x) Case 0 z = Cos(x) Case pi2 z = Tan(x) Case Else MsgBox "Dati di input non validi!" Esci Sub Fine Seleziona Chiamata("D1", z) Fine Sub

Si noti che il costrutto Select Case valuta l'espressione solo una volta al momento dell'immissione, mentre il costrutto If. . . Poi. . . Else valuta un'espressione diversa per ciascuna istruzione Elself. Il costrutto If. . . Poi. . . Else può essere sostituito da un costrutto Select Case solo se l'istruzione If e ciascuna istruzione Elself valutano la stessa espressione.

L'operatore Select Case del linguaggio VBA è pensato per formare una selezione di un'operazione in funzione del valore; infatti questo operatore di selezione è un ibrido dell'operatore condizionale vba if then. Tutto è abbastanza semplice: nello script c'è una variabile il cui valore cambierà e, in base al valore, devi scegliere quale blocco di codice (espressione) eseguire.

Come nell'operatore condizionale, qui viene controllato un valore, ad esempio: c'è un campo di testo in cui è necessario inserire dati, ad esempio l'età. Successivamente, dovresti controllare il valore inserito; se il valore è inferiore a 18, visualizzare un testo; se il valore è compreso tra 19 e 30, visualizzare un altro testo; altrimenti, visualizzare un terzo testo. Come già accennato, per tali scopi è possibile utilizzare l'operatore condizionale, tuttavia l'operatore Select Case VBA è un'opzione più compatta.

La sintassi dell'istruzione VBA Select Case è:

Seleziona Significato caso
Seleziona la condizione 1
Insieme dell'operatore

Seleziona la condizione 2
Insieme dell'operatore

Seleziona la condizione 3
Insieme dell'operatore

….

Seleziona la condizione N
Set operatore N

Caso Altro
Altri operatori


Fine Seleziona

Per prima cosa viene controllato il parametro “valore”, che può essere sia di tipo stringa che di tipo numerico; dopo aver controllato il parametro avviene un confronto alternato (partendo dall'inizio) con ogni condizione che viene specificata negli operatori Seleziona Caso VBA. Se si verifica una corrispondenza per la "condizione 1", verrà eseguito il "set di istruzioni 1", dopodiché verrà eseguito il codice successivo Fine Seleziona. L'operatore Case Else significa formalmente "Altrimenti", ovvero se nessuna delle condizioni è vera, verrà eseguito l'insieme di operatori specificati per Case Else. L'espressione VBA stessa lo è Caso Altroè facoltativo, come “altri operatori”, può essere omesso se necessario, si scrive sempre alla fine.

Diamo un'occhiata a questo codice di esempio:

Private Sub CommandButton1_Click() Dim a a = TextBox1.Text Seleziona Case a Case Is< 100 Label1.Caption = "Il valore inserito è inferiore a 100" Caso da 101 a 150 Etichetta1.Didascalia = "Il valore inserito è maggiore di 100 e minore di 151" Caso da 151 a 200 Etichetta1.Didascalia = "Il valore inserito è maggiore di 151 e minore di 201" Caso Altro Label1.Caption = "Altro valore, istruzione VBA Seleziona caso" Fine Seleziona Fine Sub Private Sub UserForm_Activate() "impostazioni iniziali "***************************** Label1.Caption = "" " dimensione del testo Label1.FontSize = 15 " colore del testo Label1.ForeColor = &HFF0000 "allineamento al centro Etichetta1.TextAlign = fmTextAlignCenter "abilita il ritorno a capo della riga Etichetta1.WordWrap = Vero " scritta sul pulsante CommandButton1.Caption = "Mostra" "contenuto iniziale del campo di testo Casella di testo1.Text = "Inserisci qualsiasi valore" Fine sott

In questo esempio abbiamo una procedura PulsanteComando1_Clic, che è responsabile dell'elaborazione dei clic sui pulsanti. La variabile a memorizzerà il valore del campo di testo TextBox1 (proprietà Text). Poi arriva l'istruzione di selezione della lingua VBA Select case, in cui viene controllato il valore della variabile a, dopodiché il valore viene confrontato con le condizioni:

  • Il caso è< 100 – se il valore della variabile a è inferiore a 100
  • Caso da 101 a 150– se il valore è compreso tra 101 e 150
  • Caso da 151 a 200– range di prova da 151 a 200
  • Caso Altro– in realtà, tutti gli altri significati.

A seconda dell'esito del controllo verrà registrato un messaggio informativo nella proprietà Caption dell'oggetto.

Procedura UserForm_Attiva contiene righe di codice per la configurazione iniziale dei componenti del modulo: colore, dimensione, testo iniziale e così via.

Puoi vedere il risultato dell'esecuzione della macro nella figura. Per creare una connessione tra una macro e un form è necessario scrivere nel blocco di codice relativo al modulo:

Sub OBModule() OBForm.Show End Sub

Qui Modulo OB– nome del modulo (macro), e OBForm– nome del modulo.

Vale la pena notare che anche se la condizione corrisponde, ad esempio: meno di 100 e più di 99, nell'istruzione Select Case verrà eseguita solo la prima condizione corrispondente e tutte le altre verranno ignorate.

I migliori articoli sull'argomento