Schreibgeschützte Datei per VBA in 'normal' ändern

Hallo zusammen,

vor langer Zeit hat mir ein netter www-ler (hallo RakonDark) ein Makro gebastelt, dass damit endet, dass die Datei schreibgeschützt gespeichert wird,

„objFile.Attributes = vbReadOnly“

Jetzt bräuchte ich ein Makro, dass mir den lästigen Weg über den Windows-Explorer erspart.
Hab schon ein bisschen gegoogelt und vbNormal gefunden, aber mein VBA-Versuch scheitert kläglich (Debugger und gelb unterlegt - merde).

Könnt ihr mir da helfen?

Vielen Dank im voraus für eventuelle Antworten.

Freundliche Grüße

Jorge

Hallo Jorge,

„objFile.Attributes = vbReadOnly“

Jetzt bräuchte ich ein Makro, dass mir den lästigen Weg über
den Windows-Explorer erspart.

?

Hab schon ein bisschen gegoogelt und vbNormal gefunden, aber
mein VBA-Versuch scheitert kläglich (Debugger und gelb
unterlegt - merde).

Zeige mal den Makrocode.

Gruß
Reinhard

Hallo Reinhard und andere,

„objFile.Attributes = vbReadOnly“

Jetzt bräuchte ich ein Makro, dass mir den lästigen Weg über
den Windows-Explorer erspart.

?

Im Windows-Explorer Datei suchen, markieren, rechte Maus, Eigenschaften, Schreibschutzhäkchen setzen oder entfernen.

Zeige mal den Makrocode.

Ich habs ganz frech und laienhaft so probiert:

sub Test_normal()
objFile.Attributes = vbNormal
end sub

Ein EDV-Kollege hat sich auch schon daran versucht, hats aber nicht hingekriegt. Er hat „nur“ ein vbs-script geschrieben (was ich noch viel weniger verstehe), das der Datei vor dem öffnen den Schreibschutz entfernt. Aber das ist nicht das, was ich wollte:

Dim pfad
Dim objFSO
Dim objFile
Dim objWscript
pfad = „G:…\Test normal.xls“
’ Object für FileSystem Festlegen
Set objFSO = CreateObject(„Scripting.FileSystemObject“)
’ Datei holen
Set objFile = objFSO.GetFile(pfad)
objFile.Attributes = vbNormal
set objWscript = CreateObject(„WScript.Shell“)
'objWscript.Run „“„pfad“""
objWscript.Run „“„G:…\Test normal.xls“""

Wobei Excel gemeckert hat, weil es den Pfad nicht gefunden hat, so dass er ihn explizit angegeben hat.
Aber ich möchte die Datei schreibgeschützt öffnen und je nachdem per VBA den Schreibschutz entfernen.
Kannst du (Könnt ihr) dir jetzt darunter was vorstellen?

Freundliche Grüße

Jorge

Hallo Jorge,

Jetzt bräuchte ich ein Makro, dass mir den lästigen Weg über
den Windows-Explorer erspart.

?

Im Windows-Explorer Datei suchen, markieren, rechte Maus,
Eigenschaften, Schreibschutzhäkchen setzen oder entfernen.

Aha, ich benutze den Win Explorer nicht.

Zeige mal den Makrocode.

Ich habs ganz frech und laienhaft so probiert:

Ich meinte den Code von Rakon.

sub Test_normal()
objFile.Attributes = vbNormal
end sub

Woher soll Vba denn wissen was objFile ist?

Ein EDV-Kollege hat sich auch schon daran versucht, hats aber
nicht hingekriegt. Er hat „nur“ ein vbs-script geschrieben
(was ich noch viel weniger verstehe), das der Datei vor dem
öffnen den Schreibschutz entfernt. Aber das ist nicht das, was
ich wollte:

Der Kollege sollte hier mal auftauchen, nette Antworter mit VBS Kenntnissen sind hier erwünscht *gg*

Zusammenfassung, du willst eine Mappe öffnen, mal egal ob sie Schreibgeschützt ist oder nicht. Dann soll eine Abfrage kommen wo du auswählen kannst ob du sie Schreibgeschützt haben willst oder nicht?
Sehe ich das so richtig?

Gruß
Reinhard

Hallo Reinhard,

Sub speichernals()
’ wer weiss was hilft gerne
’ written by …

Dim abteilung
Dim station
Dim patient
Dim pfad
Dim objFSO As Object
Dim objFile As Object

’ abteilung aus Tabellenblatt Assessment reihe 1 Spalte 2 holen
abteilung = Sheets(„Assessment“).Cells(3, 4)
’ station aus Tabellenblatt Assessment Reihe 1 Spalte 2 holen
station = „Station " & Sheets(„Assessment“).Cells(2, 4)
’ patient aus Tabellenblatt Assessment Reihe 2 Spalte 2 holen
patient = Sheets(„Assessment“).Cells(2, 1) & _
" " & Year(Now()) & (“.") & Month(Now()) & (".") & Day(Now()) & (".") & _
" " & Hour(Now()) & (".") & Minute(Now()) & („Uhr“)
’ speicherpfad erzeugen
pfad = „G:\Krankenhaus“ & _
abteilung & _
„\Pflege“ & station & _
„\Assessment\Laufende Behandlungen“ & _
patient & „.xls“
Sheets(„Forensik“).Visible = True
Sheets(„Geronto“).Visible = True
Sheets(„Sucht“).Visible = True
’ Tabellenblätter auf 1 Zeile 1 reihe setzen
’ alle Tabellenblätter druchgehen
For Each Worksheet In Worksheets
’ Tabelle auswählen
Sheets(Worksheet.Name).Select
’ Erste Zeile Erste Reihe auswählen
Cells(1, 1).Select
Next
Sheets(„Forensik“).Select
ActiveWindow.SelectedSheets.Visible = False
Sheets(„Geronto“).Select
ActiveWindow.SelectedSheets.Visible = False
Sheets(„Assessment“).Select
Range(„A1“).Select
’ speichern als
ActiveWorkbook.SaveAs Filename:=pfad, _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
’ Object für FileSystem Festlegen
Set objFSO = CreateObject(„Scripting.FileSystemObject“)
’ Datei holen
Set objFile = objFSO.GetFile(pfad)
’ Schreibschutz aktivieren
objFile.Attributes = vbReadOnly
’ Objekte Freigeben
Set objFSO = Nothing
Set objFile = Nothing
End Sub

Private Sub SpeicherButton_Click()
speichernals
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub

Die Datei wird also immer schreibgeschützt gespeichert und somit auch geöffnet.
Ich wünschte mir ein Makro, das ich per Button ausführe und die schreibgeschützte geöffnete Datei umwandelt in eine ohne Schreibschutz.
Beim speichern wird sie dann wieder schreibgeschützt.

Meinst du das geht?

Gruß

Jorge

[MOD:Email-Adresse entfernt

Hallo Jorge,

’ written by …

mail den hiesigen Mod an und bitte um Löschung der Emailadresse.

Zu deiner sonstigen Codedarstellung, habe ich es versäumt dir vom Pre-Tag zu berichten?
Der wird unterhalb des Eingabefensters erläutert.

’ abteilung aus Tabellenblatt Assessment reihe 1 Spalte 2
holen
abteilung = Sheets(„Assessment“).Cells(3, 4)
’ station aus Tabellenblatt Assessment Reihe 1 Spalte 2 holen
station = "Station " & Sheets(„Assessment“).Cells(2, 4)
’ patient aus Tabellenblatt Assessment Reihe 2 Spalte 2 holen
patient = Sheets(„Assessment“).Cells(2, 1) & _

Die Anmerkungen zum Code sind falsch.

Sheets(Worksheet.Name).Select
’ Erste Zeile Erste Reihe auswählen
Cells(1, 1).Select

Das kann man so schreiben:
Sheets(Worksheet.Name).Cells(1, 1).Select

Andrerseits verstehe ich überhaupt nicht warum da Blätter eingeblendet werden, darauf Zellen markiert, danach werden die Blätter wieder ausgeblendet und die mappe gespeichert.

Sheets(„Forensik“).Select
ActiveWindow.SelectedSheets.Visible = False

Wenn schon dann so:
Sheets(„Forensik“).Visible = False

Ich wünschte mir ein Makro, das ich per Button ausführe und
die schreibgeschützte geöffnete Datei umwandelt in eine ohne
Schreibschutz.
Beim speichern wird sie dann wieder schreibgeschützt.
Meinst du das geht?

Ja.
Mir ist grad nur nicht klar genug ob der Makrocode in der Mappe selbst oder in einer Fremdmappe (personl.xls o.ä.) stehen muß.
Mal schauen.

Gruß
Reinhard

[MOD:Emailadresse entfernt

Hallo Reinhard,

mail den hiesigen Mod an und bitte um Löschung der
Emailadresse.

hab ich gemacht.

Die Anmerkungen zum Code sind falsch.

Ja, das weiß ich. Ich bin ne faule S…; die Zellbezüge haben sich geändert und ich hab die Erläuterungen nicht angepasst.

Sheets(Worksheet.Name).Select
’ Erste Zeile Erste Reihe auswählen
Cells(1, 1).Select

Das kann man so schreiben:
Sheets(Worksheet.Name).Cells(1, 1).Select

Solche Dinge würdest du recht häufig in den ca.40 Makros finden, die die Datei hat; es sind Ergebnisse vom Makro-Aufzeichnen, die ich Laie in die Experten-Makros eingebaut habe.

Andrerseits verstehe ich überhaupt nicht warum da Blätter
eingeblendet werden, darauf Zellen markiert, danach werden die
Blätter wieder ausgeblendet und die mappe gespeichert.

Tatsächlich sehr kompliziert, aber notwendig. Und da die Datei seit langen Monaten stabil läuft, bin ichs zufrieden. Ich hatte dir die ganze Datei mal zu Weihnachten geschickt, aber du liest ja deine mails nicht…:smile: so regelmäßig…

Sonnige Grüße aus dem Süden

Jorge (in froher Erwartung)