Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA: vb excel ongelma

Tiri [31.10.2010 15:45:49]

#

Olen tekemässä pientä ja simppeliä työtuntien syöttöohjelmaa exceliin käyttäen activex-työkaluja.

Ongelmani on varmaan todella yksinkertainen, mutta en todellakaan ymmärrä mikä aihettaa seuraavan:

Dim aika As String
Private Sub CommandButton1_Click()

If (Range("D7") = "") Then
aika = InputBox("Syötä aloitusaika")
Range("D7") = aika

If (Range("E7") = "") Then
aika = InputBox("Syötä lopetusaika")
Range("E7") = aika

If (Range("F7") = "") Then
aika = InputBox("Syötä lounastauon pituus")
Range("F7") = aika

Else

If (Range("D8") = "") Then
aika = InputBox("Syötä aloitusaika")
Range("D8") = aika

If (Range("E8") = "") Then
aika = InputBox("Syötä lopetusaika")
Range("E8") = aika

If (Range("F8") = "") Then
aika = InputBox("Syötä lounastauon pituus")
Range("F8") = aika




End If
End If
End If
End If
End If
End If


End Sub

Eli jostain syystä tuon Else-vaiheen jälkeen homma ei toimi.
Vaikka solu D8 on tyhjä, niin siltikää inputbox ei näyttäydy...

Kiitos etukäteen jo jos joku valaisee asian :)

Mod. lisäsi kooditagit. Ole hyvä ja lue ohjeet.

Grez [31.10.2010 15:55:26]

#

Voisit käyttää kooditageja ja järjellistä sisennystä, niin ongelma saattaisi ratketa kuin itsestään..

Tässä siis koodisi hieman selkeämmin esitettynä (en muuttanut mitään)

Dim aika As String
Private Sub CommandButton1_Click()

	If (Range("D7") = "") Then
		aika = InputBox("Syötä aloitusaika")
		Range("D7") = aika

		If (Range("E7") = "") Then
			aika = InputBox("Syötä lopetusaika")
			Range("E7") = aika

			If (Range("F7") = "") Then
				aika = InputBox("Syötä lounastauon pituus")
				Range("F7") = aika
			Else
				If (Range("D8") = "") Then
					aika = InputBox("Syötä aloitusaika")
					Range("D8") = aika

					If (Range("E8") = "") Then
						aika = InputBox("Syötä lopetusaika")
						Range("E8") = aika

						If (Range("F8") = "") Then
							aika = InputBox("Syötä lounastauon pituus")
							Range("F8") = aika
						End If
					End If
				End If
			End If
		End If
	End If
End Sub

Eli tuostahan näkee selvästi, että jos esim. D7 ei ole tyhjä, niin mitään ei tehdä. D8:n sisällöllä ei ole mitään merkitystä, ellei D7 ja E7 ole tyhjä ja F7 ei-tyhjä.

Olisit varmasti huomannut ongelman erittäin helposti ihan normaaleilla debuggausrutiineilla. Eli olisit laittanut vaikka ekalle riville breakpointin (F9) ja sitten hyppinyt rivi kerrallaan eteenpäin (F8), niin olisit huomannut kuinka suoritus menee heti viimeiseen end if:iin jos D7 ei ole tyhjä.

hannlapp [15.11.2010 14:08:40]

#

tai näin:

Dim aika As String
Private Sub CommandButton1_Click()

If (Range("D7") = "") Then
aika = InputBox("Syötä aloitusaika")
Range("D7") = aika
ElseIf (Range("E7") = "") Then
aika = InputBox("Syötä lopetusaika")
Range("E7") = aika
ElseIf (Range("F7") = "") Then
aika = InputBox("Syötä lounastauon pituus")
Range("F7") = aika
ElseIf (Range("D8") = "") Then
aika = InputBox("Syötä aloitusaika")
Range("D8") = aika
ElseIf (Range("E8") = "") Then
aika = InputBox("Syötä lopetusaika")
Range("E8") = aika
ElseIf (Range("F8") = "") Then
aika = InputBox("Syötä lounastauon pituus")
Range("F8") = aika
End If
End Sub

Mod. lisäsi kooditagit.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta