Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1752to1756
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

nicht gesperrte Zellen kopieren

nicht gesperrte Zellen kopieren
23.04.2020 14:22:41
Gode
Hallo,
gibt es eine Möglichkeit beim Kopieren im VBA, dass aus einem definierten Zellbereich nur Werte aus nicht gesperrten Zellen kopiert werden?
Set Bereich = wsK01.Range("A1:D10")
Set Bereich2=wsK02.Range("A1:D10")
Bereich.copy
Bereich2.PasteSpecial ....?
Die Bereiche sind identisch. In den Bereichen gibt es immer mal wieder gesperrte Zellen, deren Werte bzw. Formeln nicht mitkopiert werden sollen.
Derzeit passiert dies Zelle für Zelle:
If Not WsK01.Cells(z, s).Locked Then ...
Da es sich hier teilweise um sehr große Bereiche handelt, läuft dieses Programm ziemlich unperformand und das würde ich gerne ändern.
Vielen Dank im Voraus für eure Tipps!
Gode

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: nicht gesperrte Zellen kopieren
23.04.2020 17:02:24
ChrisL
Hi
Mit dem Risiko, dass ich mich irre, aber ich denke du müsstest die Zellen einzeln abarbeiten. Bei 40 Zellen sollte Performance noch keine Rolle spielen.
Sinngemäss...
For each c in Bereich1
if not c.protected then ...
next c
cu
Chris
AW: nicht gesperrte Zellen kopieren
23.04.2020 18:49:18
Gode
Hallo Chris,
das mit dem o.a. Bereich war leider nur ein Beispiel ... in der Realität sind die Bereiche deutlich größer (z.B. 57 Zeilen und 25 Spalten) und eine Mappe kann über 100 AB haben ...
D.h. dein Vorschlag könnte passen ... dürfte aber zu der derzeitigen Verarbeitungslogik auch nicht (wesentlich) schneller sein.
So wie es aussieht gibt es hier wohl wirklich keinen Ansatz um dies zu beschleunigen ... schade :-(
Vll. stolpert ja nochmal jemand mit einer Idee hier rein, daher lasse ich ihn nochmal offen.
Gode
Anzeige
AW: nicht gesperrte Zellen kopieren
23.04.2020 19:31:52
ChrisL
Hi
Wie sieht die derzeitige Verarbeitungslogik konkret aus?
Schützt du die Zellen systematisch?
cu
Chris
AW: nicht gesperrte Zellen kopieren
23.04.2020 21:38:16
Gode
Hallo,
ja, die Zellen sind systemtisch geschützt. D.h. man könnte noch den gesamten Bereich in viele kleinere Bereiche, mit jew. ungeschützten Zellen, aufteilen.
Meine Hoffnung war eben, dass es eine Möglichkeit gibt, alle ungeschützten Zellen des gesamten Bereichs irgendwie anzusprechen.
Gode
AW: nicht gesperrte Zellen kopieren
24.04.2020 07:47:56
Graf
Moin
Sub test()
Dim C as Range, U as Range
For Each C in Tabelle1.UsedRange.Cells
If C.Locked = False Then
If U Is Nothing Then
Set U = C
Else
Set U = Union(U, C)
End If
Next
If Not U Is Nothing Then
For Each C in U.Areas
C.Copy Tabelle2.Range(C.Address)
Next
Set U = Nothing
End If
End Sub 
Gruß Gerd
Anzeige
AW: nicht gesperrte Zellen kopieren
24.04.2020 10:45:43
Gode
Hallo Gerd,
ich habe deinen Code mal eben an einem kleinen Bsp. getestet (ein End IF noch ergänzt) und sie macht im Prinzip das Gewünschte (obwohl ich den Code ehrlich gesagt nicht zu 100% verstehe (U.Areas)).
Das könnte ich aber entsprechend adaptieren ;-)
Mir geht es nur drum, ob dieser Code letztlich auch (merklich) schneller ist als der bestehende. Daher mal im Folgenden den Original-Code, wie ihn irgendjemand vor Urzeiten mal so geschrieben hat:
For Each w In ws_alt.Worksheets
If w.Name Like "K*" And w.Name  "K xx" Then
z_min = 1
z_max = 57
s_min = 1
s_max = 25
For z = z_min To z_max
For s = s_min To s_max
If Not ws_neu.Sheets(w.Name).Cells(z, s).Locked Then Call Getdaten(ws_alt,  _
ws_neu, w.Name, z, s)
Next s
Next z
End If
In die Prozedur "Getdaten" erfolgt dann die Zuweisung des Zellwertes von der Mappe ws_alt in die Zelle der Mappe ws_neu (sofern es sich nicht um eine Formel handelt):
Sub Getdaten(xWBAlt As Workbook, xWBNeu As Workbook, xWSName As String, xZeile As Integer,  _
xSpalte As Integer)
If Not xWBAlt.Sheets(xWSName).Cells(xZeile, xSpalte).HasFormula Then
xWBNeu.Sheets(xWSName).Cells(xZeile, xSpalte).Value = xWBAlt.Sheets(xWSName).Cells( _
xZeile, xSpalte).Value
End If
End Sub
Mir ist schon klar, dass dein Code wesentlich schöner und weniger umständlich ist ... nur bringt er auch merklich Performance-Einsparung mit ?
Letztlich wird doch in beiden Varianten Zelle für Zelle im verwendeten Bereich durchgegangen?
Wie schon gesagt, eine Mappe kann im Extremfall bis zu 50-60 K-Blätter enthalten.
Darüberhinaus gibt es noch Blätter mit L* und P* die ebenfalls nach obigem Schema verarbeitet werden (allerdings wesentlcih kleinere Bereiche beinhalten und daher aus meiner Sicht nicht ganz so kritisch sind).
Gode
Anzeige
AW: nicht gesperrte Zellen kopieren
24.04.2020 13:29:27
Gode
Hallo Gerd,
ich habe deinen Code mal soweit in unsere Datei zum Testen eingebaut.
Leider bekomme ich an div. Stellen Laufzeitfehler beim Kopieren:

C.Copy Tabelle2.Range(C.Address)
Wenn ich mir C.Adresse dann anschaue, handelt es sich dabei immer um einen Teil einer verbundenen Zelle.
Z.B.: I3 und J3 sind verbunden. Wenn C.Adresse "$J$3" ist kommt die Meldung, dass bei verbundenen Zellen das nicht geht.
Sorry, warmein Fehler, dass ich auf diesen Umstand nicht vorher hingewiesen habe ... somit scheidet wohl der Lösungsansatz von dir auch aus, da es iauf den Blättern eine Reihe von verbundenen Zellen gibt :-(
Anzeige

117 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige