Kann ich innerhalb eines Makros Multiplizieren???

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Kann ich innerhalb eines Makros Multiplizieren???

von Stephan » Mo, 11.09.2006 23:31

Na weil du sonst Informationen in Form von Nachkommastellen verlierst
Stimmt - das leuchtet ein.

Danke für den Hinweis.


Gruß
Stephan

von Mihilist » Mo, 11.09.2006 13:24

Stephan hat geschrieben:wobei ich mir einzig noch nicht im Klaren bin warum <Double>*<Integer>=<Double> ist.
Na weil du sonst Informationen in Form von Nachkommastellen verlierst ;)
int(3) * double(5,1) = double(15,3) <> int(15)

von Stephan » Fr, 08.09.2006 02:41

Nun ja, ich habe bis jetzt alles Mögliche probiert um eine Erklärung zu finden, ich habe nun auch eine gefunden.
Zunächst einmal - dieser Code funktioniert:

Code: Alles auswählen

if oSheet.getCellByposition(45,2).value = 0 then 
   r = 255: g = 255: b = 255 
else 
select case 1*oSheet.getCellByposition(1,26).value 
   case >= (13*oSheet.getCellByposition(45,2).value) 
      r = 0: g = 174: b = 0 
   Msgbox "Case1" 
   case >= (10*oSheet.getCellByposition(45,2).value) 
      r = 138: g = 255: b = 0 
Msgbox "Case2" 
   case >= (7*oSheet.getCellByposition(45,2).value) 
      r = 230: g = 255: b = 0 
Msgbox "Case3" 
   case >= (4*oSheet.getCellByposition(45,2).value) 
      r = 255: g = 218: b = 0 
Msgbox "Case4" 
   case >= (oSheet.getCellByposition(45,2).value) 
      r = 255: g = 138: b = 0  
Msgbox "Case5"  
   case >= 0 
      r = 255: g = 0: b = 0 
Msgbox "Case6" 
End select 
end if 
oSheet.getCellByposition(1,26).CellBackcolor = RGB(r,g,b)

Die Erklärung ergibt sich quasi aus der Erläuterung zu Select-Case aus der Hilfe von OOo, dort heißt es:

Select...Case-Anweisung [Laufzeit]
Definiert einen oder mehrere Befehlsblöcke, die in Abhängigkeit von dem Ergebnis eines bestimmten Ausdrucks stehen.
Syntax:
Select Case Bedingung Case Ausdruck Anweisungsblock[Case Ausdruck2 Anweisungsblock][Case Else] Anweisungsblock End Select
Parameter:
Bedingung: Ein beliebiger Ausdruck, der steuert, ob der auf den jeweiligen Case-Zweig folgende Anweisungsblock ausgeführt wird.
Ausdruck: Ein beliebiger Ausdruck, der mit dem Typ des Ausdrucks "Bedingung" kompatibel ist. Der auf den jeweiligen Case-Zweig folgende Anweisungsblock wird ausgeführt, wenn der Wert von Bedingung gleich dem Wert von Ausdruck ist.


somit ist es augenscheinlich so das der Ausdruck:

Code: Alles auswählen

oSheet.getCellByposition(1,26).value
zum Ausdruck:

Code: Alles auswählen

13*oSheet.getCellByposition(45,2).value
nicht "kompatibel" ist, der Ausdruck:

Code: Alles auswählen

1*oSheet.getCellByposition(1,26).value
hingegen schon.


Nun kannst Du sicherlich so gut wie ich sehen, das man wenn man sich die Ausdrücke ansieht versteht was "kompatibel" wohl meint, mit einer Erklärung hatte ich aber zunächst Schwierigkeiten, aber es gibt eine:

Code: Alles auswählen

oSheet.getCellByposition(1,26).value 
ist vom Typ Double, hingegen ist:


vom Typ Integer, und:

Code: Alles auswählen

1*oSheet.getCellByposition(1,26).value 
ebenfalls vom Typ Double, wobei ich mir einzig noch nicht im Klaren bin warum <Double>*<Integer>=<Double> ist.



Gruß
Stephan

von Stephan » Fr, 08.09.2006 00:44

Ok, doch ich verstehe Dein Problem.

Beseitigen lässt es sich durch:

Code: Alles auswählen

if oSheet.getCellByposition(45,2).value = 0 then 
   r = 255: g = 255: b = 255 
else 
x = oSheet.getCellByposition(45,2).value
select case oSheet.getCellByposition(1,26).value 
   case >= 13*x
      r = 0: g = 174: b = 0 
   case >= 10*x 
      r = 138: g = 255: b = 0 
   case >= 7*x 
      r = 230: g = 255: b = 0 
   case >= 4*x 
      r = 255: g = 218: b = 0 
   case >= x 
      r = 255: g = 138: b = 0    
   case >= 0 
      r = 255: g = 0: b = 0 
End select 
end if 
oSheet.getCellByposition(1,26).CellBackcolor = RGB(r,g,b)
nur erklärt es das Problem deshalb nicht weil auch:

Code: Alles auswählen

