Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Problém s makrem na odstranění češtiny v Excelové tabulce

Někde na webu jsem si našel makro, podle kterého by se měly v Excelové tabulce odstranit české znaky s diakritikou:

Sub Odcesti()
Dim Bunka As Range
Dim Oblast As Range
Dim PoleS()
Dim PoleBez()

Application.ScreenUpdating = False

PoleS = Array("Ä", "Á", "Č", "Ď", "É", "Ě", "Í", "Ĺ", _
"Ň", "Ö", "Ó", "Ř", "Š", "Ť", "Ü", "Ú", "Ů", "Ý", "Ž", _
"ä", "á", "č", "ď", "é", "ě", "í", "ĺ", "ň", "ö", "ó", _
"ř", "š", "ť", "ü", "ú", "ů", "ý", "ž")
PoleBez = Array("A", "A", "C", "D", "E", "E", "I", "L", _
"N", "O", "O", "R", "S", "T", "U", "U", "U", "Y", "Z", _
"a", "a", "c", "d", "e", "e", "i", "l", "n", "o", "o", _
"r", "s", "t", "u", "u", "u", "y", "z")

For Each Bunka In ActiveSheet.UsedRange
If (Not Bunka.HasFormula) And (Not HasValidation(Bunka)) Then
If Oblast Is Nothing Then Set Oblast = Bunka
Set Oblast = Union(Oblast, Bunka)
End If
Next Bunka

For i = 0 To 37
Oblast.Replace What:=PoleS(i), Replacement:=PoleBez(i), _
LookAt:=xlPart, SearchOrder:=xlByColumns, MatchCase:=True
Next i

Application.ScreenUpdating = False

End Sub

Když ho ale spustím, označí se mi výraz "HasValidation" a nahlásí mi to chybu: "Compile error: Sub or Function not defined."

Nevíte, jak to napravit, aby makro fungovalo? VBA je pro mě vískou nedaleko Toleda.

Předmět Autor Datum
Starsi verze Excelu nepodporuji vlastnost HasValidation(Bunka), takze kdyz nemas na listu overovani…
navstevnik 21.12.2008 09:18
navstevnik
Návštěvníku díky, už podruhé jsi mi vytrhl trn z paty (ohledně mých znalostí VBA se konkrétně jednal…
Paullus 21.12.2008 11:26
Paullus
Samotným závěrem alespoň pro mne zajímavý poznatek. Toho makra na odčeštění excelové tabulky jsem s… poslední
Paullus 21.12.2008 13:02
Paullus

Starsi verze Excelu nepodporuji vlastnost HasValidation(Bunka), takze kdyz nemas na listu overovani vkladane hodnoty, pak muzes cast podminky And (Not HasValidation(Bunka)) klidne vypustit. Upravene makro (original je z: excel_vanocni.html) pro ty, co nepochazi z vesnicky nedaleko Toleda (, muzes priradit klavesovou zkratku):

Option Explicit

Sub Odcesti()
Dim Bunka As Range
Dim Oblast As Range
Dim PoleS()
Dim PoleBez()
Dim i As Byte
Application.ScreenUpdating = False

PoleS = Array("Ä", "Á", "È", "Ï", "É", "Ì", "Í", "Å", _
"Ò", "Ö", "Ó", "Ø", "Š", "", "Ü", "Ú", "Ù", "Ý", "Ž", _
"ä", "á", "è", "ï", "é", "ì", "í", "å", "ò", "ö", "ó", _
"ø", "š", "", "ü", "ú", "ù", "ý", "ž")
PoleBez = Array("A", "A", "C", "D", "E", "E", "I", "L", _
"N", "O", "O", "R", "S", "T", "U", "U", "U", "Y", "Z", _
"a", "a", "c", "d", "e", "e", "i", "l", "n", "o", "o", _
"r", "s", "t", "u", "u", "u", "y", "z")

For Each Bunka In ActiveSheet.UsedRange
If (Not Bunka.HasFormula) Then '(And (Not HasValidation(Bunka))
If Oblast Is Nothing Then Set Oblast = Bunka
Set Oblast = Union(Oblast, Bunka)
End If
Next Bunka

For i = 0 To 37
Oblast.Replace What:=PoleS(i), Replacement:=PoleBez(i), _
LookAt:=xlPart, SearchOrder:=xlByColumns, MatchCase:=True
Next i

Application.ScreenUpdating = True' v originalu je chybne False

End Sub

P.S.: Bohuzel ve vlozenem kodu dochazi v retezci PoleS k nahrade velkeho a maleho 'r' a 't' s hackem (Ř,ř, Ť,ť) k nahrade nejakym paskvilem, proto si to v editoru VBA oprav (mozna po vlozeni makra do editoru VBA to bude v poradku).

Samotným závěrem alespoň pro mne zajímavý poznatek.

Toho makra na odčeštění excelové tabulky jsem se domáhal proto, že jsem ji nemohl převést do databáze MySQL a to ani když jsem ji zkonvertoval do *.mdb. Převod byl odmítnut jak v programu Navicat tak i standardně přes ODBC.

Na webu jsem se dočetl, že na vině jsou problémy se znakovou sadou. Tak jsem s neocenitelnou pomocí kolegy Návštěvníka transformoval tabulku do "cestiny", avšak ani toto nepomohlo a do MySQL jsem ji nepřevedl.

Nakonec jsem zjistil, že na vině nebyla písmena s diakritikou, nýbrž m2 (symbol čtverečních metrů s dvojkou v horním indexu) a dále dlouhá pomlčka namísto krátké. Když jsem tyto znaky nahradil, tabulka jak v Excelu, tak i v Accessu se převedla do MySQL bez jediné chyby.

Zpět do poradny Odpovědět na původní otázku Nahoru