🙏 Bitte helfen Sie uns das LibreOffice Forum zu erhalten. 🙏
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🍀 Wir hoffen auf Ihre Unterstützung - vielen Dank!🍀
>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
[Gelöst] Nur markierte Zellen bearbeiten
-
- Beiträge: 29
- Registriert: Mi 7. Okt 2020, 16:47
- Wohnort: Westsachsen
[Gelöst] Nur markierte Zellen bearbeiten
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
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
Zuletzt geändert von Statistiker am Do 8. Mai 2025, 09:06, insgesamt 1-mal geändert.
Warum ist ein Kanaldeckel rund? Damit er nicht in den Kanal fallen kann..
LO 24.2.6.2 + Windows 11 Home 24H2
LO 24.2.6.2 + Windows 11 Home 24H2
Re: Nur markierte Zellen bearbeiten
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 ...
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 ...
Gruß,
mikele
mikele
-
- Beiträge: 29
- Registriert: Mi 7. Okt 2020, 16:47
- Wohnort: Westsachsen
Re: Nur markierte Zellen bearbeiten
Ja gerne, hier die gewünschte Teilhabe:
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.
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
Warum ist ein Kanaldeckel rund? Damit er nicht in den Kanal fallen kann..
LO 24.2.6.2 + Windows 11 Home 24H2
LO 24.2.6.2 + Windows 11 Home 24H2
Re: Nur markierte Zellen bearbeiten
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:
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
Gruß,
mikele
mikele
-
- Beiträge: 29
- Registriert: Mi 7. Okt 2020, 16:47
- Wohnort: Westsachsen
Re: Nur markierte Zellen bearbeiten
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
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
Warum ist ein Kanaldeckel rund? Damit er nicht in den Kanal fallen kann..
LO 24.2.6.2 + Windows 11 Home 24H2
LO 24.2.6.2 + Windows 11 Home 24H2
Re: Nur markierte Zellen bearbeiten
Hallo,
hier mal noch eine andere Variante, die den Weg über "Inhalte einfügen..." nachgeht:
Damit werden alle ausgewählten Zellen in einem Rutsch mit dem Faktor multipliziert.
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
Gruß,
mikele
mikele
-
- Beiträge: 29
- Registriert: Mi 7. Okt 2020, 16:47
- Wohnort: Westsachsen
Re: Nur markierte Zellen bearbeiten
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
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
Warum ist ein Kanaldeckel rund? Damit er nicht in den Kanal fallen kann..
LO 24.2.6.2 + Windows 11 Home 24H2
LO 24.2.6.2 + Windows 11 Home 24H2
An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:
Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.