locked
VBA nesprávné zobrazení češtiny RRS feed

  • Dotaz

  • Dobrý den,

    čeština sama o sobě mně v Off2010 funguje v pořádku. Pokud však spustím makro v Excelu a tímto makrem vkládám do Excelu české znaky jako text, tak se nezobrazují správně. Je nějaké řešení na opravu? Ještě pro úplnost...Off2010 běží na Win 8.1.  Děkuji.

    čtvrtek 7. srpna 2014 12:31

Odpovědi

Všechny reakce

  • VBA neni unicodove. Jak mas nastavenou system locale for non-unicode programs?

    MP

    čtvrtek 7. srpna 2014 13:45
    Moderátor
  • Hm... tak s tím potřebuji trochu víc nakopnout. Kam se podívat? Kde to nastavit? Díky
    čtvrtek 7. srpna 2014 18:23
  • Spust intl.cpl, zalozka Administrative, tlacitko Change System Locale

    MP

    čtvrtek 7. srpna 2014 18:48
    Moderátor
  • Mám češtinu a stále to nezobrazuje správně. 
    čtvrtek 7. srpna 2014 18:52
  • Vloz kousek kodu nebo nekam vystav vzorovy soubor

    Toto:

    Sub test()
       ActiveCell.Value = "ěščřžýáíé"
    End Sub

    ti vlozi spravne znaky?

    MP


    čtvrtek 7. srpna 2014 19:06
    Moderátor
  • Super, toto funguje. Ale nejde to udělat nějak systémově? Ty znaky se samozřejmě zapisují do právě aktivní buňky, což si musí hlídat uživatel... navíc se ten řádek musí vložit do každého spouštěného skriptu.
    čtvrtek 7. srpna 2014 19:15
  • Vloz SEM kousek SVEHO kodu nebo nekam vystav vzorovy soubor

    MP

    čtvrtek 7. srpna 2014 19:24
    Moderátor
  • OK..jen ještě. Ono to vypadá, že se tím "test" jakoby VBA češtinu naučil a teď mi jde čeština všude až na jednu funkci, kterou jsem tvořil...Převod čísla na text. Jen si už nevzpomínám, jak tuto funkci otevřít, aby se dala upravit. Poradíš? Razím teorii, vytvoř a zapomeň.:-) Asi to budu muset přehodnotit.

    čtvrtek 7. srpna 2014 19:33
  • to je fakt nějaká anomálie... v jednom souboru jde čeština v té fnci v pořádku a v dalším souboru ta stejná fce hází češtinu špatně. 
    čtvrtek 7. srpna 2014 19:38
  • Sub odberatele()
    '
    ' odberatel Makro
    '
    
    '
            
         Sheets("seznam odberatelu").Select
         'hledá poslední buňku v seznamu odběratelů
         
          i = 5
          While Not IsEmpty(Cells(i, 2))
               i = i + 1
          Wend
          
          If IsEmpty(Cells(5, 2)) Then
          Cells(i, 2) = 1
          Else: Cells(i, 2) = Cells(i - 1, 2) + 1
          End If
          
         'zápis do databáze
           Cells(i, 3) = Worksheets("zadani").Range("D8").Value
           Cells(i, 4) = Worksheets("zadani").Range("D9").Value
           Cells(i, 5) = Worksheets("zadani").Range("D10").Value
           Cells(i, 6) = Worksheets("zadani").Range("D11").Value
           Cells(i, 7) = Worksheets("zadani").Range("D12").Value
           Cells(i, 8) = Worksheets("zadani").Range("D13").Value
           
        Sheets("zadani").Select
        MsgBox ("Uloženo.")
          
    End Sub
    Jestli toto bude stačit?
    čtvrtek 7. srpna 2014 19:45
  • Už jsem se dostal k té úpravě fce. Takhle vypadá:

    Function Slovy(Cis As Double) As String
    Dim StrCis As String
    Dim LenCis As Byte, Rad As Integer, Ofs As Byte
    Dim Pol As Byte, pom As String, pom1 As String, pom2 As String
    Dim Jedn As Variant, Des1 As Variant, Des As Variant, Sta As Variant
    Dim JednTM As Variant, Tis As Variant, Mil As Variant
    '
    
    If IsEmpty(Cis) Then End
    '
    Jedn = Array("", "jedna", "dvě", "tři", "čtyři", _
    "pět", "šest", "sedm", "osm", "devět")
    Des1 = Array("deset", "jedenáct", "dvanáct", "třináct", "čtrnáct", _
    "patnáct", "šestnáct", "sedmnáct", "osmnáct", "devatenáct")
    Des = Array("", "", "dvacet", "třicet", "čtyřicet", "padesát", _
    "šedesát", "sedmdesát", "osmdesát", "devadesát")
    Sta = Array("", "jednosto", "dvěsta", "třista", "čtyřista", _
    "pětset", "šestset", "sedmset", "osmset", "devětset")
    Tis = Array("tisíc", "tisíc", "tisíce", "tisíce", "tisíce", _
    "tisíc", "tisíc", "tisíc", "tisíc", "tisíc")
    JednTM = Array("", "jeden", "dva", "tři", "čtyři", _
    "pět", "šest", "sedm", "osm", "devět")
    Mil = Array("milionů", "milion", "miliony", "miliony", "miliony", _
    "milionů", "milionů", "milionů", "milionů", "milionů")
    '
    '
    StrCis = CStr(format(Cis, "0.00"))
    Pol = InStr(StrCis, ",") - 1 ' poloha radu jednotek v cisle
    If Pol > 9 Then Slovy = ">999 999 999": Exit Sub
    Rad = 0 ' rad cislice v cisle
    Slovy = ""
    Do
    pom = Mid(StrCis, Pol, 1)
    If Pol > 1 Then
    pom1 = Mid(StrCis, Pol - 1, 1)
    Else
    pom1 = "0"
    End If
    '
    Select Case Rad
    Case 0
    pom2 = IIf(pom1 <> 1, Jedn(pom), Des1(pom)): Ofs = IIf(pom1 <> 1, 1, 2)
    Case 1
    pom2 = Des(pom): Ofs = 1
    Case 2
    pom2 = Sta(pom): Ofs = 1
    Case 3
    pom2 = IIf(pom1 <> 1, JednTM(pom), Des1(pom)): Ofs = IIf(pom1 <> 1, 1, 2)
    If Pol > 3 Then ' kdyz zustavaji jeste >3 cislice
    If Mid(StrCis, Pol - 2, 3) <> "000" Then
    pom2 = pom2 & IIf(pom1 <> 1, Tis(pom), " tisíc ") ' a jsou i tisice -> vlozeni slova tisic
    Else
    Ofs = 3 ' preskoci na rad 6 - miliony
    End If
    Else ' kdyz zustava jeste <3 cislice -> vlozeni slova tisic
    pom2 = pom2 & IIf(pom1 <> 1, Tis(pom), " tisíc ")
    End If
    Case 4
    pom2 = Des(pom): Ofs = 1
    Case 5
    pom2 = Sta(pom): Ofs = 1
    Case 6
    pom2 = IIf(pom1 <> 1, JednTM(pom) & Mil(pom), Des1(pom) & " milionu` "): Ofs = IIf(pom1 <> 1, 1, 2)
    Case 7
    pom2 = Des(pom): Ofs = 1
    Case 8
    pom2 = Sta(pom): Ofs = 1
    End Select
    '
    Slovy = pom2 & Slovy
    Pol = Pol - Ofs: Rad = Rad + Ofs
    '
    Loop While Pol > 0
    Slovy = Trim(Slovy) ' & " " & Right(StrCis, 2) ' pridani destinne casti
    End Sub

    Napadá tě něco?  Díky

    čtvrtek 7. srpna 2014 20:51
  • Pár poznámek:

    Editor VBA nepracuje v Unicode, tj. čeština v něm používá ANSI kódování lišící se v tom či onom prostředí (miluju kopírování kódu do Skype).
    Nevidím důvod, proč by správně zobrazená čeština ve VBA neměla být správně přenesena do českého Excelu/Windows.

    Jazyk VBA pracuje s Unicode, jeho proměnná String je BSTR (Visual Basic String, dva byty Unicode).
    List Excelu pracuje s Unicode.

    P. S. Najde se konečně někdo, kdo z fóra vyhodí na smeťák ty debilní editory pro příspěvky? Kašlu na IE. Furt jsou česká fóra v područí počeštěných paskvilů a nikdo s tím nic nenadělá?

    sobota 13. září 2014 15:45
  • Napiste Karlovi Florianovi (KFL) z mistniho Microsoftu a uvedte sve navrhy na zlepseni. Nevim do jake miry muze KFL ovlivnit technologii fora, minimalne muze eskalovat problem vyse.

    Moderatori tyto moznosti nemaji.

    Emoce snizuji rozumovy potencial...

    M

    PS: jmeno tecka prijmeni at microsoft tecka com

    sobota 13. září 2014 17:41
    Moderátor