Seite 1 von 1
[Gelöst] Nur markierte Zellen bearbeiten
Verfasst: Fr 2. Mai 2025, 16:46
von Statistiker
Hallo
bisher hatte ich ein Makro gefunden und genutzt, bei dem man im markierten Bereich die einzelnen Zellen bearbeiten konnte, also z.B. multiplizieren oder dividieren. Dies galt aber nur für einen zusammenhängenden Bereich. Sobald ich die Zellen als nicht zusammenhängenden Bereich maskierte (Strg+Cursor) gab es bei der Ausführung des Makros eine Fehlermeldung und das Makro stieg aus.
Wie bekomme ich es nun hin, dass ich nur die markierten Zellen als nicht zusammenhängende Bereich bearbeiten kann. Gefunden habe ich bisher nur Scripts, bei denen im Makro der Bereich angegeben ist, z.B. ...RangeByName("A1:A8","C3:C7")?
Danke vorab
Re: Nur markierte Zellen bearbeiten
Verfasst: Fr 2. Mai 2025, 20:02
von mikele
Hallo,
eine Mehrfachauswahl ist praktisch ein Array von einzelnen ranges, das du per Schleife durchlaufen kannst. Einfacher wäre es, wenn du uns an deinem Makro teilhaben lässt ...
Re: Nur markierte Zellen bearbeiten
Verfasst: Sa 3. Mai 2025, 11:57
von Statistiker
Ja gerne, hier die gewünschte
Teilhabe:
Code: Alles auswählen
Sub MultiplyWithFactor
Dim oDoc as Object
Dim oSheet as Object
Dim oCurSelection as Object
Dim mDataArraj as Variant
Dim nColCnt as Long
ReDim dMultiplier as Double
dim i as Long, j as Long
On Error resume next
oDoc=ThisComponent
oSheet = oDoc.CurrentController.ActiveSheet
oCurSelection = oDoc.getCurrentSelection()
dMultiplier =100 ' anpassen
mDataArraj = oCurSelection.DataArray
nColCnt=oCurSelection.Columns.Count
for i = lBound(mDataArraj()) to uBound(mDataArraj())
For j=0 to nColCnt -1
mDataArraj(i)(j) = mDataArraj(i)(j) * dMultiplier
next j
next i
oCurSelection.DataArray = mDataArraj
end Sub
Solange der markierte Bereich zusammen hängend ist arbeitet das Makro, auch wenn Leerzellen bzw. Zellen mit Text dazwischen (also innerhalb des Bereichs) sind. Sobald mehr als ein Bereich markiert ist, kommt die Fehlermeldung.
Re: Nur markierte Zellen bearbeiten
Verfasst: Sa 3. Mai 2025, 16:30
von mikele
Hallo,
zunächst: für diese Funktionalität ist gar kein Makro nötig.
Schreibe den Faktor (hier: 100) in eine leere Zelle und kopiere sie. Dann markierst du alle gewünschten Zellen und nun ->Bearbeiten->Inhalte einfügen->Inhalte einfügen... (oder Shift+Strg+V) Hier aktivierst du die Option "Multiplizieren" und fertig.
Dein Makro ergänzt:
Code: Alles auswählen
Sub MultiplyWithFactor
Dim oDoc as Object
Dim oSheet as Object
Dim oCurSelection as Object
Dim mDataArraj as Variant
Dim nColCnt as Long
ReDim dMultiplier as Double
dim i as Long, j as Long
On Error resume next
oDoc=ThisComponent
oCurSelection = oDoc.getCurrentSelection()
dMultiplier =100 ' anpassen
If oCurSelection.supportsService("com.sun.star.sheet.SheetCellRanges") Then
For k=0 To oCurSelection.Count-1
mDataArraj = oCurSelection(k).DataArray
For i =0 To uBound(mDataArraj)
For j=0 To ubound(mDataArraj(i))
mDataArraj(i)(j) = mDataArraj(i)(j) * dMultiplier
Next j
Next i
oCurSelection(k).DataArray = mDataArraj
Next k
Else
mDataArraj = oCurSelection.DataArray
For i =0 To uBound(mDataArraj)
For j=0 To ubound(mDataArraj(i))
mDataArraj(i)(j) = mDataArraj(i)(j) * dMultiplier
Next j
Next i
oCurSelection.DataArray = mDataArraj
End If
End Sub
Re: Nur markierte Zellen bearbeiten
Verfasst: Sa 3. Mai 2025, 18:06
von Statistiker
Hallo,
Tolle Arbeit. Herzlichsten Dank für die Mühe. Ja, Du magst Recht haben, das es auch ohne Makros mit ein bisschen Fleißarbeit geht. Aber ich muss sehr häufig Zellen mit den gleichen Wert multiplizieren bzw. dividieren (MwSt, Hektar in km² und umgekehrt, usw.) und da ist mit eine vorgefertigte Lösung schon lieber und schneller.
Nochmals Dank und ein schönes Wochenende!
Micha
Re: Nur markierte Zellen bearbeiten
Verfasst: So 4. Mai 2025, 20:57
von mikele
Hallo,
hier mal noch eine andere Variante, die den Weg über "Inhalte einfügen..." nachgeht:
Code: Alles auswählen
sub auswahl_multiplizieren
oDoc=ThisComponent
oCtrl=oDoc.CurrentController
'vorhanden Auswahl merken
oCurSel=oDoc.CurrentSelection
'eine unbenutzte Zelle temporär für den Faktor nutzen und auswählen
oTab=oCtrl.ActiveSheet
oleer=oTab.queryEmptyCells
oZelle = oleer(0).getcellbyposition(0,0)
oZelle.Value=100
oCtrl.select(oZelle)
oSel=oDoc.CurrentSelection
'Zwischenablae initialisieren
oClip = CreateUnoService("com.sun.star.datatransfer.clipboard.SystemClipboard")
'Überträgt die Auswahl in die Zwischenablage
oContents = oClip.setContents(oCtrl.getTransferable, Null)
'ursprüngliche Auswahl wieder herstellen
oCtrl.select(oCurSel)
'Dispatcher initialisieren
document = oCtrl.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args(5) as new com.sun.star.beans.PropertyValue
'Werte einfügen
args(0).Name = "Flags"
args(0).Value = "V"
'Operation 1...Addition 2... Subtraktion 3... Multiplikation 4...Division
args(1).Name = "FormulaCommand"
args(1).Value = 3
args(2).Name = "SkipEmptyCells"
args(2).Value = false
args(3).Name = "Transpose"
args(3).Value = false
args(4).Name = "AsLink"
args(4).Value = false
args(5).Name = "MoveMode"
args(5).Value = 4
dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args)
'temporäre Zelle löschen
oZelle.Clearcontents(1)
end sub
Damit werden alle ausgewählten Zellen in einem Rutsch mit dem Faktor multipliziert.
Re: Nur markierte Zellen bearbeiten
Verfasst: Mi 7. Mai 2025, 18:28
von Statistiker
Hallo,
verspäteten Dank für die alternative Lösung. Als Anwender spüre ich da keinen Unterschied, vielleicht gibt es bei größeren "Wertmengen" einen Zeitunterschied? Habe inzwischen den Multiplier variabel gemacht durch die Verwendung einer Inputbox, also zur Faktoreneingabe. Beste Grüße
Micha