Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1072to1076
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

Bei Blattschutz- Formeln durch Werte ersetzen

Bei Blattschutz- Formeln durch Werte ersetzen
05.05.2009 15:04:37
Mandy
Hallo Ihr Lieben,
habe mal wieder eine Frage: ich lade mit folgenden Code eine Datei und kopiere alle Tebellenblätter aus der Quelle bei mir rein.
Die Tabellenblätter der Quelle, die da eingelesen werden, habe zum Teil untereinander Verknüpfungen (Verweise). Beim einlesen wollte ich aber erreichen, das bei allen Tabellenblättern immer nur der reine TEXT eingelesen wird, also Formeln, bzw deren Ergebnisse in WERTE unmwandeln. Das habe ich seither (dank EUCH) so gemacht:
Sub Tabelle_laden() Dim wbZiel As Workbook Dim wbQuelle As Workbook Dim varWB_Quelle, wks_Quelle Set wbZiel = ActiveWorkbook varWB_Quelle = Application.GetOpenFilename(Filefilter:="Excel(*.xl*),*.xl*", _ Title:="Bitte Datei wählen !") If varWB_Quelle False Then Set wbQuelle = Application.Workbooks.Open(Filename:=varWB_Quelle, ReadOnly:=True) 'in allen Blättern der Quelle die Formeln durch Werte ersetzen For Each wks_Quelle In wbQuelle.Worksheets wks_Quelle.UsedRange.Copy wks_Quelle.UsedRange.PasteSpecial Paste:=xlPasteValues Next Application.CutCopyMode = False wbQuelle.Sheets.Copy after:=wbZiel.Sheets(wbZiel.Sheets.Count) wbQuelle.Close savechanges:=False Else: End End If End Sub


