Aby zapisać skoroszyt pod nową nazwą za pomocą okna dialogowego "Zapisz jako" możemy skorzystać z polecenia:
Sub
SendKeys "{F12}", True
End Sub
Z poleceniem wiąże się pewien problem. Jeżeli po zapisaniu skoroszytu pod nową nazwą ma zostać wykonany pewien kod programu (np. stworzyliśmy w Excelu skoroszyt-szablon, którego nie chcemy utracić), wtedy, po wybraniu przycisku "Anuluj", zamiast "OK", w oknie dialogowym "Zapisz jako" nasz kod wykonany zostanie w szkoroszycie-szablonie. Jak uniknąć takiego zdarzenia? Poniżej przedstawiam kod procedury unikający takiego zdarzenia:
Sub
'Najpierw musimy zadeklarować zmienne typu String
'zachowujące nazwę skoroszytu przed i po zmianie jego nazwy
Dim nazwaPrzed As String
Dim nazwaPo As String
'Przypisanie nazwy skoroszytu przed zmianą nazwy do zmiennej nazwaPrzed
nazwaPrzed = ActiveWorkbook.Name
'Otwarcie okna "Zapisz jako"
SendKeys "{F12}", True
'Przypisanie nazwy skoroszytu po zmianie nazwy do zmiennej nazwaPo
nazwaPo = ActiveWorkbook.Name
'PĘTLA ZAPISYWANIA SKOROSZYTU POD NOWĄ NAZWĄ
'Jeżeli zmienna nazwaPrzed jest taka sama, jak zmienna nazwaPo,
'wykonana zostanie pętla otwierająca okno MsgBox z komunikatem
'"ZAPISZ PLIK POD NOWĄ NAZWĄ!!!", a następnie okno dialogowe
'"Zapisz jako".
'Pętla wykonywać się będzie do chwili, aż zmienna nazwaPrzed będzie różna od zmiennej nazwaPo,
'czyli nazwaPrzed <> nazwaPo.
If nazwaPrzed = nazwaPo Then
Do Until nazwaPrzed <> nazwaPo
MsgBox "ZAPISZ PLIK POD NOWĄ NAZWĄ!!!"
nazwaPrzed = ActiveWorkbook.Name
SendKeys "{F12}", True
nazwaPo = ActiveWorkbook.Name
Loop
'Teraz następuje procedura wykonywana po zapisaniu skoroszytu pod nową nazwą.
[procedura wykonywana po zapisaniu skoroszytu pod nową nazwą]
End If
End Sub
A teraz pełny kod procedury bez objaśnień:
Sub
Dim nazwaPrzed As String
Dim nazwaPo As String
nazwaPrzed = ActiveWorkbook.Name
SendKeys "{F12}", True
nazwaPo = ActiveWorkbook.Name
If nazwaPrzed = nazwaPo Then
Do Until nazwaPrzed <> nazwaPo
MsgBox "ZAPISZ PLIK POD NOWĄ NAZWĄ!!!"
nazwaPrzed = ActiveWorkbook.Name
SendKeys "{F12}", True
nazwaPo = ActiveWorkbook.Name
Loop
[procedura wykonywana po zapisaniu skoroszytu pod nową nazwą]
End If
End Sub |