Jag håller på med ett program i Visual Basic som har gått väldigt bra tills det nu kommer till att subtrahera från en variabel. Jag vet hur man ska skriva det men tolkningen blir fel t.e.x. att man har 35 och sedan ska ta bort 23 så ska det bli det rätta svaret fast det blir -23 istället. Jag har sökt på internet men hittar inget förutom tyska sidor.
Om ni vet hur man fixar det här felet, så är jag tacksam om jag får ett svar.
Bara så ni vet så ska det bli som ett privat shoppingprogram som man kan köpa saker, det är bara till för träning i VB alltså.
Subtrahera i VB?
17 svar · 602 visningar · startad av fattyman
Okej, här kommer det. Det var det snabbaste och enklaste jag kunde komma på.
Dim Money As Integer
Money = Money - 23
Den andra raden är i en if-sats.
och var får Money sitt värde innan du subtraherar?
Det borde väl ge värdet -23
Money får sitt värde en bit innan, glömde att ta med den biten: Money = 35 är det som får Money att bli 35 från början då man startar programmet.
Se till att dim-satsen hamnar högst upp i funktionen.
Testade nyss med dim-satsen högst upp, fast det kom upp ett antal andra problem. Är talet under 20 som 12 så blir det -12 men är det över 20 så blir det inget minus.
Skumt. Troligen sätter du något i fel ordning. Och dessutom så är 12-23=-11 och inte -12.
Men du kanske kan posta lite mer kod? Det är svårt att läsa vad som står på din skärm. :)
Det består av 4 olika if-satser i mitten som alla ser likadana ut, enda skillnaden är att Money är olika subtraherad i varje sats. Så här ser en sats ut:
If TreeView1.SelectedItem.Text = "????? {½ kg} (12 kr)" Then
Money = Money - 12
Label3.Caption = "Pengar: " + StrConv(Money, vbProperCase)
End If
Ok... Men det som är intressant är vad som händer innan if-satserna. Posta hela funktionen helt enkelt.
Private Sub CommandButton1_Click()
Dim Money As Integer
CommandButton1.Visible = False
Label1.Visible = False
1
Label2.Visible = True
If ProgressBar1.Value < 100 Then
ProgressBar1.Value = ProgressBar1.Value + 1
GoTo 1
Else
Label2.Caption = "Klar!"
If ProgressBar1.Value = 100 Then
ProgressBar1.Value = ProgressBar1.Value - 1
End If
ProgressBar1.Visible = False
Label2.Visible = False
MultiPage1.Visible = True
TreeView1.Nodes.Add.Text = "????? (18 kr)"
TreeView1.Nodes.Add.Text = "????? (17 kr)"
TreeView1.Nodes.Add.Text = "????? {½ kg} (12 kr)"
TreeView1.Nodes.Add.Text = "????? {1 kg} (23 kr)"
Money = 35
Label3.Caption = "Pengar: " + StrConv(Money, vbProperCase)
End If
End Sub
Det är allt som är före, hela programmets funktioner startas med en knapp så det kan låta lite ovanligt.
Posta hela koden istället. Nu vet jag ju inte precis var if-satserna befinner sig.
Private Sub CommandButton1_Click()
Dim Money As Integer
CommandButton1.Visible = False
Label1.Visible = False
1
Label2.Visible = True
If ProgressBar1.Value < 100 Then
ProgressBar1.Value = ProgressBar1.Value + 1
GoTo 1
Else
Label2.Caption = "Klar!"
If ProgressBar1.Value = 100 Then
ProgressBar1.Value = ProgressBar1.Value - 1
End If
ProgressBar1.Visible = False
Label2.Visible = False
MultiPage1.Visible = True
TreeView1.Nodes.Add.Text = "Mjölk (18 kr)"
TreeView1.Nodes.Add.Text = "Bröd (17 kr)"
TreeView1.Nodes.Add.Text = "Godis {½ kg} (12 kr)"
TreeView1.Nodes.Add.Text = "Chips {1 kg} (23 kr)"
Money = 35
Label3.Caption = "Pengar: " + StrConv(Money, vbProperCase)
End If
End Sub
Private Sub CommandButton2_Click()
If TreeView1.SelectedItem.Text = "Mjölk (18 kr)" Then
Money = Money - 18
Label3.Caption = "Pengar: " + StrConv(Money, vbProperCase)
End If
If TreeView1.SelectedItem.Text = "Bröd (17 kr)" Then
Money = Money - 17
Label3.Caption = "Pengar: " + StrConv(Money, vbProperCase)
End If
If TreeView1.SelectedItem.Text = "Godis {½ kg} (12 kr)" Then
Money = Money - 12
Label3.Caption = "Pengar: " + StrConv(Money, vbProperCase)
End If
If TreeView1.SelectedItem.Text = "Chips {1 kg} (23 kr)" Then
Money = 23
Label3.Caption = "Pengar: " + StrConv(Money, vbProperCase)
End If
End Sub
Det är all kod, jag har inte hunnit så långt med det. Började med det idag.
I den sista satsen tilldelar du ju värdet 23 till Money istället för att subtrahera!
Åh, där höll jag på att pröva på andra sätt fast det fungerade inte. Jag tar bara dom andra satserna och sedan har jag en att pröva runt med. Nu är alla if-satser så att oavsett nummer så blir det minus.
Eftersom du deklarerar Money inuti din subrutin är den lokal för den subrutinen. Dvs, alla tillfällen du försöker använda den utanför, är den odefinierad. Försöker du dra bort ett tal från ett odefinierat får du helt enkelt ett negativt tal.
Deklarera variabeln utanför alla subrutiner / funktioner (ex. överst), så borde du kunna använda den som du vill, under förutsättning att du ger den ett värde innan du försöker dra bort något från den.
Mvh
Det fungerade!! Tack så mycket för hjälpen, nu kan jag fortsätta att programmera. :)
Nu gäller det bara att klura ut hur man får ut en exe-fil av allting.
Allt vart mycket luftigare då jag bytte från QBasic till VB.