Seite 1 von 1

Probleme mit Case Fällen

Verfasst: Mo, 23.04.2007 14:11
von Simon23
Hallo,

nachdem ich mit kräftiger Hilfe von Thomas nun meine ersten Versuche mit Basic unternehme, habe ich ein kleines Programm geschrieben.
Das Programm ist für ein Spieltheoretisches Modell, in dem als Ergebnis die Fälle A-I auftreten können.
Diese Fälle hängen von verschiedenen Parametern ab (Kosten, Kostensenkung, horizontale Differenzierung, vertikale Differenzierung, usw.).
Die Parameter werden auch durch das Basic Programm wie gewünscht variiert.
Ich möchte einen Zähler implementieren, der in die Zellen G1 - G10 die Anzahl der aufgetretenen Fällen angibt.

Allerdings komme ich mit der Case Funktion noch nicht so zurecht:

Code: Alles auswählen

REM Das Makro
sub Beispiel_makro
  oDoc = thisComponent  'Zugiff auf das Dokument
  oSheet = oDoc.sheets(0)  'Erstes Tabellenblatt
  oZelleY = oSheet.getCellRangeByName("B3")   'Zelle B3
  oZelleN = oSheet.getCellRangeByName("B4")   'Zelle B4
  oZelleX = oSheet.getCellRangeByName("B5")   'Zelle B5
  oZelleC = oSheet.getCellRangeByName("B6")   'Zelle B6
  oZelleI1 = oSheet.getCellRangeByName("B7")   'Zelle B7
  oZelleI2 = oSheet.getCellRangeByName("B8")   'Zelle B8
  oZelleJ1 = oSheet.getCellRangeByName("B9")   'Zelle B9
  oZelleJ2 = oSheet.getCellRangeByName("B10")   'Zelle B10
  
  oZelleFallA = oSheet.getCellRangeByName("G2") 'Zähler für Fall A
  oZelleFallB = oSheet.getCellRangeByName("G3") 'Zähler für Fall B
  oZelleFallC = oSheet.getCellRangeByName("G4") 'Zähler für Fall C
  oZelleFallD = oSheet.getCellRangeByName("G5") 'Zähler für Fall D
  oZelleFallE = oSheet.getCellRangeByName("G6") 'Zähler für Fall E
  oZelleFallF = oSheet.getCellRangeByName("G7") 'Zähler für Fall F
  oZelleFallG = oSheet.getCellRangeByName("G8") 'Zähler für Fall G
  oZelleFallI = oSheet.getCellRangeByName("G9") 'Zähler für Fall I
  
  oZelleB12 = oSheet.getCellRangeByName("B12")   'Zelle B12
  oZelleERG = oSheet.getCellRangeByName("D16")   'Zelle D16
  
  oZelleY.value = 1   'Startwert 1
  oZelleC.value = 0.5   'Startwert 0.5
  

oZelleFallA.value = 0
oZelleFallB.value = 0
oZelleFallC.value = 0
oZelleFallD.value = 0
oZelleFallE.value = 0
oZelleFallF.value = 0
oZelleFallG.value = 0
oZelleFallI.value = 0
  
	REM Jetzt  Y varieren
  	while oZelleY.value > 0
      
		    REM Jetzt N varieren		   
    		oZelleN.value=oZelleY.value
			while oZelleN.value > 0   
  
					REM Jetzt c varieren		   
					oZelleC.value = 0.5
					while oZelleC.value > 0   
						
							REM Jetzt x varieren		   
							oZelleX.value = oZelleC.value
							while oZelleX.value > 0  
						
   	  	 						Fall = oZelleERG.string
										Select Case Fall
										Case "A"
											oZelleFallA.value = oZelleFallA.value + 1
										Case "B"
											oZelleFallB.value = oZelleFallB.value + 1
										Case "C"
											oZelleFallC.value = oZelleFallC.value + 1
										Case "D"
											oZelleFallD.value = oZelleFallD.value + 1
										Case "E"
											oZelleFallE.value = oZelleFallE.value + 1
										Case "F"
											oZelleFallF.value = oZelleFallF.value + 1
										Case "G"
											oZelleFallG.value = oZelleFallG.value + 1
										Case "I"
											oZelleFallI.value = oZelleFallI.value + 1
										End Select
   	  	 						
   	  	 						
   	  	 						wait(500)   ' etwas warten
 	  	  	 		 			oZelleX.value = ((oZelleX.value * 10) - 1)/10   'verringerung um eins
 		 					wend 'Ende der X Schleife

						wait(500)   ' etwas warten
						oZelleC.value = ((oZelleC.value * 10) - 1)/10   'verringerung um eins
 		 			wend 'Ende der C Schleife

				wait(500)   ' etwas warten
 	 			oZelleN.value = ((oZelleN.value * 10) - 1)/10   'verringerung um eins	 
  			wend 'Ende der N Schleife
  		
  		wait(500)   ' etwas warten
        oZelleY.value = ((oZelleY.value * 10) - 1)/10   'verringerung um eins
    wend 'Ende der Y Schleife

end sub
Es werden nur die Fälle A und G gezählt, obwohl andere Fälle auch auftreten können.

Ist mit Sicherheit ein Programm Fehler.

Verfasst: Mo, 23.04.2007 15:01
von Simon23
Hi,

funktioniert anscheinend doch. Es liegt daran, dass die Case Abfrage VOR der Parameteränderung liegt.

Simon