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 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…
so regelmäßig…
Sonnige Grüße aus dem Süden
Jorge (in froher Erwartung)