if oSheet.getCellByposition(45,2).value = 0 then 
   r = 255: g = 255: b = 255 
else 
x = oSheet.getCellByposition(45,2).value
select case oSheet.getCellByposition(1,26).value 
   case >= (13*x)
      r = 0: g = 174: b = 0 
   case >= (10*oSheet.getCellByposition(45,2).value) 
      r = 138: g = 255: b = 0 
   case >= (7*oSheet.getCellByposition(45,2).value) 
      r = 230: g = 255: b = 0 
   case >= (4*oSheet.getCellByposition(45,2).value) 
      r = 255: g = 218: b = 0 
   case >= (oSheet.getCellByposition(45,2).value) 
      r = 255: g = 138: b = 0    
   case >= 0 
      r = 255: g = 0: b = 0 
End select 
end if 
oSheet.getCellByposition(1,26).CellBackcolor = RGB(r,g,b)
funktioniert. Ich habe aber keine Ahnung warum.






Gruß
Stephan

von Stephan » Fr, 08.09.2006 00:05

Meiner Meinung nach garnichts. Ich habe den Code hier auch ausprobiert und er funktioniert.

Kriegst Du denn eine Fehlermeldung oder tut sich nur nichts?

Falls es keine Fehlermeldung gibt würde ich das Ganze erstmal im Einzelschritt-Modus testen ob der Ablauf korrekt ist. Starte das Makro hierzu mit der Schaltfläche "Step Into" und kontrolliere ob der Ablauf richtig ist, insbesondere ob in der case-Schleife korrekt verzweigt wird.

Oder Du verwendest das zu testen:

Code: Alles auswählen

if oSheet.getCellByposition(45,2).value = 0 then 
   r = 255: g = 255: b = 255 
else 
select case oSheet.getCellByposition(1,26).value 
   case >= (13*oSheet.getCellByposition(45,2).value) 
      r = 0: g = 174: b = 0 
	Msgbox "Case1"
   case >= (10*oSheet.getCellByposition(45,2).value) 
      r = 138: g = 255: b = 0 
Msgbox "Case2"
   case >= (7*oSheet.getCellByposition(45,2).value) 
      r = 230: g = 255: b = 0 
Msgbox "Case3"
   case >= (4*oSheet.getCellByposition(45,2).value) 
      r = 255: g = 218: b = 0 
Msgbox "Case4"
   case >= (oSheet.getCellByposition(45,2).value) 
      r = 255: g = 138: b = 0  
Msgbox "Case5"  
   case >= 0 
      r = 255: g = 0: b = 0 
Msgbox "Case6"
End select 
end if 
oSheet.getCellByposition(1,26).CellBackcolor = RGB(r,g,b)

Gruß
Stephan

von LSH_Dackel » Do, 07.09.2006 23:39

Tja in der kürze liegt die Würze. Oder das Problem. :wink:

Denn mit der msgbox funzt es aber in meinem makro net.

Code: Alles auswählen

if oSheet.getCellByposition(45,2).value = 0 then 
   r = 255: g = 255: b = 255
else
select case oSheet.getCellByposition(1,26).value
   case >= (13*oSheet.getCellByposition(45,2).value)
      r = 0: g = 174: b = 0
   case >= (10*oSheet.getCellByposition(45,2).value)
      r = 138: g = 255: b = 0
   case >= (7*oSheet.getCellByposition(45,2).value)
      r = 230: g = 255: b = 0
   case >= (4*oSheet.getCellByposition(45,2).value)
      r = 255: g = 218: b = 0
   case >= (oSheet.getCellByposition(45,2).value)
      r = 255: g = 138: b = 0   
   case >= 0
      r = 255: g = 0: b = 0 
End select 
end if
oSheet.getCellByposition(1,26).CellBackcolor = RGB(r,g,b) 
Aber was is daran falsch??

von Stephan » Do, 07.09.2006 23:08

vielleicht enthält die Zelle keinen numerischen Wert?

Außerdem ist Dein Beispielcode wieder reichlich knapp :wink: , so das ich nicht weiß ob das Ganze in Etwas Weiteres eingebunden ist. Als einzelne Zeile funktioniert das nicht weil der Wert nirgens zugewiesen wird.

Es geht:

Code: Alles auswählen

Sub Main
oSheet = ThisComponent.Sheets(0)
a = (13*oSheet.getCellByposition(45,2).value)
msgbox a
End Sub
oder:

Code: Alles auswählen

Sub Main
oSheet = ThisComponent.Sheets(0)
msgbox (13*oSheet.getCellByposition(45,2).value)
End Sub




Gruß
Stephan

Kann ich innerhalb eines Makros Multiplizieren???

von LSH_Dackel » Do, 07.09.2006 22:43

Hi Leute ich bins scho wieder.

Addieren und Subtrahieren innerhalb eines makros funzt ja prima.

Aber wie steht es mit Multiplizieren geht das der net???

Bis jetzt weis ich nur das das hier net funzt!

Code: Alles auswählen

(13*oSheet.getCellByposition(45,2).value)
Schon mal danke im vorraus

MFG Dackel

Nach oben