Seite 1 von 1

[Gelöst] mehrere Zellbereiche in mehren Tabblättern löschen

Verfasst: Mo, 23.06.2014 20:51
von skydiver86
Hallo,
ich bin neu hier und hab folgendes Problem:
Ich habe ein Excel-Makro, das ich nicht in OOo Basic umgeschrieben bekomme. Es soll mehrere Zellbereiche, die in 3 Tabellenblättern stehen und Bereichsnamen haben über eine MsgBox löschen und wenn bei der 1. MsgBox löschen ausgewählt wurde, auch noch die 2. MsgBox zum löschen weiterer Zellbereiche angeboten werden. Ich habe mal das VBA-Script angehängt:

Code: Alles auswählen

[Private Sub Datenloeschen()
antwort = MsgBox("abc", vbOKCancel, "Vorsicht!")
If antwort = 2 Then GoTo schluss
GoTo loeschen
schluss:
Exit Sub

loeschen:
Worksheets("x").Activate
Worksheets("x").Range("a").ClearContents
Worksheets("x").Range("b").ClearContents
Worksheets("x").Range("b").Font.ColorIndex = 1
Worksheets("y").Activate
Worksheets("y").Range("d").ClearContents
Worksheets("y").Range("e").ClearContents
Worksheets("y").Range("e").Font.ColorIndex = 1
Worksheets("z").Activate
Worksheets("z").Range("f").ClearContents
Worksheets("z").Range("g").ClearContents
Worksheets("w").Activate

antwort = MsgBox("def" = ok)", vbOKCancel, "Vorsicht!")
If antwort = 2 Then GoTo schluss

Worksheets("y").Activate
Worksheets("y").Range("h").ClearContents
Worksheets("z").Activate
Worksheets("z").Range("i").ClearContents
Worksheets("w").Activate
End Sub
  Moderation: Zur übersichtlichen Darstellung von Programmcode im Text [​code][​/code] Tags gesetzt.—lorbass, Moderator

Wer kann mir helfen, ich komme in den Foren und mit den Beispielen nicht mehr weiter.

Gruß aus der Südpfalz

Re: mehrere Zellbereiche in mehren Tabellenblättern löschen

Verfasst: Mi, 25.06.2014 07:11
von Stephan
Hinweise zu StarBasic hat ja WiM bereits gegeben, ansonsten läuft doch Dein VBA-Code auch weitgehend direkt unter OO.

Folgendes funktioniert bei mir unter AOO 4.1.0:

Code: Alles auswählen

Option VBASupport 1
Private Sub Datenloeschen()
antwort = MsgBox("abc", vbOKCancel, "Vorsicht!")
If antwort = 2 Then GoTo schluss
GoTo loeschen
schluss:
Exit Sub

loeschen:
Worksheets("x").Activate
Worksheets("x").Range("a").ClearContents
Worksheets("x").Range("b").ClearContents
Worksheets("x").Range("b").Font.ColorIndex = 1
Worksheets("y").Activate
Worksheets("y").Range("d").ClearContents
Worksheets("y").Range("e").ClearContents
Worksheets("y").Range("e").Font.ColorIndex = 1
Worksheets("z").Activate
Worksheets("z").Range("f").ClearContents
Worksheets("z").Range("g").ClearContents
Worksheets("w").Activate

antwort = MsgBox("ok", vbOKCancel, "Vorsicht!")
If antwort = 2 Then GoTo schluss

Worksheets("y").Activate
Worksheets("y").Range("h").ClearContents
Worksheets("z").Activate
Worksheets("z").Range("i").ClearContents
Worksheets("w").Activate
End Sub
Gruß
Stephan

Re: mehrere Zellbereiche in mehren Tabellenblättern löschen

Verfasst: Mi, 25.06.2014 09:23
von skydiver86
Hallo Stephan,
Du hast Recht, es läuft unter OO. Nur wenn ich die Datei im ods-Format abspeichere, klappt's beim Öffnen nicht mehr.

Das mit der MsgBox hab ich soweit schon gelöst, nur mit der Löschen der Daten in den Zellbereichen komme ich immer noch nicht weiter.

Gruß Elke

Re: mehrere Zellbereiche in mehren Tabellenblättern löschen

Verfasst: Mi, 25.06.2014 11:46
von Stephan
Nur wenn ich die Datei im ods-Format abspeichere, klappt's beim Öffnen nicht mehr.
keine Ahnung warum, denn ich hatte ja bereits die Kompatibilitätsoption ergänzt:

Code: Alles auswählen

Option VBASupport 1

Gruß
Stephan

Re: mehrere Zellbereiche in mehren Tabellenblättern löschen

Verfasst: Mo, 30.06.2014 14:24
von skydiver86
Hallo,
ich habe noch immer das Problem, daß ich die Zellbereiche nicht richtig ansprechen und den Inhalt löschen kann. Mit dem Makro wird nur der 1. Zellbereich auf dem Blatt Z gelöscht, der Rest bleibt bestehen. Was mache ich falsch?

Gruß Elke

Code: Alles auswählen

sub aktuellloeschen
dim ubound

document = thisComponent
sheetx = document.sheets.getByName("x")
arangesx() = array("a","b")
for i = 0 to ubound(aranges())
sheetx.getCellRangeByName(arangesx(i)).clearContents(5)
next i
CellRange = sheetx.getCellRangeByName("b")
CellRange.charColor = 1

sheety = document.sheets.getByName("y")
arangesy() = array("d","e")
for i = 0 to ubound(aranges())
sheety.getCellRangeByName(arangesy(i)).clearContents(5)
next i
CellRange = sheety.getCellRangeByName("e")
CellRange.charColor = 1

sheetz = document.sheets.getByName("z")
arangesz() = array("f","g")
for i = 0 to ubound(aranges())
sheetz.getCellRangeByName(arangesz(i)).clearContents(5)
next i

view = document.CurrentController
sheet = document.sheets.getByName ("w")
view.setActiveSheet(sheet)
end sub

Re: mehrere Zellbereiche in mehren Tabellenblättern löschen

Verfasst: Di, 01.07.2014 05:39
von Stephan
Was mache ich falsch?
es ist nicht zulässig ein reserviertes Schlüsselwort als Variablennamen zu deklarien, gleichzeitig führt das nicht sofort zu einem Fehler, sondern u.U. zu sinnvollen Ergebnissen wie auch hier.

unzulässig ist:

Code: Alles auswählen

dim ubound
und die Probleme entstehen weil nun der Kopf der Schleife:

Code: Alles auswählen

for i = 0 to ubound(aranges())
wie folgt bewertet wird:

erster Wert für i ist 0
die Obergrenze für i ist ubound(aranges())

weil aber ubound als Variable deklariert und aranges() ohne Inhalt wird das augenscheinlich ausgewertet als 0 womit dann i nur von 0 nach 0 läuft also immer 0 ist.
(Hierbei kann ich Dir nicht sagen warum dieses Problem nicht bereits bei den Blättern x und y auftritt.)

lösche somit die Zeile:

Code: Alles auswählen

dim ubound

Gruß
Stephan

Re: mehrere Zellbereiche in mehren Tabellenblättern löschen

Verfasst: Di, 01.07.2014 08:48
von skydiver86
Hallo Stephan,
super, danke, hat funktioniert.

Gruß Elke