Hallo,
habe mir aus Bruchstücken Makros zusammengebastelt, die alle Zellen/Werte eines markierten Bereichs durch einen Faktor dividieren (“DivideSelectedCells”). Das klappte bisher auch ganz gut. Danach habe ich mir das Makro zu MultiplySelectedCells angepasst, um die Zahlen mit einem Faktor multiplizieren zu können. Schon beim ersten Aufruf kam ein Fehler: Datentypen unverträglich, der sich natürlich auch nach jeden Aufruf immer wiederholte.
Danach habe ich das erste Makro (DivideSelectedCells) nochmals laufen lassen und an der gleichen Stelle wie bei MultiplySelected Cells kam nun der gleiche Fehler. Was läuft hier falsch? Ich habe zwar das Array ReDimensioniert, aber der Fehler blieb.
Wer kann helfen ? Natürlich wäre es einfacher, die ganze Berechnung über “Inhalte einfügen | Rechenoperationen | Dividieren bzw. Multiplizieren” durchzuführen, aber als Neuling würde mich schon interessieren, ob es einen Ausweg gibt.
Hier also die Makros zum Dividieren:
Sub DivideSelectedCells
' HAUPMAKRO, das die anderen aufruft'
Dim dDivisor As Double
Dim oSels
dDivisor = InputBox("Bitte den Faktor eingeben" & Chr(10)&"Dezimalzahlen mit Punkt","Division durch Faktor","0.001")
' Wenn dDivisor = 0.001 dann mit 1000 mulitplizieren'
oSels = ThisComponent.getCurrentController().getSelection()
DivideRegions(oSels, dDivisor)
End Sub
Sub DivideRange(oRange, dDivisor As Double)
' wird für DivideSelectedCells benötigt'
Redim oData()
Redim oRow()
Dim i As Integer
Dim j As Integer
oData() = oRange.getDataArray()
For i = LBound(oData()) To UBound(oData())
oRow() = oData(i)
For j = LBound(oRow()) To UBound(oRow())
oRow(j) = oRow(j) / dDivisor
' -- FEHLER Unzulässiger Wert oder Datentyp:Datentypen unverträglich'
Next
Next
oRange.setDataArray(oData())
End Sub
Sub DivideCell(oCell, dDivisor As Double)
' wird für DivideSelectedCells benötigt '
oCell.setValue(oCell.getValue()/dDivisor)
End Sub
Sub DivideRegions(oSels, dDivisor As Double)
' wird für DivideSelected Cells benötigt'
Dim oSel
Dim i As Integer
If oSels.supportsService("com.sun.star.sheet.SheetCell") Then
DivideCell(oSels, dDivisor)
ElseIf oSels.supportsService("com.sun.star.sheet.SheetCellRanges") Then
For i = 0 To oSels.getCount() -1
DivideRegions(oSels.getByIndex(i), dDivisor)
Next
ElseIf oSels.supportsService("com.sun.star.sheet.SheetCellRange") Then
DivideRange(oSels, dDivisor)
End If
End Sub
… und die hier zum Multiplizieren:
Sub MultiplySelectedCells
' HAUPMAKRO, das die anderen aufruft'
Dim dMultiplier As Double
Dim oSels
dMultiplier = InputBox("Bitte den Faktor eingeben" & Chr(10)&"Dezimalzahlen mit Punkt","Multiplikation mit Faktor","1")
oSels = ThisComponent.getCurrentController().getSelection()
MultiplyRegions(oSels, dMultiplier)
End Sub
Sub MultiplySelectedCells
' HAUPMAKRO, das die anderen aufruft'
Redim dMultiplier As Double
Redim oSels
dMultiplier = InputBox("Bitte den Faktor eingeben" & Chr(10)&"Dezimalzahlen mit Punkt","Multiplikation mit Faktor","1")
oSels = ThisComponent.getCurrentController().getSelection()
MultiplyRegions(oSels, dMultiplier)
End Sub
Sub MultiplyCell(oCell, dMultiplier As Double)
' wird für MultiplySelectedCells benötigt '
oCell.setValue(oCell.getValue()*dMultiplier)
End Sub
Sub MultiplyRange(oRange, dMultiplier As Double)
Dim oData()
Dim oRow()
Dim i As Integer
Dim j As Integer
oData() = oRange.getDataArray()
For i = LBound(oData()) To UBound(oData())
oRow() = oData(i)
For j = LBound(oRow()) To UBound(oRow())
oRow(j) = oRow(j) * dMultiplier <--- KORRIGIERT
' --- FEHLER: Unzulässiger Wert oder Datentyp:Datentypen unverträglich'
Next
Next
oRange.setDataArray(oData())
End Sub
Sub MultiplyRegions(oSels, dMultiplier As Double)
Dim oSel
Dim i As Integer
If oSels.supportsService("com.sun.star.sheet.SheetCell") Then
MultiplyCell(oSels, dMultiplier)
ElseIf oSels.supportsService("com.sun.star.sheet.SheetCellRanges") Then
For i = 0 To oSels.getCount() -1
MultiplyRegions(oSels.getByIndex(i), dMultiplier)
Next
ElseIf oSels.supportsService("com.sun.star.sheet.SheetCellRange") Then
MultiplyRange(oSels, dMultiplier)
End If
End Sub
Auf Wunsch kann ich die acht Makros auch als Daeianhang hochladen (welches Format, .zip ?)
Für die Bemüungen bedanke ich mich im voraus. Freundliche Grüße