So, das funktioniert soweit.
Nun habe ich Quellen, wo einzelnen Tabellenblätter mit einem Passwort versehen sind. (Passwort lautet zB "start123")
Mir ist das Passwort bekannt, ich könnte vorher den Blattschutz manuell entfernen, aber es gibt auch andere User, die sollen dieses PW NICHT wissen, und trotzdem mit dem Makro arbeiten können.
Meine Frage: wie kann ich die Tabellenblätter einlesen, und alle Formeln in Werte umwandeln, auch wenn einzelne Tabellenblätter einen Blattschutz ("start123" haben.
Kann ich den Blattschutz ; nach dem einlesen der Tabellenblätter aus der Quelle, per Makro lösen, die Formeln durch Werte ersetzen und dann über alle eingelesene Tabellenblätter wieder den Blattschutz drauf ? (Es sollen aber nur die Tabellenblätter wieder geschützt werden, die von der externen Quelle eingelesen wurden)
Geht das ?
Danke mal
Mandy

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bei Blattschutz- Formeln durch Werte ersetzen
05.05.2009 15:11:35
Raist10
Guck Dir mal die Methoden .Protect und .Unprotect an. Damit kannst Du den Blattschutz einer Tabelle zu Beginn lösen, dann Anweisungen ausführen lassen und dann wieder den Blattschutz setzen.
Sollte Dein Problem eigentlich lösen.
Gruß
Rainer
AW: Bei Blattschutz- Formeln durch Werte ersetzen
05.05.2009 15:31:13
Mandy
Hi,
Danke.
Ich habe mich mit dem Unprotect Befehl mal auseinander gesetzt, das hatte ich auch geschafft, wenn ich ein Tabellenblatt gezielt mit Name ansprechen kann. Aber wie ich es hier machen soll, bei mehreren Blättren, das weis ich nicht !
Gruss
Mandy
AW: Bei Blattschutz- Formeln durch Werte ersetzen
05.05.2009 18:03:21
Raist10
So müsste es passen:

Sub Tabelle_laden()
Dim wbZiel As  _
Workbook
Dim wbQuelle As  _
Workbook
Dim varWB_Quelle, wks_Quelle, wks_Ziel
Dim zZiel As Range
Set wbZiel = ActiveWorkbook
varWB_Quelle = Application.GetOpenFilename _
(Filefilter:="Excel(*.xl*),*.xl*" _
, _
Title:="Bitte Datei wählen !")
If varWB_Quelle <>  _
False Then
Set wbQuelle = Application.Workbooks.Open _
(Filename:=varWB_Quelle, ReadOnly:=True)
For Each wks_Quelle In wbQuelle.Worksheets
' wenn Blattschutz nach Ziel mitkopiert wird,
' muss er in Quelle auch schon
' sein und PasteSpecial müsste hier bereits
' Fehlermeldung produzieren
wks_Quelle.Unprotect Password:="start123" _
span>
wks_Quelle.UsedRange.Copy
wks_Quelle.UsedRange.PasteSpecial Paste:=xlPasteValues
' Blattschutz muss nicht mehr aktiviert werden,
' weil Quelle später mit
' SaveChanges:=Flase geschlossen wird
Next
Application.CutCopyMode = False
wbQuelle.Sheets.Copy after:=wbZiel.Sheets(wbZiel.Sheets.Count)
' Nach einlesen der Sheets aus Quelle, Sheets in
' Ziel bearbeiten
For Each wks_Ziel In wbZiel.Worksheets
' Blattschutz entfernen
wks_Quelle.Unprotect Password:="start123" _
span>
' Formel in Zellen in Werte umwandeln
For Each zZiel In wks_Ziel
If zZiel.HasFormula = True Then
zZiel.Formula = zZiel.Value
End If
Next zZiel
' Blattschutz wieder setzen
wks_Ziel.Protect Password:="start123" _
Next wks_Ziel
wbQuelle.Close savechanges:=False
Else: End
End If
End Sub


Verstehe zwar die Passage nicht wieso alles kopiert und an gleicher Stelle eingefügt wird, aber hab trotzdem vorher den Blattschutz rausgenommen damit es dann auch bei geschützten Blättern klappt.
Gruß
Rainer

Anzeige
AW: Bei Blattschutz- Formeln durch Werte ersetzen
05.05.2009 19:18:35
Mandy
Hallo Reiner,
das geht ja schon ganz gut an. Was ich nun in meinem schnellen Test herausgefunden ist: das mit dem Blattschutz lösen und umwandeln in Werte funktioniert, nur ist nachher folgendes Problem. Beim wieder einlegen des Blattschuzes werden dann auch meine Tabellenblätter mit geschützt. Also nicht nur die Tabellenblätter, die ich aus der Quelle einlesen, sondern auch die, die schon in meiner Zieldatei drin waren.
Lässt sich das ändern ? Also nur die neu eingelesenen Tabellenblätter wieder schützen ?
Falls nein; würde es auch reichen, wenn nach getaner Arbeit nicht alle Tabellenblätter mit Blattschutz versehen sind, sondern nur die Blätter "DATEN" und "ERGEBNIS"
Ist das umständlich ?
Danke vielmals
Mandy
Anzeige
AW: Bei Blattschutz- Formeln durch Werte ersetzen
05.05.2009 19:30:05
Raist10
So besser?

Sub Tabelle_laden()
Dim wbZiel As Workbook
Dim wbQuelle As Workbook
Dim varWB_Quelle, wks_Quelle, wks_Ziel
Dim zZiel As Range
Set wbZiel = ActiveWorkbook
varWB_Quelle = Application.GetOpenFilename _
(Filefilter:="Excel(*.xl*),*.xl*", _
Title:="Bitte Datei wählen !")
If varWB_Quelle  False Then
Set wbQuelle = Application.Workbooks.Open _
(Filename:=varWB_Quelle, ReadOnly:=True)
For Each wks_Quelle In wbQuelle.Worksheets
' wenn Blattschutz nach Ziel mitkopiert wird,
' muss er in Quelle auch schon
' sein und PasteSpecial müsste hier bereits
' Fehlermeldung produzieren
wks_Quelle.Unprotect Password:="start123"
wks_Quelle.UsedRange.Copy
wks_Quelle.UsedRange.PasteSpecial Paste:=xlPasteValues
' Blattschutz muss nicht mehr aktiviert werden,
' weil Quelle später mit
' SaveChanges:=Flase geschlossen wird
Next
Application.CutCopyMode = False
wbQuelle.Sheets.Copy after:=wbZiel.Sheets(wbZiel.Sheets.Count)
' Nach einlesen der Sheets aus Quelle, Sheets in
' Ziel bearbeiten
For Each wks_Ziel In wbZiel.Worksheets
' Formel in Zellen in Werte umwandeln
For Each zZiel In wks_Ziel
If zZiel.HasFormula = True Then
zZiel.Formula = zZiel.Value
End If
Next zZiel
' Blattschutz wieder setzen, aber nur für Blätter mit dem Namen
' "DATEN" und "ERGEBNIS
If wks_Ziel.Name Like "DATEN" Or wks_Ziel.Name Like "ERGEBNIS" Then
wks_Ziel.Protect Password:="start123"
End If
Next wks_Ziel
wbQuelle.Close savechanges:=False
Else: End
End If
End Sub


Jetzt wird in Ziel nur noch Blattschutz gesetzt wenn Tabellenblatt "DATEN" oder "ERGEBNIS" heisst. Aber auch nur wenn exakt so geschrieben ist.
Gruß
Rainer

Anzeige
Danke Dir, so passts :-) owT
06.05.2009 11:36:35
Mandy

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige