Czy możliwe jest automatyczne zapisywanie skoroszytu programu Excel jako włączonego makra, jeśli makro zostanie dodane do skoroszytu?

0

Obecnie w programie Excel 2010, gdy próbuję zapisać skoroszyt, który utworzyłem jako plik .xlsx, ale dodałem do niego funkcję VBA lub podprogram, program Excel wyświetla monit z pytaniem (na okrągło), czy chcę go zmienić do pliku .xlsm. Nie byłoby to dla mnie problemem, gdyby domyślna odpowiedź na to pytanie brzmiała: „tak wolałbym nie usuwać wszystkich prac programistycznych, które wykonałem podczas pracy nad tym plikiem, ponieważ zapisałem”, ale musisz aktywnie kliknąć lub przejdź do przycisku „Nie”, w przeciwnym razie zostanie zapisany jako plik .xlsx i stracisz wszystkie moduły.

Jest to jedna z niewielu sytuacji, w których napotkałem, gdzie domyślną opcją jest usunięcie danych zamiast ich zapisania. Wiem, że utratę części tej pracy jest głównie moja wina i powinienem być bardziej ostrożny, ale naprawdę chciałbym wiedzieć, czy mogę wyłączyć tę wiadomość lub jakoś zmienić domyślną.

nateAtwork
źródło
Zakładam, że masz na myśli, że masz go zapisany jako plik XLSX. Pliki XLS mogą zawierać VBA i nie zapisywać ostrzeżeń podczas zapisywania.
Inżynier Toast
@ Toast inżyniera Twoje są poprawne, mówiłem o plikach .xlsx. Ale nie wiedziałem tego o plikach .xls, przejście na pliki .xls byłoby ciekawym rozwiązaniem tego problemu. Dzięki!
nateAtwork
XLS jest formatem z lat 1997 - 2003, a zatem brakuje niektórych funkcji znalezionych w 2007 roku i później. W zależności od tego, jak fantazyjne są Twoje pliki, może ono działać lub nie. Istnieją również obawy dotyczące bezpieczeństwa, a inni użytkownicy mogą otrzymywać ostrzeżenia, że ​​plik XLS może być niebezpieczny, ponieważ zawiera makra. Tylko jedna głowa do góry.
Inżynier Toast

Odpowiedzi:

1

Państwo może , ale jest brudny i niebezpieczny.

  1. Pozwól VBA na odczyt / zapis VBA (Plik> Opcje> Centrum zaufania> Ustawienia Centrum zaufania> Ustawienia makr> Ufaj dostępowi do modelu obiektowego projektu VBA)
  2. Utwórz osobisty skoroszyt makr (jeśli jeszcze go nie masz)
  3. W ThisWorkbookobiekcie skoroszytu osobistego makra użyj Workbook_Openzdarzenia, aby zmapować Ctrl+ Sdo innego makra. (To będzie coś w stylu Application.OnKey "^s", "saveAsMacroIfMacrosExist")
  4. Użyj Workbook_BeforeClosezdarzenia, aby wyłączyć, jeśli ponownie wyłączone ( Application.OnKey "^s")
  5. Idź napisz ten podprogram - nie funkcję - w module w osobistym skoroszycie makr. (Jest to ćwiczenie dla czytelnika, ale znalazłem tutaj fragment kodu , którego nie testowałem, ale powinien przetestować, czy skoroszyt zawiera makra).
  6. Użyj Ctrl+, Saby zapisać pliki zamiast paska narzędzi lub Plik> Zapisz.

Kluczowy punkt: Wymaga to stałego zezwolenia na dostęp do modelu obiektowego projektu VBA, co jest ogólnie złym pomysłem.

Inżynier Toast
źródło
Zaakceptowałem twoją odpowiedź, ponieważ to są odpowiedzi na pytanie, które faktycznie zadałem, chociaż myślę, że po prostu przełącz na domyślne zapisywanie, ponieważ obsługa makr byłaby dla mnie lepszą metodą. Dzięki jeszcze raz!
nateAtwork
Chociaż właśnie zauważyłem, że to nie zadziała dla wcześniej istniejących plików lub plików utworzonych przez innych użytkowników, więc mogę jeszcze wrócić do twojego rozwiązania.
nateAtwork
@nateAtwork Nie polecam korzystania z tej metody, chyba że planujesz włączyć ją tylko podczas pracy z tymi plikami. Zezwolenie wszystkim makrom na dostęp do obiektu VBA otwiera się na złośliwy kod. Prawdopodobnie wszystko będzie dobrze, ale lubię grać bezpiecznie.
Inżynier Toast
0

Nie możesz tego zmienić na poziomie skoroszytu.

Można jednak zezwolić, aby program Excel zawsze domyślnie włączał wszystkie makra.

  1. Kliknij Plik> Opcje.
  2. Kliknij opcję Centrum zaufania i Ustawienia centrum zaufania.
  3. Kliknij Ustawienia makr i Włącz wszystkie makra

Jest w dokumentacji

RouteXL
źródło
Miałem już te ustawienia, gdy otrzymywałem komunikat ostrzegawczy z domyślną odpowiedzią, która usuwałaby moje makra.
nateAtwork