EXCEL VBA: Uložení listu bez kódu makra

Programy pro práci s textem, tabulkami, prezentacemi

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Mistr81 6. 5. 2022 16:52

Dobrý den,

mám v Excelu list s tlačítky (CommandButton) a k nim navázanými makry. Tlačítka z listu odstraním pomocí kódu
Kód: Vybrat vše
ActiveSheet.DrawingObjects.Delete


Pak bych potřeboval tento list uložit. Dělám to pomocí
Kód: Vybrat vše
ActiveWorkbook.SaveAs Filename:=NazevSouboruExport, FileFormat:=51


Jenže i přes vymazání tlačítek (viz výše) k nim navázaný kód zůstává. Jak se ho zbavit? Lze například nějak vynutit, že list bude uložen v bezmakrovém formátu xlOpenXMLWorkbook? Nebo vás napadá nějaké jiné řešení?

Předem děkuji za rady.
Nechval dne před večerem...
Mistr81
Junior
Uživatelský avatar

Odeslat příspěvekod StalkerX 7. 5. 2022 15:27

Pokud soubor uložíš jako *.xlsx
težko v něm zůstane nějaký kód. Nesmíš se dívat do souboru, ze kterého si spouštěl makro, ale otevři si nově uložený soubor bude bez tlačítek a kódu.
StalkerX
Junior

Odeslat příspěvekod Mistr81 7. 5. 2022 16:13

StalkerX píše:Pokud soubor uložíš jako *.xlsx
težko v něm zůstane nějaký kód.

To, co uvádíš, zní logicky, jenže pokud soubor ukládáš do formátu XLSX, objeví se hláška informující, že v ukládaném souboru jsou makra a ať si buď vybere formát s makry a nebo to bude uloženo bez maker.
Obrázek

Jak se ale této hlášky zbavit, tedy jak ji obejít, resp. jak vnutit Excelu, že o problému vím a chci to skutečně uložit ve formátu XLSX. Mnou použitý postup (viz níže) k cíli nevedl. Nebo jsem někde dělal chybu?
Kód: Vybrat vše
ActiveWorkbook.SaveAs Filename:=NazevSouboruExport, FileFormat:=51
Nechval dne před večerem...
Mistr81
Junior
Uživatelský avatar

Odeslat příspěvekod StalkerX 7. 5. 2022 16:43

Musíš v kódu potlačit varovná hlášení.
Pozor ale na to, že pokud bys ukládal soubor pod stejným názvem, nebude zobrazeno hlášení, že soubor již existuje a automaticky dojde k jeho přepsání!
Kód: Vybrat vše
Sub UlozJako()

Application.DisplayAlerts = False

    ActiveSheet.DrawingObjects.Delete
    ActiveWorkbook.SaveAs Filename:=NazevSouboruExport, FileFormat:=51

Application.DisplayAlerts = True

End Sub
StalkerX
Junior

Odeslat příspěvekod Mistr81 7. 5. 2022 17:01

StalkerX píše:Musíš v kódu potlačit varovná hlášení.

Máš pravdu, to jsem přehlédl a do kódu neuvedl. Děkuji.

StalkerX píše:pokud bys ukládal soubor pod stejným názvem, nebude zobrazeno hlášení, že soubor již existuje a automaticky dojde k jeho přepsání!

Název exportovaného souboru vybírám pomocí
Kód: Vybrat vše
Application.FileDialog(msoFileDialogSaveAs)

Ten problematiku přepsání souboru, o které píšeš, ošetří. Lze v něm ale nějak omezit výběr formátů souborů, do kterých uživateli nabídnu uložení souboru? Třeba, že bych mu nabídl pouze XLSX, ale již ne XLSM apod.?

Předem děkuji za radu.
Nechval dne před večerem...
Mistr81
Junior
Uživatelský avatar

Odeslat příspěvekod StalkerX 7. 5. 2022 17:45

U FileDialog(msoFileDialogSaveAs) můžeš přednastavit typ souboru přes FilterIndex Např. pro *xlsx je to FilerIndex=1
Uživatel si ho však může libovolně změnit výběrem ze seznamu.

Můžeš udělat to, že mu koncovku vnutíš v kódu (NazevSouboruExport & ".*xlsx")
Pokud by si tedy vybral uložit soubor s názvem Export a typ .txt, soubor se uloží jako
Export.txt.xlsx
Což je celkem prasečina.

Nejlepším řešením je použít metodu GetSaveAsFilename()
kde si můžeš zvolit jednotlivé typy souborů viz
https://software-solutions-online.com/e ... ame/#Jump2
(Example 2)
StalkerX
Junior

Odeslat příspěvekod Mistr81 7. 5. 2022 18:03

StalkerX píše:Což je celkem prasečina.

To souhlasím.

StalkerX píše:Nejlepším řešením je použít metodu GetSaveAsFilename()
kde si můžeš zvolit jednotlivé typy souborů

Děkuji. Zkusím to. Pokud bych zas u něčeho tápal, ještě bych se na Tebe obrátil.

Každopádně děkuji za rady a pomoc. :tleskani
Nechval dne před večerem...
Mistr81
Junior
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků