< návrat zpět

MS Excel


Téma: Smazání VBA kódu ke konkrétnímu datu? rss

Zaslal/a 13.2.2025 7:25

Ahoj,

poradí prosím někdo, zda lze pomocí VBA smazat VBA kód k určitému datu?

Pokud ano, tak jakým způsobem?

Díky moc

Zaslat odpověď >

Strana:  1 2   další »
#057250
elninoslov
Iba nejaký modul či konkrétne makro alebo všetky triedy a moduly ?
Mazacie makro bude v inom súbore alebo v tom z ktorého sa má mazať ?
Ide teda aj o zmenu XLSM -> XLSX ?
Ten súbor bude počas toho otvorený a používaný ?

Niektoré prípady možné asi nebudú. Napr. si myslím, že nebude možné makrom zmazať samé seba. To bude treba vymyslieť. A možno komplikovane napr. cez novú inštanciu Excelu ...citovat
#057251
€Ł мσşqμΐτσ
A co ten datum?
Bude vázaný na buňku, fixně nastavený v makru, z userformu, nebo jakým způsobem se dopracuje k tomu datumu?citovat
#057252
avatar

Iba nejaký modul či konkrétne makro alebo všetky triedy a moduly ?
***Jde o smazání řekněme všech maker, tříd a modulů v daném listu resp. znemožnění dalšího používaní automatizovaného VBA řešení (něco jako free trial verze na 30 dní)***
Mazacie makro bude v inom súbore alebo v tom z ktorého sa má mazať ? ***V tom, ze kterého se má mazat***
Ide teda aj o zmenu XLSM -> XLSX ? ***Nutně ne, jde primárně o smazání maker (znemožnění dalšího používaní automatizovaného VBA řešení), přípona může klidně zůstat stejná***
Ten súbor bude počas toho otvorený a používaný ? ***Úplně nerozumím, jak to myslíte. Ten soubor bude až do daného data používán (dejme tomu několikrát týdně)***

______________________________

A co ten datum?
Bude vázaný na buňku, fixně nastavený v makru, z userformu, nebo jakým způsobem se dopracuje k tomu datumu?


***fixně nastavený v makru prosím***
citovat
#057253
€Ł мσşqμΐτσ
Ahoj, tady makro viz níže, které maže komplet všechny makra co je v sešite.
Vložit do Thisworkbook

Private Sub Workbook_Open()
Dim VBProj As Object
Dim VBComp As Object
Dim Modul As Object
Dim DatumSmazani As Date

' Nastav požadované datum smazání
DatumSmazani = DateValue("2025-02-13") ' Změň na požadované datum

' Pokud je dnešní datum vyšší nebo rovno zadanému datu, smaže kód
If Date >= DatumSmazani Then
' Povolit přístup k VBA projektu
Set VBProj = Thisworkbook.VBProject

' Projít všechny moduly a smazat je
For Each VBComp In VBProj.VBComponents
Select Case VBComp.Type
Case 1, 2, 3 ' Standardní moduly, třídy a uživatelské formuláře
VBProj.VBComponents.Remove VBComp
Case 100 ' Modul sešitových událostí (např. ThisWorkbook, List1,...)
Set Modul = VBComp.CodeModule
Modul.DeleteLines 1, Modul.CountOfLines
End Select
Next VBComp
MsgBox "Uplinula doba trial verze, všekeré makra byly odstraněny!"
End If
End Sub
citovat
#057254
Stalker
Pouze za předpokladu, že uživatel bude mít povolený přístup k objektovému modelu. Což si myslím není defautlní volba.citovat
#057255
€Ł мσşqμΐτσ
Stačí přinutit uživatele aby si povolil objektové moduly už při prvním použití sešitu. Třeba zamknutím celého sešitu, nebo schovaní listů atd...citovat
#057256
avatar
A to prosím udělám jak? Zkoušel jsem to testovat s dnešním datem (VBA upraveno na dnešní datum včera). Když dnes spustím soubor, vyskočí mi hláška

Run-time error '1004'

Programový přístup k projektu jazyka Visual Basic není důveryhodný.

+ tlačítka s možnosti: END / DEBUG / HELPcitovat
#057257
Stalker
5 Přesně o tom píšu. Musíš povolit přístup k objektovému modelu v centru zabezpečení. 99,8% uživatelů bude mít tuto volbu zakázanou, tím pádem nedojde k odstranění maker, která budou nadále funkční.
Jen trouba by si tuto volbu dobrovolně zapnul u "cizího" souboru.citovat
#057258
elninoslov
Tak ono teoreticky to je možné zmeniť nedobrovoľne, odoslaním patričnej sekvencie kláves. Lenže treba to ošéfovať pre rôzne verzie Office, ale hlavne použiť čo najmenej klávesových skratiek, lebo sú závislé na jazykovej mutácii. Tu je príklad EN vs SK/CZ. Do horného menu sa dostane raz cez Alt+S, inokedy cez Alt+F.
Sub Doverovat_VBA()
Dim LF As String
Select Case Application.International(XlApplicationInternational.xlCountryCode)
Case 1: LF = "f" 'EN
Case 421, 420: LF = "s" 'SK/CZ
Case Else:
End Select
If LF <> "" Then CreateObject("WScript.Shell").SendKeys "%(" & LF & "){UP 2}{ENTER 2}{PGDN}{TAB 2}{ENTER}{PGUP}{DOWN 6}{TAB 3}{ }{ENTER}{TAB}{ENTER}", True
End Sub

Okrem toho SendKeys (je jedno či Shell alebo Application) trpí vo VBA NumLock bugom. To by sa muselo ešte ošetriť, aby neostal prepnutý NL. Žiadna iná metóda (ani cez Register) sa mi nepodarila rozbehať. Iba toto.

EDIT:
Jáj, a nenapísal som ešte Imh0tep-ovi: Ako príklad, ako si vynútiť zapnutie makier, Vám môže poslúžiť tento príklad, čo som sem dal pár dní naspäť.
Takže najskôr vynútiť zapnutie makier, makro skontroluje a zapne dôveru vo VBA, potom kontrola dátumu, zmazanie modulov, zobrazenie listov. Bum hotovo. Len kopec omáčky ešte, kontroly a tak. No prečítajte si, čo sme so Stalker-om písali v tom vlákne o (ne)zabezpečení Excelu.citovat
#057259
Stalker
Hm, kód sem vyzkoušel a nic se nestane, pokud nepočítám, že se kurzor proběhne po listu. Ono by to byl docela zásadní fail, měnit nastavení centra zabezpečení z prostředí VBA. To už by se jednalo o vir. Takhle tupej M$ snad není, i když zabezpečení editoru VBA je na tristní úrovni.citovat

Strana:  1 2   další »

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje