❀️ Helfen Sie noch heute, unser LibreOffice Forum zu erhalten! ❀️
UnterstΓΌtzen Sie das LibreOffice-Forum und helfen Sie uns, unser Ziel fΓΌr 2025 zu erreichen!

πŸ€ Jeder Beitrag zΓ€hlt – vielen Dank fΓΌr Ihre UnterstΓΌtzung!πŸ€
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱


❀️ DANKE >> << DANKE ❀️

>> Dank Ihrer UnterstΓΌtzung -> Keine Werbung fΓΌr alle registrierten LibreOffice-Forum User! <<
πŸ€— Als DankeschΓΆn werden Sie im Forum als LO-SUPPORTER gekennzeichnet. πŸ€—

Zellensperre beim Blattkopieren mitkopieren?

CALC ist die Tabellenkalkulation, die Sie immer wollten.
Antworten
Butch
BeitrΓ€ge: 122
Registriert: Mi 20. Jan 2016, 18:59

Zellensperre beim Blattkopieren mitkopieren?

Beitrag von Butch » Sa 26. Dez 2020, 12:52

Hallo!

Ich kopiere per Makro Bereiche aus einem Blatt in ein anderes Blatt, z.B. so:

Code: Alles auswΓ€hlen

    Sheets("Muster").Select
    Application.CutCopyMode = False
    Columns("A:A").Select
    Selection.Copy

    Sheets("Januar").Select
        Call Schaltfl_loeschen
    Range("A1").Select
    ActiveSheet.Paste
    Range("A1").Select
Die Zellensperre im Ausgangsblatt wird dabei nicht mitkopiert. Gibt es dafΓΌr eine einfache LΓΆsung? Danke im Voraus!

Mondblatt24
* LO-Experte *
BeitrΓ€ge: 3378
Registriert: Fr 3. MΓ€r 2017, 17:12

Re: Zellensperre beim Blattkopieren mitkopieren?

Beitrag von Mondblatt24 » Sa 26. Dez 2020, 13:07

Hallo,
Fragen zu Makros sollten im Bereich LibreOffice Programmierung gestellt werden.
Win 11 (x64) β–ͺ LO 25.8.1.1 (x64) β–ͺ AOO Portable 4.1.15
Wenn Eure Frage zutreffend beantwortet wurde, seid so nett und fΓΌgt dem Betreff der Eingangsfrage [GELΓ–ST] hinzu.

craig
* LO-Experte *
BeitrΓ€ge: 1137
Registriert: Do 21. Apr 2016, 11:42

Re: Zellensperre beim Blattkopieren mitkopieren?

Beitrag von craig » Sa 26. Dez 2020, 14:29

Hallo,

ich wΓΌnsche Euch allen frohe Weihnachten!

@Butch:
Bitte beachte fΓΌr das nΓ€chste Mal Peters Hinweis.

Selektieren ist in den meisten FΓ€llen der Progammierung nicht erforderlich,
man kennt ja in der Regel den Quell- und Zielbereich.
https://www.online-excel.de/excel/singsel_vba.php?f=78
Naja, auch hier: Ausnahmen bestΓ€tigen die Regel.

Ein Beispielcode:
Ich weiß aber nicht, ob er auch gesperrte Zelle mitkopiert.
Ggf. muss das Makro dann in der Weise erweitert werden, dass der Blattschutz
erst aufgehoben wird und nach dem Ablauf wieder neugesetzt wird.

Code: Alles auswΓ€hlen

REM  *****  BASIC  *****
Option Explicit

REM ════════════════════════════════════════════════════════════════════════════════════════════════════
REM					CALC: Kopieren ohne Selektion, inklusive aller Formatierungen
REM
REM	https://wiki.openoffice.org/wiki/Documentation/BASIC_Guide/Cells_and_Ranges
REM 
REM 1)	[Zellbereich kopieren]
REM 
REM ════════════════════════════════════════════════════════════════════════════════════════════════════

Sub [Zellbereich kopieren]
Dim oDoc As Object
Dim oSheet As Object
Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress
Dim CellAddress As New com.sun.star.table.CellAddress
 
	oDoc=ThisComponent
		oSheet=oDoc.Sheets.getbyindex(0)

REM --------------------------------------------------------------------------------- 
REM festlegen des Quellberreichs
CellRangeAddress.Sheet = 0				' Referenz: erstes Tabellenblatt Index=0
CellRangeAddress.StartColumn = 0		' Referenz: Start	β†’ Spalte A
CellRangeAddress.StartRow = 0			' Referenz: Start	β†’ Zeile 1
CellRangeAddress.EndColumn = 0			' Referenz: Ende	β†’ Spalte A
CellRangeAddress.EndRow = 500			' Referenz: Ende	β†’ letzte Zeile

REM ---------------------------------------------------------------------------------
REM festlegen des Zielberreichs
CellAddress.Sheet = 0					' Referenz: erstes Tabellenblatt Index=0
CellAddress.Column = 2					' Referenz: Ziel	β†’ Spalte C
CellAddress.Row = 0						' Referenz: Ziel	β†’ Zeile 1


REM ---------------------------------------------------------------------------------
REM Quellbereich in Zielbereich kopieren
			oSheet.copyRange(CellAddress, CellRangeAddress)
End Sub
Beachte die Kommentare im Code.

Noch ein Hinweis:

Code: Alles auswΓ€hlen

Columns("A:A").Select
Mit dieser Anweisung markierst Du die gesamte Spalte A, also mehr als 1 Millionen Zellen.
Das kΓΆnnte sich als erheblich Systembremse auswirken.
In meinem Beispiel habe ich nur 501 (0-500) Zeilen referenziert, wenn Du mehr
Zeilen kopieren mΓΆchtest, dann erhΓΆhe diesen Wert.
Achte hierbei darauf, dass der Index fΓΌr Spalten- und ZeilenzΓ€hler immer bei 0 beginnt.

Zeile 1 = 0
Zeile 2 = 1
usw.

Spalte A = 0
Spalte B = 1
Spalte C = 2
usw.

Teste den Code erst in einem Beispieldokument.

Wenn Du den Zellbereich in ein anderes Blatt kopieren mΓΆchtest,
dann benΓΆtigst Du diesen Code:

Code: Alles auswΓ€hlen

REM  *****  BASIC  *****
Option Explicit

REM ════════════════════════════════════════════════════════════════════════════════════════════════════
REM					CALC: Kopieren ohne Selektion, inklusive aller Formatierungen
REM
REM	https://wiki.openoffice.org/wiki/Documentation/BASIC_Guide/Cells_and_Ranges
REM 
REM 1)	[Zellbereich kopieren]
REM 
REM ════════════════════════════════════════════════════════════════════════════════════════════════════

Sub [Zellbereich kopieren]
Dim oDoc As Object
Dim oSheet As Object
Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress
Dim CellAddress As New com.sun.star.table.CellAddress
 
	oDoc=ThisComponent
		oSheet=oDoc.Sheets.getbyindex(0)

REM --------------------------------------------------------------------------------- 
REM festlegen des Quellberreichs
CellRangeAddress.Sheet = 0				' Referenz: erstes Tabellenblatt Index=0
CellRangeAddress.StartColumn = 0		' Referenz: Start	β†’ Spalte A
CellRangeAddress.StartRow = 0			' Referenz: Start	β†’ Zeile 1
CellRangeAddress.EndColumn = 0			' Referenz: Ende	β†’ Spalte A
CellRangeAddress.EndRow = 500			' Referenz: Ende	β†’ letzte Zeile

REM ---------------------------------------------------------------------------------
REM festlegen des Zielberreichs
CellAddress.Sheet = 0					' Referenz: erstes Tabellenblatt Index=0
CellAddress.Column = 2					' Referenz: Ziel	β†’ Spalte C
CellAddress.Row = 0						' Referenz: Ziel	β†’ Zeile 1


REM ---------------------------------------------------------------------------------
REM Quellbereich in Zielbereich kopieren
			oSheet.copyRange(CellAddress, CellRangeAddress)
End Sub


REM  *****  BASIC  *****
Option Explicit

REM ════════════════════════════════════════════════════════════════════════════════════════════════════
REM					CALC: Kopieren ohne Selektion, inklusive aller Formatierungen
REM
REM	https://wiki.openoffice.org/wiki/Documentation/BASIC_Guide/Cells_and_Ranges
REM 
REM 1)	[Zellbereich kopieren]
REM 
REM ════════════════════════════════════════════════════════════════════════════════════════════════════

Sub [Zellbereich kopieren]
Dim oDoc As Object
Dim oSheet1 As Object
Dim oSheet1 As Object

Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress
Dim CellAddress As New com.sun.star.table.CellAddress
 
	oDoc=ThisComponent

REM --------------------------------------------------------------------------------- 
REM Hier ggf. die Blattnamen anpassen
		oSheet1=oDoc.Sheets.getbyName("Tabelle1")
			oSheet2=oDoc.Sheets.getbyName("Tabelle2")

REM --------------------------------------------------------------------------------- 
REM festlegen des Quellbereichs der "Tabelle1"
REM !!!
REM Hier ggf. CellAddress.Sheet = 1 anpassen
REM z.B.: CellAddress.Sheet = 5 anpassen
CellRangeAddress.Sheet = 0				' Referenz: erstes Tabellenblatt Index=0
CellRangeAddress.StartColumn = 0		' Referenz: Start	β†’ Spalte A
CellRangeAddress.StartRow = 0			' Referenz: Start	β†’ Zeile 1
CellRangeAddress.EndColumn = 0			' Referenz: Ende	β†’ Spalte A
CellRangeAddress.EndRow = 500			' Referenz: Ende	β†’ letzte Zeile

REM ---------------------------------------------------------------------------------
REM festlegen des Zielberreichs der "Tabelle2"
REM !!!
REM Hier ggf. CellAddress.Sheet = 1 anpassen
REM z.B.: CellAddress.Sheet = 5 anpassen
CellAddress.Sheet = 1					' Referenz: zweites Tabellenblatt Index=0
CellAddress.Column = 2					' Referenz: Ziel	β†’ Spalte C
CellAddress.Row = 0						' Referenz: Ziel	β†’ Zeile 1


REM ---------------------------------------------------------------------------------
REM Quellbereich in Zielbereich des zweiten Tabellenblattes kopieren
			oSheet2.copyRange(CellAddress, CellRangeAddress)
End Sub
Achte unbedingt auf die Kommentare im Code!
Da ich Dein Dokument nicht kenne, musst ggf. den Code selber anpassen


Falls Du Schwierigkeiten hast, dann erstelle ein Musterdokument und lade es hier hoch.
Gruß

Craig

Nie die Sicherungskopie vergessen!

════════════════════════════════════════════════
WIN 10 Pro 64-Bit β€’ LO 7.4.5.1 (x64) β€’ AOO 4.1.8

F3K Total
* LO-Experte *
BeitrΓ€ge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Zellensperre beim Blattkopieren mitkopieren?

Beitrag von F3K Total » Sa 26. Dez 2020, 17:23

Moin,
der Befehl, mit dem craig den Zellbereich von einem ins andere Tabellenblatt kopiert, lautet

Code: Alles auswΓ€hlen

.CopyRange()
Ich habe es ausprobiert, kann bestΓ€tigen, dass der Zellschutz mitkopiert wird.
Hier mein kurzes Testmakro, bei dem der Tabelleschutz, wenn vorhanden, entfernt, damit das Kopieren mΓΆglich ist, und danach wieder gesetzt wird.

Code: Alles auswΓ€hlen

Sub copy_cellrange
    oSheets = ThisComponent.Sheets
    oSourceSheet = oSheets.getbyName("Muster")
    oTargetSheet = oSheets.getbyName("Januar")
    if oSourceSheet.isprotected then
        bSourceProtected = true
        oSourceSheet.unprotect("")
    endif
    if oTargetSheet.isprotected then
        bTargetProtected = true
        oTargetSheet.unprotect("") 
    endif       
    oColumnA = oSourceSheet.Columns.getbyName("A")
    oSourceSheet.copyRange( oTargetSheet.getcellbyPosition(0,0).CellAddress, oColumnA.RangeAddress)
    if bSourceProtected then oSourceSheet.protect("")
    if bTargetProtected then oTargetSheet.protect("")
End Sub
Sollten die BlΓ€tter mit einem Passwort geschΓΌtz sein, muss das Passwort hier angegeben werden:

Code: Alles auswΓ€hlen

oSourceSheet.unprotect("Passwort")
oSourceSheet.protect("Passwort")
oTargetSheet.unprotect("Passwort")
oTargetSheet.protect("Passwort")
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO


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.



Antworten