PDA

Vollständige Version anzeigen : Beim Speichern Schaltfläche unterdrücken


JobCoach
13.03.2009, 11:13
Hallo Folks,

mein Formular wertet einen Test aus. Auf Knopfdruck wird der Speicherdialog mit Voreinstellung geöffnet, sodass relativ einfach der Speicherort eingetragen werden kann. Das Formular wird entsprechend gespeichert und anschließend werden alle relevanten Eingabefelder gelöscht, sodass eine neue Bewertung durchgeführt werden kann.
Dass klappt alles einwandfrei.

Nun meine Frage: Kann ich das Formular so abspeichern, dass die Schaltfläche [Speichern, Drucken und Felder leeren] nicht mit abgespeichert wird. Ich habe nämlich die Befürchtung, dass zu einem späteren Zeitpunkt, wenn das Testergebnis mal eingesehen wird, irgendjemand die Schaltfläche betätigt und das ganze Ergebnis dann verschwunden ist.

Ich hoffe, dass meine Erläuterung verständlich ist. Jedenfall hängt die Datei an, um sich ein Bild zu machen.

Wer kann mir weiterhelfen?

Vielen Dank schon mal vorab.

Manfred

Demian
13.03.2009, 11:25
Moin,moin,

du kannst den Button deaktivieren. Ändere hierfür:

Private Sub cmdClear_Click()
SpeichernMitvoreingestelltemVerzeichnis
Drucken
Löschen
Range("J1").Select
End Sub

in

Private Sub cmdClear_Click()
SpeichernMitvoreingestelltemVerzeichnis (cmdClear.Object)
Drucken
Löschen
Range("J1").Select
End Sub

und

Public Sub SpeichernMitvoreingestelltemVerzeichnis()
Dim v As Variant
Dim strNameVorname As String
strNameVorname = Range("J1")

ChDrive ("v:")
ChDir ("V:\Projekte\PAS\PAS-02b\")
v = Application.GetSaveAsFilename _
("Test-Ergebniss " & strNameVorname & ".xls", "Excel-Mappen (*.xl*),*.xl*", 1, _
"640 Test Ergebnisse")
If v = False Then
Else
ThisWorkbook.Save
End If
End Sub


in

Public Sub SpeichernMitvoreingestelltemVerzeichnis(btn As Object)
btn.Enabled = False
Dim v As Variant
Dim strNameVorname As String
strNameVorname = Range("J1")

ChDrive ("v:")
ChDir ("V:\Projekte\PAS\PAS-02b\")
v = Application.GetSaveAsFilename _
("Test-Ergebniss " & strNameVorname & ".xls", "Excel-Mappen (*.xl*),*.xl*", 1, _
"640 Test Ergebnisse")
If v = False Then
Else
ThisWorkbook.Save
End If
End Sub


Gruß
Demian

Demian
13.03.2009, 12:39
Storno. Irgendwie hab ich mich in der Eile verlesen. Sorry.

Also, wenn der Button beim Speichern gelöscht werden soll kannst du das Workbook_BeforeSave-Ereignis nutzen.

Folgender Code löscht den Button vor dem Speichern endgültig:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim btn As Object
Set btn = Tabelle1.OLEObjects("cmdClear")
btn.Delete
End Sub

Gruß
Demian

JobCoach
13.03.2009, 12:56
Hallo Demian,

ich habe gerade deinen ersten Vorschlag ausprobiert und musste feststellen, dass das nicht das Richtige ist.

Nochmal eine kurze Erläuterung:

Mein Originalformular soll so bleiben wie es ist. Es soll lediglich nach jeder Auswertung das Ergebnis abgespeichert werden und die relevanten Felder wieder gelöscht werden.
Bei dem gespeicherten Testergebnis, soll auf dem Formular jedoch die Schaltfläche nicht mehr angezeigt werden, damit ein "versehentliches" Löschen der Daten nicht möglich ist.

Deine zweite Lösung werde ich jetzt testen. Ich melde mich wieder.

Bis dann dann

Manfred

JobCoach
13.03.2009, 13:06
Hallo Demian,

auch deine zweite Möglichkeit funktioniert bei mir nicht.

Bis dann dann

Manfred

IngGi
13.03.2009, 13:29
Hallo Manfred,

mit
Tabelle1.Unprotect "Kennwort"
Tabelle1.Shapes(1).Delete
Tabelle1.Protect "Kennwort"

kannst du den Button löschen.

Gruß Ingolf

JobCoach
13.03.2009, 14:00
Hallo Ingolf,

ich bekomme es nicht so hin wie ich es gerne hätte. Ich hänge die Datei noch einmal an, könntest du mir den Code entsprechend ändern?

Vielen Dank

Manfred

IngGi
13.03.2009, 14:52
Hallo Manfred,

anbei die ergänzte Datei. Du musst noch zweimal Kennwort durch das richtige Kennwort für den Blattschutz ersetzen. Die ergänzten Codezeilen befinden sich im Speichermakro. Ausserdem habe ich die Reihenfolge der Makroaufrufe verändert. Wenn du die Datei im momentanen Zustand ausdrucken, anschließend die Daten löschen und die "leere" Datei anschließend speichern willst, muss die Bearbeitungsreihenfolge natürlich Drucken - Löschen - Speichern sein. Noch eine Anmerkung: Achte bitte künftig darauf, dass du bei Beispielmappen, die du hochlädst vorher den Blattschutz entfernst. Zumindest wenn dieser kennwortgeschützt ist. Das Passwort zu knacken ist zwar ein Kinderspiel, muss aber natürlich trotzdem gemacht werden. Mit geschützten Blättern kann man ja nicht testen.

Gruß Ingolf

JobCoach
16.03.2009, 07:19
Hallo Ingolf,

erstmals Danke für deine Mühen. Das mit dem Passwort hatte ich glatt vergessen. Sorry. Ich werde beim nächsten Mal darauf achten. Ich habe jetzt aber noch folgendes Problem:

Die Originaldatei wird geöffnet, die relevanten Felder werden gefüllt. Dann soll die Datei ausgedruckt und unter einem anderen Namen gespeichert werden und zwar soll der Name aus J1 übernommen werden. Beim Abspeichern soll die Schaltfläche in der neuen Datei gelöscht werden. Danach sollen die relevanten Felder wieder gelöscht werden.
Das klappt jetzt soweit alles.
Mein Problem: Nach denm Zurücksetzen der Felder ist nicht mehr die Originaldatei aktiv, sondern die mit dem neuen Namen. Wenn ich diese jetzt schließen möchte, erscheint die Abfrage ob die Änderungen gespeichert werden sollen oder nicht.
Wie kann ich dieses Problem lösen?

Vielen Dank im Voraus

Manfred

IngGi
16.03.2009, 08:00
Hallo Manfred,

ActiveWorkbook.Close True
wenn du die Änderungen speichern willst oder
ActiveWorkbook.Close False
wenn du die Änderungen nicht speichern willstl.

Gruß Ingolf

JobCoach
16.03.2009, 10:11
Hallo Ingolf,

Wie sag ich es meinem Kinde (Excel)?

Die Originaldatei wird doch als "VornameNachname(J1) & Testergebnis" abgespeichert und zwar genau dort wo sie hin soll. Das geschieht ja per Code.

Dann werden die Felder geleert. "Testergebnis" dann nicht mehr meine Originaldatei ist, sondern die "VornameNachme & Testergebnis".

Nachdem Speichern sollen dann zwei Dateien existieren:
1. Die Datei Testergebnis.xls mit Schaltfläche und
2. Die Datei VornameNachname & Testergebniss.xls ohne Schaltfläche.

Das ist das Problem. Wie kann ich das lösen?

Bis dann dann

Manfred