|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jan 2004
Città: Perugia
Messaggi: 326
|
Problemi di calcolo con VBA
Ciao a trutti e grazie per leggere il mio problema: ho cercato di fare un piccolo programmino in VBA , semplice nulla di che, praticamente in una Form ho inserito 3 optionbutton che se cliccati mi cambiano la caption di un commandbutton. Poi ho inserito 6 textbox dove nella sesta mi dovrebbe dare il risultato di alcuni calcoli rendendo i dati inseriti nella altre textbox. In poche parole volevo creare un programmino che inserendo i valori nelle textbox mi calcolassero l'area del cerchio, del quadrato e del triangolo. Ho impostato che al click di ogni optionbutton mi cambiasse la caption del commandbutton perchè al verificarsi della diversa caption mi facesse i calcoli di una o dell'altra forma, poi ho scritto quanto seghe nell'evento click del commandbutton:
Private Sub Command1_Click() If Command1.Caption = "Area triangolo" And Text1.Text = "" And Text2.Text = "" Then MsgBox "Inserisci i dati nei campi", vbCritical, "Dati mancanti" Else Text6.Text = Text1.Text * Text2.Text / 2 End If If Command1.Caption = "Area quadrato" And Text3.Text = "" And Text4.Text = "" Then MsgBox "Inserisci i dati nei campi", vbCritical, "Dati mancanti" Else Text6.Text = Text3.Text * Text4.Text End If If Command1.Caption = "Area cerchio" And Text5.Text = "" Then MsgBox "Inserisci i dati nei campi", vbCritical, "Dati mancanti" Else Text6.Text = (Text5.Text) ^ 2 * 3.14 End If End Sub Mi sembrerebbe tutto in regola se non che mi da errore "tipo non corrispondente" sia che lasci le textbox vuote che se ci metta dei valori. Allora ho provato a dare queste istruzioni: Private Sub Command1_Click() If Command1.Caption = "Area triangolo" And Text1.Text <> "" And Text2.Text <> "" Then Text6.Text = Text1.Text * Text2.Text / 2 Else MsgBox "Inserisci i dati nei campi", vbCritical, "Dati mancanti" End If If Command1.Caption = "Area quadrato" And Text3.Text <> "" And Text4.Text <> "" Then Text6.Text = Text3.Text * Text4.Text End If If Command1.Caption = "Area cerchio" And Text5.Text <> "" Then Text6.Text = (Text5.Text) ^ 2 * 3.14 End If End Sub Così funziona già molto meglio nel primo caso se non metto valori mi compare giustamente la msgbox che non ho inserito i valori se metto i valori mi fà il calcolo, quindi funziona perfettamente, ma negli altri due casi mi da la mgbox sia che metta i valori che se non li metto, il calcolo lo fà però comunque solo che compare questa msgbox sempre. Qualcuno mi può aiutare a capire dove sbaglio? Se non è tutto chiaro e credete sia necessario vi mando il file di excel dove l'ho creato, è comunque scaricabile subito da quà: http://bluelightning.altervista.org/aree.zip Grazie e tanti saluti |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Aug 2001
Città: Gerenzano
Messaggi: 129
|
Il problema riguardo al fatto che ti compare il messaggio "tipo non corrispondente" è causato dal fatto che tu esegui delle operazioni con dei tipi stringa (Il testo delle textbox).
Dovresti invece utilizzare la funzione VAL per recuperare il valore numerico. Il problema del MsgBox che compare sempre, semplicemente è causato dal fatto che la prima condizione IF .. THEN ... ELSE non è verificata nel caso di calcolo dell'area del quadrato o del cerchio e quindi verrà sempre eseguito il comando MSGBOX nel case else. Mi spiego meglio If Command1.Caption = "Area triangolo" And Text1.Text <> "" And Text2.Text <> "" Then Se stai calcolando l'area del quadrato, la caption del command1 è "Area quadrato" e quindi la condizione IF non è verificata perciò viene eseguito il codice nella parte ELSE è cioè: MsgBox "Inserisci i dati nei campi", vbCritical, "Dati mancanti" Il codice giusto è questo: Codice:
Private Sub Command1_Click() If Command1.Caption = "Area triangolo" And Text1.Text <> "" And Text2.Text <> "" Then Text6.Text = Text1.Text * Text2.Text / 2 ElseIf Command1.Caption = "Area quadrato" And Text3.Text <> "" And Text4.Text <> "" Then Text6.Text = Text3.Text * Text4.Text ElseIf Command1.Caption = "Area cerchio" And Text5.Text <> "" Then Text6.Text = (Text5.Text) ^ 2 * 3.14 Else MsgBox "Inserisci i dati nei campi", vbCritical, "Dati mancanti" End If End Sub Esempio: Codice:
' *** Da mettere nella parte di 'Dichiarazioni' ' Private Enum ModalitaCalcoloEnum mcTriangolo = 0 mcQuadrato mcCerchio End Enum Private m_eModalita As ModalitaCalcoloEnum ' ------------------- Private Sub Command1_Click() Dim bDatiSet As Boolean Dim nValore1 As Double Dim nValore2 As Double Dim nArea As Double Select Case m_eModalita ' *** Impostata a livello di 'dichiarazioni' Case mcTriangolo nValore1 = Val(Text1.Text) > 0 nValore2 = Val(Text2.Text) > 0 bDatiSet = (nValore1 > 0 And nValore2 > 0) ' *** è meglio fare così => bDatiSet = IsNumeric(Text1.Text) AND IsNumeric(Text2.Text) *** nArea = nValore1 * nValore2 / 2 Case mcQuadrato nValore1 = Val(Text3.Text) > 0 nValore2 = Val(Text4.Text) > 0 bDatiSet = (nValore1 > 0 And nValore2 > 0) nArea = nValore1 * nValore2 Case mcCerchio nValore1 = Val(Text5.Text) > 0 bDatiSet = (nValore1 > 0) nArea = nValore1 ^ 2 * 3.14 End Select If bDatiSet Then Text6.Text = CStr(nArea) Else MsgBox "Inserisci i dati nei campi", vbCritical, "Dati mancanti" End If End Sub ![]()
__________________
E' quasi tutto relativo! |
![]() |
![]() |
![]() |
#3 | |
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
Re: Problemi di calcolo con VBA
Quote:
a volte è tutto scritto: basta leggere. ![]() |
|
![]() |
![]() |
![]() |
#4 |
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
comunque numero 51078 non ti preoccupare,
in effetti tutti prima di scopare fanno quanto seghe: è una giusta esercitazione. ![]() e qualcuno anche dopo. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:27.