< návrat zpět
MS Excel
Téma: Ošetření TextBoxu
Zaslal/a Filipsv 27.10.2017 21:41
Ahoj,
potřeboval bych ošetřit TextBox, ze kterého načítám název souboru. Přes makro ukládám soubor a uživatel si zvolí název a vepíše jej do TextBoxu.
Původně jsem to měl udělané tak, že přes jednoduchou podmínku If jsem vyloučil mezery, tečky, speciální znaky atd. To sice fungovalo báječně, akorát uživatelé chtějí zadávat (bohužel) soubory s mezerama, tečkama a já nevím čím vším. Takže jsem to upravil a jenom přes Err podchytávám chybovou hlášku VisualBasicu ohldně speciálních znaků, délky názvu atd (kód tuším 1004). To je lepší pro uživatele, ale bohužel je nyní možné do TextBoxu vepsat i tečku a třeba příponu. Takže já potřebuju (mám nastaveno) ukládat jako *.xlsm ale uživatel může do TextBoxu zadat nazev.xls a už mi to uloží v úplně jiném formátu, než potřebuji.
Jak tedy ošetřit TextBox, aby bylo možné použít pravidla Windows (nesmí začínat mezerou, nesmí být speicální zanky atd...) ale zároveň nebylo možné zadat příponu?
elninoslov(28.10.2017 3:08)#038157 Napríklad:
Sub pokus()
Dim Subor As String, Bodka As Long
Subor = "Z:\Pokus súbor.xls"
Bodka = InStrRev(Subor, ".")
If Bodka > 0 Then
If LCase(Right$(Subor, Len(Subor) - Bodka)) <> "xlsm" Then Subor = Left$(Subor, Bodka) & "xlsm"
Else
Subor = Subor & ".xlsm"
End If
ThisWorkbook.SaveAs Filename:=Subor, FileFormat:=xlOpenXMLWorkbookMacroEnabled
End Subcitovat
xlnc(28.10.2017 18:07)#038158 Vynalézáte kolo.
A) Jasná pravidla hry a názvosloví
B) Application.GetSaveAsFilename a vlastní koncovka
citovat
Honza53(6.11.2017 17:15)#038275 Když chceš, aby uživatel neukládal pomocí standardního ukládacího formuláře Windows (jak ti radí xlnc), kašli na kontroly obsahu textboxu (já bych kontroloval jenom neprázdnost) a soubor ulož takto:
On Error Resume Next
... příkaz k uložení ...
If Err Then ... vynadej uživateli, vrať ho do textboxu ...
On Error GoTo 0
... pokračování ...
citovat
elninoslov(6.11.2017 19:17)#038277 If Err ...
A ako to rieši to, že mu to uloží bez makier ? Žiadnu chybu nedostane ak bude v názve na konci xlsx alebo xls. Len nebude súbor bez makier funkčný, keďže predpokladám, že xlsm je vyžadované práve kvôli nejakej makro-funkcionalite.
To čo píše xlnc som ešte neskúšal.
citovat
Filipsv(7.11.2017 11:02)#038288 Ten problém bude trochu obsáhlejší. Chyba je trochu komplikovanější, zůstává mi, pokud se soubor neuloží, viset Excel v procesech. Momentálně to řeším takto, ale je to asi celé úplně špatně.ˇPro ukládání používám metodu SaveAs.
Kód je osekán o různé kopírování buněk atd, to není pro uložení podstatné.
Dim xlApp As Excel.Application
Sub makro1()
'Ošetření chyb
On Error GoTo ErrH:
'Ověření, jestli existuje složka, do které se má soubor uložit
If Len(Dir(UserFormExpBom.TextBoxUmisteni.Value, vbDirectory)) = 0 Then
MsgBox "Zvolená složka pro uložení kusovníku neexistuje"
Exit Sub
End If
'Nastavení nové aplikace Excel
Set xlApp = New Excel.Application
'----následuje kód pro kopírování
'Uložení excel souboru
xlApp.ActiveWorkbook.SaveAs UserFormExpBom.TextBoxUmisteni.Value & "\" & UserFormExpBom.TextBoxNazevSouboru.Value, 52
ErrH:
If Err.Number = 1004 Then
xlApp.Quit
Set xlApp = Nothing
MsgBox "Chybně zadaný název souboru nebo složky. Název nesmí začínat mezerou a obsahovat znaky < > ? [ ] : / *"
Exit Sub
End If
End Sub
citovat
Filipsv(8.11.2017 8:54)#038306 Vyřešeno.
Stačilo doplnit ".xlsm"
xlApp.ActiveWorkbook.SaveAs UserFormExpBom.TextBoxUmisteni.Value & "\" & UserFormExpBom.TextBoxNazevSouboru.Value & ".xlsm", 52citovat