Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
ID tematu: 787 Skopiuj do schowka Makro usuwające... makra
Autor Wiadomość
Sopell
[Usunięty]

Wysłany: 27-03-2007, 14:13   Makro usuwające... makra

Czy można napisać takie makro, które po uruchomieniu usuwałoby wszystki pozostałe makra z pliku?
Jest to dla mnie o tyle istotne, że mam plik raportu z wieloma makrami i przy końcowym zapisie raportu usunięcie makr znacznie zmniejsza objętość pliku...
Dzięki
ID posta: 4126 Skopiuj do schowka
 
 
Tajan


Pomógł: 5252 razy
Posty: 11450
Wysłany: 27-03-2007, 22:03   

Można. Przykłądowe makro zapisujące aktywny skoroszyt pod nową nazwą, z usunięciem z niego makr, może wyglądać tak:
Kod:
Sub ZapiszBezMakr()

Dim nazwaPliku As Variant
Dim kopiaPliku As Workbook
Dim VBComp As Object
Dim VBComps As Object

nazwaPliku = Application.GetSaveAsFilename( _
            filefilter:="Skoroszyt Excel,*.xls", _
            Title:="Zapisz kopię bez makr")

If nazwaPliku = False Then Exit Sub

ActiveWorkbook.SaveCopyAs nazwaPliku
Set kopiaPliku = Workbooks.Open(nazwaPliku)

Set VBComps = kopiaPliku.VBProject.VBComponents

For Each VBComp In VBComps
   Select Case VBComp.Type
      Case vbext_ct_StdModule, vbext_ct_MSForm, _
            vbext_ct_ClassModule
         VBComps.Remove VBComp
      Case Else
         With VBComp.CodeModule
            .DeleteLines 1, .CountOfLines
         End With
   End Select
Next VBComp

kopiaPliku.Save

End Sub


W nowszych wersjach Excela (od 2002) prawidłowe działanie tego kodu wymaga zaznaczenia
opcji "Ufaj dostępowi do programu Visual Basic Project" w menu
Narzędzia/Makro/Zabezpieczenia - Zaufani wydawcy.
ID posta: 4133 Skopiuj do schowka
 
 
Sopell
[Usunięty]

Wysłany: 02-04-2007, 13:40   

Dzięki działa!
Nie wiem tylko zcemu po usunięciu 5 makr (dość rozbudowanych) plik zmniejszył mi się jedynie o 18kB... Przez to cała operacja jest trochę bez sensu :/
ID posta: 4362 Skopiuj do schowka
 
 
Tajan


Pomógł: 5252 razy
Posty: 11450
Wysłany: 03-04-2007, 01:24   

Excel zapisuje dane o arkuszu poczawszy od komorki A1 do tzw. LastCell (ostatniej komorki) okreslajacą komorką na przecięciu ostatniego wiersza i kolumny, w ktorych byly wprowadzane zmiany, przy czym, wcale nie musi to byc zmiana wartosci, równie dobrze moze to byc zmiana formatu komorki.
Problem jest w tym, ze samo wyczyszczenie zawartosci komorek nie powoduje zmiany polozenia LastCell i mimo, ze arkusz wyglada na pusty, to do pliku jest zapisywany nieraz bardzo duzy obszar. Aby sprawdzic jakie jest aktualne polozenie LastCell na arkuszu trzeba sie posluzyc menu Edycja ->Przejdz do->Specjalnie->Ostatnia komorka.
Aby zresetowac polożenie LastCell należy zaznaczyc nieużywane wiersze i kolumny miedzy nią a istniejacymi danymi i następnie usunąć je za pomoca menu kontekstowego lub menu Edycja->Usun (w Excel 97 ostatnia komorka jest resetowana dopiero po zamknieciu i zapisaniu skoroszytu, w wyższych - atomatycznie). Po zapisaniu skoroszytu jego rozmiar powinien ulec zmniejszeniu.
ID posta: 4396 Skopiuj do schowka
 
 
Sopell
[Usunięty]

Wysłany: 04-04-2007, 12:36   

Dzięki! Człowiek się uczy całe życie :)
ID posta: 4480 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.wip.pl

Archiwum

Strona używa plików cookies.

Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przeglądarce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
Sprawdź, w jaki sposób przetwarzamy dane osobowe