Unterste Zelle mit Inhalt in einem Bereich finden

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Beitrag 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
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Beitrag 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
Benutzeravatar
lorbass
********
Beiträge: 4116
Registriert: Mo, 01.05.2006 21:29
Wohnort: Bonn

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Beitrag 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
snailmed
*
Beiträge: 11
Registriert: Di, 14.02.2017 17:21

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Beitrag von snailmed »

Bitte...ich brauche nochmal Eure Hilfe!
BTM_patientenbezogen.ods
(29.57 KiB) 99-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!
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Beitrag 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
Dateianhänge
BTM_patientenbezogen.ods
(29.99 KiB) 173-mal heruntergeladen
snailmed
*
Beiträge: 11
Registriert: Di, 14.02.2017 17:21

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Beitrag 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?
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Beitrag 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
snailmed
*
Beiträge: 11
Registriert: Di, 14.02.2017 17:21

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Beitrag 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!
nikki
******
Beiträge: 787
Registriert: Do, 05.03.2015 10:42

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Beitrag 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) 7633 mal betrachtet
Dort gegebenenfalls auf den Hilfe-Button klicken.
Gruß

---------------------------------------------------------
Win.10 Prof. 64-bit, AOO 4.1.7, LO 6.3.4 (x64)
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Beitrag von F3K Total »

Es ist so langsam an der Zeit, dass du die Hilfe (F1) kennen lernst, Suchbegriff: Makrosicherheit
Gruß R
snailmed
*
Beiträge: 11
Registriert: Di, 14.02.2017 17:21

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Beitrag von snailmed »

Noch einmal vielen Dank an alle!
Das Dokument läuft jetzt einwandtfrei und alle sind glücklich über die Arbeitserleichterung.
snailmed
*
Beiträge: 11
Registriert: Di, 14.02.2017 17:21

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Beitrag 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
Thomas Mc Kie
******
Beiträge: 919
Registriert: Mo, 12.04.2010 00:37

Re: Unterste Zelle mit Inhalt in einem Bereich finden

Beitrag 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
Antworten