Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
792to796
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
792to796
792to796
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Deite speichern, Name vorgeben

Deite speichern, Name vorgeben
23.08.2006 09:58:07
mtremer
Hallo Excel-Freunde,
ich habe hier für mich ein doch ziemlich grosses Problem.
Uwe (Nickname ingUR) hat mir dabei bereits sehr geholfen.
Nur leider habe ich es verpasst, ihm rechtzeitig zu Antworten; unsere Diskussion ist nun im Archiv :-(
Also: sorry an Uwe, und an alle die Bitte, mir zu helfen.
Folgendes Problem: Ich will eine Exceldatei speichern.
Dabei sind Dateiname und Speicherort durch bestimmte Zellen bzw. Kriterien vorgegeben. Diese beiden Probleme sind, wie ihr in dem nachfolgenden Code bestens behoben.
Jedoch ist die Ursprungsdatei schreibgeschützt, damit niemand die Datei überspeichern kann. Sobald Änderungen vorgenommen wurden, soll die Datei wie oben beschrieben gespeichert werden.
Allerdings soll der Schreibschutz nicht in die neue Datei übernommen werden, sodass an dieser jederzeit Änderungen vorgenommen werden können, ohne die Datei unter einem neuen Namen gespeichert werden muss.
Bitte helft mir, dieses Problem zu lösen. Ein weiteres Problem ist, dass ich kaum etwas von VBA verstehe. Daher bitte ich um eine "klare" Lösung...
Hier der Code, den Uwe erarbeitet hat (aber bei mir leider nicht funktioniert):
Option Explicit

Private Sub CommandButton1_Click()
Dim strFName As String, strRootPath As String, strPathName As String
strRootPath = "C:\TEMP\" ' TEMP ggf. durch gleichbleibenden Vorspann des Path
' ersetzen, unter denen sich die Unterverzeichnisse
' Verz1 und Verz2 befinden.
strFName = Worksheets("Tabelle1").Range("A1")
Select Case Left(UCase(strFName), 1)
Case "A": strPathName = "Verz1"
Case "B": strPathName = "Verz2"
Case "C": strPathName = "Verz3"
Case "D": strPathName = "Verz4"
Case "E": strPathName = "Verz5"
Case Else
MsgBox "Unzulässiger Kennbuchstabe, Datei wird nicht gesichert"
Exit Sub
End Select
strPathName = strRootPath + strPathName + "\"
Dim OldDir As String, OldDrive As String
Dim strReturnPathFName As String, strMsg As String, antw As VbMsgBoxStyle
Dim OldMode As Boolean, OldAttr As Integer
If Dir(strPathName, vbDirectory) = "" Then
strMsg = "Verzeichnis " & vbLf & _
strPathName & vbLf & _
"nicht vorhanden" & vbLf & _
"Soll es angelegt werden?"
antw = MsgBox(strMsg, vbYesNo + vbDefaultButton1, "Verzeichnisverwaltung")
If antw Then
MkDir (strPathName)
Else
Exit Sub
End If
End If
OldDir = CurDir
OldDrive = Left(OldDir, 1)
ChDrive (strPathName)
ChDir strPathName
strReturnPathFName = Application.GetSaveAsFilename(strFName, "Excel-File (*.xls), *.xls", , "MySave")
If Not (strReturnPathFName = "Falsch") Then
'merke Zustandeinstellung des Schreibschutzes der Datei strReturnPathName(!),
'sofern diese vorhanden ist, und der aktiven Arbeitsmappe
OldMode = ThisWorkbook.ReadOnly
On Error Resume Next
OldAttr = GetAttr(strReturnPathFName)
On Error Resume Next
SetAttr strReturnPathFName, GetAttr(strReturnPathFName) - vbReadOnly
ThisWorkbook.ChangeFileAccess Mode:=xlReadWrite
On Error Resume Next
ActiveWorkbook.SaveAs (strReturnPathFName) 'strPathName & strFName)
If Err.Number <> 0 Then
strMsg = "Speichern von" & vbLf & _
strPathName & strFName & vbLf & _
"ist fehlgeschlagen oder wurde abgebrochen!"
MsgBox strMsg
Else
'Falle 1.1 und 2.1
'setzt Attr. der gespeicherten Datei und
'der Arbeitsmappe auf Stand vor dem Speichern zurück
'SetAttr strReturnPathFName, OldAttr
'ThisWorkbook.ChangeFileAccess Mode:=OldMode
'Fälle 2.1. und 2.2.
'setzt Attr. der gespeicherten Datei und
'der Arbeitsmappe auf [Schreibgeschützt]
On Error Resume Next
SetAttr strReturnPathFName, GetAttr(strReturnPathFName) + vbReadOnly
ThisWorkbook.ChangeFileAccess Mode:=xlReadOnly
End If
End If
ChDrive (OldDrive)
ChDir (OldDir)
End Sub

Danke im Voraus und viele Grüße
Marco

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Deite speichern, Name vorgeben
23.08.2006 11:10:57
ingUR
Hallo, Marco,
da Du bisher für mich nicht eindeutig genug beschreiben hattest, welchen Schutz der neu zu erstellenden Datei geben wolltest, bzw. einmal angelegt, welchen Schutz sie erhalten soll, hatte ich beide Möglichkeiten vorgesehen, wobei die, dass der Schutz auf die neue Datei entfällt, auskommentiert wurde.
Du beschreibst nun, dass die bearbeiteten Dateien in jedem Fall ohne Schreibschutz verbleiben sollen. Daher kannst Du den entsprechenden Teile, die mit der Sicherungseinstellung der Datei zu tun haben alle streichen oder auskommentieren, indem Du das Hochkommma vor das erste Schriftzeichen der Zeile setzt.
....
If Not (strReturnPathFName = "Falsch") Then
'merke Zustandeinstellung des Schreibschutzes der Datei strReturnPathName(!),
'sofern diese vorhanden ist, und der aktiven Arbeitsmappe
OldMode = ThisWorkbook.ReadOnly
On Error Resume Next
OldAttr = GetAttr(strReturnPathFName)
On Error Resume Next
SetAttr strReturnPathFName, GetAttr(strReturnPathFName) - vbReadOnly

ThisWorkbook.ChangeFileAccess Mode:=xlReadWrite
On Error Resume Next
ActiveWorkbook.SaveAs (strReturnPathFName) 'strPathName & strFName)
If Err.Number 0 Then
strMsg = "Speichern von" & vbLf & _
strPathName & strFName & vbLf & _
"ist fehlgeschlagen oder wurde abgebrochen!"
MsgBox strMsg
Else
'Falle 1.1 und 2.1
'setzt Attr. der gespeicherten Datei und
'der Arbeitsmappe auf Stand vor dem Speichern zurück
'SetAttr strReturnPathFName, OldAttr
'ThisWorkbook.ChangeFileAccess Mode:=OldMode
'Fälle 2.1. und 2.2.
'setzt Attr. der gespeicherten Datei und
'der Arbeitsmappe auf [Schreibgeschützt]
On Error Resume Next
SetAttr strReturnPathFName, GetAttr(strReturnPathFName) + vbReadOnly
ThisWorkbook.ChangeFileAccess Mode:=xlReadOnly

End If
End If
....
Das sollte eigentlich klappen, den der ursprüngliche Code speicherte die Arbeitsmappen unter dem neuen Namen und setzte dann die Attributte, die zuvor für die Datei festgesellt wurden. Dieses Verhalten wird durch die Streichungen aufgehoben.
Gruß,
Uwe
Anzeige
AW: Deite speichern, Name vorgeben
23.08.2006 11:42:00
mtremer
Hallo Uwe,
juhuuu, es klappt!
Aber einen Haken hat das Programm noch:
Er zeigt nach dem Dialogfeld "MySave" eine Abfrage eines Kennworts an.
Erst wenn ich auf Abbrechen klicke, wird die Datei ohne Kennwort gespeichert.
Kann man dieses Feld noch irgendwie weglassen?
Viele Grüße
Marco
AW: Deite speichern, Name vorgeben
24.08.2006 08:04:17
ingUR
Hallo, Marco,
hat dei Mustermappe den Kennwortschutz oder einzelne Bereiche der Mappe (Tabellen, Zellen)?
Bitte setze folgende Anweisungen vor und nach dem Dialogbefehl:
...
Application.DisplayAlerts=false
strReturnPathFName = Application.GetSaveAsFilename(strFName, "Excel-File (*.xls), *.xls", , "MySave")
Application.DisplayAlerts=true
...
Momentan kann ich es nicht prüfen, ob die Abschaltung der Meldung die Kennwortnachfrage auch betrifft. Wenn diese Aktion kein Erfolg hat, dann kannst Du natürlich die beiden Zeilen um den GetSaveAsFileBefehl wieder löschen. Dann jedoch wird vermutlich die Meldung nicht zu vermeiden sein, da Du zum Entfernen des Kennwortes das existierende Kennworts im VBA-Code meines Wissens nach bekanntgeben müßtes, was dem Sinn des Kennwortes dann natürlich nicht entspricht, da vermutlich ja die Vorlage damit geschützt wird.
Gruß,
Uwe
Anzeige
AW: Deite speichern, Name vorgeben
24.08.2006 11:51:18
mtremer
nagut. Dann muss ich damit leben.
Es ist ja auch nur ein einzelner Klick auf Abbrechen, den ich nur abzuschaffen versucht habe. So schlimm ist es nicht.
Deine Leistung in dieser Anwendung ist jedenfalls beachtlich. Dadurch habe ich einen riesen Schritt für die weitere Bearbeitung der Datei gemacht. Und auch in meinem Wissen zu VBA!
Ich weiss nicht wie ich es ausdrücken soll, aber ich danke Dir sehr.
RIESIGES LOB!
Viele Grüße
Marco

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige