vbamania.pl
login:
hasło:
 
  *Rejestracja *Zapomniane hasło
 Dziś jest poniedziałek, 13 maja 2024 roku.
Ustaw jako stronę startową Ulubione Napisz
PowrótPowrót do serwisu  RegulaminRegulamin rssRSS

  tytuł wątku:
Wątki dyskusji

Zmiana nazwy skoroszytu Excela przy użyciu okna dialogowego "Zapisz jako"


otwartyotwarty rozpoczął: remunen postów: 2



napisał: Trebor
postów: 1209


umieszczony:
15 kwietnia 2011
15:42

  
Poniżej przykład z pomocy excela
Set NewBook = Workbooks.Add
Do
fName = Application.GetSaveAsFilename
Loop Until fName <> False
NewBook.SaveAs Filename:=fName

napisał: remunen
postów: 3


umieszczony:
14 kwietnia 2011
22:43

edytowany:
14 kwietnia 2011
23:22

  
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



<-wstecz  1  dalej->
wszystkich stron: 1


Sortuj posty: z