ID tematu: 787
 |
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
|
|
|
 |
|
|
|
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
|
|
|
 |
|
|
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
|
|
|
 |
|
|
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
|
|
|
 |
|
|
Sopell [Usunięty]
|
Wysłany: 04-04-2007, 12:36
|
|
|
Dzięki! Człowiek się uczy całe życie :) |
|
 | ID posta:
4480
|
|
|
 |
|
|
|
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
|
|
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
|