Seite 2 von 2

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Verfasst: Mi, 15.02.2017 16:51
von F3K Total
Hallo
Gast hat geschrieben: Mi, 15.02.2017 08:33 - Ins Makro müsste noch eingebaut werden, dass die entsprechenden Zellen vor dem löschen wieder auf "entsperrt" gesetzt werden, sonst können sie nicht zurück gesetzt werden.
Welchen Befehl brauche ich da im Makro-Code?
um ein Tabellenblatt zu entsperren oder zu sperren gibt es

Code: Alles auswählen

.unprotect("Password")
.protect("Password")
Dann sollte das Makro von Stephan so funktionieren:

Code: Alles auswählen

Sub bereinigen()
	tc = ThisComponent
	For i = 0 To tc.Sheets.Count()-1
		With tc.Sheets(i)
		        .unprotect("")'wenn kein Passwort vergeben wurde
			.getCellRangeByName("E28").Value = .getCellRangeByName("E64").Value
			.getCellRangeByName("F4").Value = .getCellRangeByName("F4").Value+1
			For j = 29 To 61 'A30:A62
				.getCellByPosition(0,j).FormulaLocal = ""
			Next j
		        .protect("")'wenn kein Passwort vergeben wurde
		End With
	Next i 
End Sub
Gruß R

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Verfasst: Mi, 15.02.2017 17:44
von Stephan
ich korrigiere mich mal selbst, ich glaube das Makro muss so aussehen und nicht so wie ich es heute Mittag gepostet hatte:

Code: Alles auswählen

Sub bereinigen()
	tc = ThisComponent
	For i = 0 To tc.Sheets.Count()-1
		With tc.Sheets(i)
			.unprotect("")
			For j = 29 To 61 'A30:A62
				.getCellByPosition(0,j).FormulaLocal = ""
				
				'-->die "g" entfernen die die bedingte Formatierung triggern:
				.getCellByPosition(6,j).FormulaLocal = ""
				
				'-->evtl. nun gleich noch die überflüssigen Werte löschen:
				.getCellByPosition(2,j).FormulaLocal = ""
				.getCellByPosition(3,j).FormulaLocal = ""
			Next j
			.getCellRangeByName("E28").Value = .getCellRangeByName("E64").Value
			.getCellRangeByName("F4").Value = .getCellRangeByName("F4").Value+1
			.protect("")
		End With
	Next i 
End Sub
bitte den letzten Kommentar im Makro beachten, denn die Zeilen:

Code: Alles auswählen

.getCellByPosition(2,j).FormulaLocal = ""
.getCellByPosition(3,j).FormulaLocal = ""
sind evtl. überflüssig wenn C30:D62 tatsächlich händisch gelöscht werden sollen.


Gruß
Stephan

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Verfasst: Mi, 15.02.2017 19:45
von lorbass
snail hat geschrieben: Mi, 15.02.2017 08:33 - Und weiß zufällig jemand, wo die Zeilen 1+2 geblieben sind? Meine Tabelle beginnt mit Zeile 3...?
Die Zeilen hat irgendjemand irgendwann ausgeblendet. Zum Wiederanzeigen:
  1. Tabellenschutz entfernen.
  2. Eine beliebige Spalte(!) oder die ganze Tabelle (Strg+A) selektieren.
  3. Menüpunkt Einblenden im Kontextmenü (Rechstklick!) der Zeilenköpfe (!) oder Format → Zeile → Anzeigen wählen.
Gruß
lorbass

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Verfasst: Do, 16.02.2017 13:00
von snailmed
Bitte...ich brauche nochmal Eure Hilfe!
BTM_patientenbezogen.ods
(29.57 KiB) 110-mal heruntergeladen
- Mein Makro läuft nicht mehr...es passiert einfach gar nichts.

- Die E60 zeigt immer noch den Fehler Err.502.

Wenn Ihr sonst noch schlaue Ideen habt bezüglich einer weiteren Vereinfachung, immer gerne (z.B. das Drucken aller Tabellen bis auf "Vorlage_BTM" gleich ins Makro mit übernehmen?)

Ich bin da einfach noch nicht ganz eingefuchst...

Ich danke Euch im Voraus!

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Verfasst: Do, 16.02.2017 17:26
von F3K Total
Hallo,
jetzt hast du die Matrixformel zerschossen, habe ich neu eingepflegt.
Ausserdem noch das Makro bereinigen wie folgt beschleunigt:

Code: Alles auswählen

Sub bereinigen()
    tc = ThisComponent
    nColumns = array(0,2,3,5)'Spalten A,C,D,F
    For i = 0 To tc.Sheets.Count()-2   '-2 damit die Vorlage nicht verändert wird
        With tc.Sheets(i)
            .unprotect("btm")
            .getCellRangeByName("E20").Value = .getCellRangeByName("E60").Value
            .getCellRangeByName("B64").Value = .getCellRangeByName("B64").Value + 1
            for j = 0 to 3
                oRange = .getCellrangeByPosition(nColumns(j),21,nColumns(j),57)'A22:A58
                oRange.clearContents(5)'Value(1) & String(4)
            next j
            .protect("btm")
        End With
    Next i 
End Sub
Mit

Code: Alles auswählen

oRange.clearContents
wird der Inhalt eines Zellbereiches gelöscht, das geht deutlich schneller als die Zellen einzeln zu durchwandern.
Die Tabellenblätter sind auch wieder mit Passwort geschützt.
Für ein neues Thema,
snailmed hat geschrieben: Do, 16.02.2017 13:00 Wenn Ihr sonst noch schlaue Ideen habt ...
eröffne bitte einen neuen Thread.
Gruß R

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Verfasst: Do, 16.02.2017 20:02
von snailmed
Vielen Dank für die Erstellung des neuen Makros, leider passiert bei mir immer noch nichts, wenn ich es ausführe (weder das Löschen der Zellen noch das Hochzählen der Blattnummer). Woran kann das liegen?

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Verfasst: Do, 16.02.2017 20:08
von F3K Total
Hallo,
ich habe die Datei gerade noch einmal ausprobiert, funktioniert alles wie es soll.
Kann es sein, das du das Ausführen von Makros nicht zulässt?
Damit das Makro laufen darf, stellst du unter Extras/Optionen/Openoffice/Sicherheit/Makrosicherheit mindestens die Stufe "Mittel" ein, dann wirst du beim Öffnen von Dokumenten gefragt, ob du Makros ausführen möchtest.
Gruß R

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Verfasst: Fr, 17.02.2017 08:15
von snailmed
Bei mir zu Hause läuft es jetzt nach Änderung der Makrosicherheitsstufe! Werde es nachher in der Praxis ausprobieren. Danke für den Hinweis!
Gibt es denn die Möglichkeit, das Makro als vertrauenswürdig zu kennzeichnen und dann die höhere Sicherheitsstufe zu wählen? Dann müsste man zu Beginn nicht immer auf "Makros aktivieren" klicken.
Und mir fällt auf, dass zu Beginn ebenfalls immer der Hinweis kommt "Das Dokumen enthält Makros...", was man wegklicken muss. Kann man das auch einstellen?

Ich habe echt viele Fragen...aber ich lerne dazu!

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Verfasst: Fr, 17.02.2017 11:00
von nikki
Hallo,
siehe Extras/Einstellungen.../OpenOffice/Sicherheit
2017-02-17 10_57_37-Makro Sicherheit.gif
2017-02-17 10_57_37-Makro Sicherheit.gif (14.15 KiB) 8333 mal betrachtet
Dort gegebenenfalls auf den Hilfe-Button klicken.

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Verfasst: Fr, 17.02.2017 11:00
von F3K Total
Es ist so langsam an der Zeit, dass du die Hilfe (F1) kennen lernst, Suchbegriff: Makrosicherheit
Gruß R

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Verfasst: So, 19.02.2017 09:24
von snailmed
Noch einmal vielen Dank an alle!
Das Dokument läuft jetzt einwandtfrei und alle sind glücklich über die Arbeitserleichterung.

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Verfasst: Di, 28.02.2017 16:19
von snailmed
Moin,

in der Anwendung nach 10 Tagen stellen sich leider noch zwei (hoffentlich kleine?) Probleme dar. Vielleicht kann jemand helfen?

1. Da für die Wochenendeintragungen das Datum in Spalte B rückwirkend geändert wird, fällt die Formel raus (für B22: =WENN(A22="";"";WENN(ZELLE("TYPE";B22)="v";B22;HEUTE()))). Am Ende des Monats wird das Dokument ja wieder auf Null gesetzt und nur der Übertrag übertragen. Das funktioniert auch bestens, nur eben nicht für die Zellen, bei denen händisch das Datum geändert und die Formel damit gelöscht wurde.
Da ich nicht vertraut bin mit der Programmierung von Makros, frage ich mich, ob es eine Möglichkeit gibt, in das bestehende Makro einen Code einzubauen, der die Zeilen B22-58 entsprechend wieder mit der Formel belegt.

2. Aufgefallen ist uns, dass in den Zellen keine Null (also "0") angezeigt wird. Zum Beispiel, wenn der Bestand "0" ist oder als Übertrag eine Null eingetragen wird, bleibt die Zelle einfach leer.

Viele Grüße
Snailmed

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Verfasst: Mi, 01.03.2017 14:54
von Thomas Mc Kie
Für 2.
Bitte mal zu Zellen-Formatierung und dort bei Zahlen in der Programmhilfe nachlesen/googeln. Du kannst Zellen problemlos so formatieren, dass "kein Eintrag" als 0 angezeigt wird.
Oder (dann müsste ich mich ins Makro reinlesen) du lässt bei einem Übertrag von 0 auch wirklich eine 0 in die Zelle schreiben. Ich gehe mal von aus, das das Makro erste die Zelle leert und wenn der Übertrag Null ist, dann auch nichts reinschreibt. Eine Null würde nämlich standardmäßig angezegt, da es sich ja um eine Zahl handelt.

Grüße
Thomas