Hallo Kaba,
folgender Code muss im VBA-Editor unter "Diese Arbeitsmappe eingesetzt werden:
Const myPath = "y:\kalkulation\"
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Static Instanz As Boolean
If Not Instanz Then
Instanz = True
Dim myForm As XlFileFormat
myForm = IIf(ActiveWorkbook.HasVBProject, xlOpenXMLWorkbookMacroEnabled, xlWorkbookNormal)
If Not CheckValide(Tabelle1.Cells(1, 5).Value, 5) Then
Tabelle1.Activate
Tabelle1.Cells(1, 5).Select
MsgBox "Bitte geben Sie eine 5-stellige Kundennummer ein.", vbCritical
Cancel = True
SaveAsUI = False
Exit Sub
ElseIf CheckValide(Tabelle1.Cells(1, 3).Value, 8) Then
Tabelle1.Activate
Tabelle1.Cells(1, 3).Select
MsgBox "Bitte geben Sie die PNr (8 Stellig ein.", vbCritical
Cancel = True
SaveAsUI = False
Exit Sub
End If
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=myPath & Tabelle1.Cells(1, 3).Value, FileFormat:=myForm
Debug.Print "Saved " & ActiveWorkbook.Saved
Cancel = ActiveWorkbook.Saved
SaveAsUI = Not Cancel
Application.DisplayAlerts = True
Instanz = False
End If
End Sub
Function CheckValide(Value As String, iLength As Integer) As Boolean
CheckValide = False
If IsNumeric(Value) Then
If Len(CStr(Val(Value))) = iLength Then
CheckValide = True
End If
End If
End Function
Dieser Code wird automatisch vor dem Speichern der Arbeitsmappe ausgeführt und prüft, ob die Angaben korrekt eingesetzt worden sind.
Erst danach wird der eigendliche Speicherbefehl ausgeführt.
Die Befehle Application.DisplayAlerts müssen kurzfristig abgeschaltet werden, da ansonsten beim Überschreiben einer bestehenden Datei eine Warnung angezeigt werden würde.
LG, BigBen
|