chyba VBA ??

Programy pro práci v kanceláři (Word, Excel, Access…=>Office)

Moderátor: Mods_senior

Uživatelský avatar
atari
Level 6
Level 6
Příspěvky: 3345
Registrován: říjen 08
Pohlaví: Muž
Stav:
Offline

chyba VBA ??

Příspěvekod atari » 30 říj 2008 20:25

Nechápu co se děje: Ve sloupci B (obecný formát) mám různé hodnoty. Makrem změním tečky na čárky (abych z toho dostal číslo):
Sheets("pomocny").Range("B:B").Replace What:=".", Replacement:=","
Ale vyleze mi z toho paskvil. Čísla která začínají nulou se převedeou, ale čísla která začínají vyšší hodnotou se nepřevedou, ale tečka zmizí, místo toho aby tam byla čárka:
1.350 se prevede na 1350
2.400 se prevede na 2400
0.987 se prevede na 0,987

Poradí někdo jak to vyřešit makrem, kde delám chybu? Když to udělám ručně v Excelu přes nabídku "Nahradit" tak to funguje.

Reklama
navstevnik
Level 4
Level 4
Příspěvky: 1142
Registrován: srpen 08
Pohlaví: Nespecifikováno
Stav:
Offline

Re: chyba VBA ??

Příspěvekod navstevnik » 30 říj 2008 22:37

V syntaxi VBA je oddelovac destinnych cisel ".", pri vlozeni hodnoty do bunky (dle nastaveni v Windows) VBA pouzije ","
pri nahrade "." za oddelovac "," je tento chapan jako oddelovac tisicu a neni zobrazen, proto "1.350" > 1350, snad jsem to popsal srozumitelne.
Pro konkretni pozadavek, text "1.350" na cislo 1,350 je nutno pouzit funkci Val (a prislusny format bunky - 3 des. mista):

Kód: Vybrat vše

Range("b1").Value = Val(Range("a1").Value)

Uživatelský avatar
X
Elite Level 12.5
Elite Level 12.5
Příspěvky: 19360
Registrován: květen 07
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: chyba VBA ??

Příspěvekod X » 30 říj 2008 22:52

Nesmíš mít zaškrtlé toto zatržítko (pak to snad bude fungovat):

Obrázek

Uživatelský avatar
atari
Level 6
Level 6
Příspěvky: 3345
Registrován: říjen 08
Pohlaví: Muž
Stav:
Offline

Re: chyba VBA ??

Příspěvekod atari » 30 říj 2008 23:21

to navstevnik: dik, to je presne to co potrebuji, tento kod:
Delám to v bunce formátu text, takže format v tomto okamžiku řešit nemusím.
Ale mám prosbu, lze ten kod nejak napsat pro celý sloupec, abych nemusel používat tento (viz níže) cyklus, který zpomaluje celý proces?

Kód: Vybrat vše

For i = 1 To 3000
Cells(i, 3).Value = Val(Cells(i, 3).Value)
Next i

navstevnik
Level 4
Level 4
Příspěvky: 1142
Registrován: srpen 08
Pohlaví: Nespecifikováno
Stav:
Offline

Re: chyba VBA ??

Příspěvekod navstevnik » 31 říj 2008 10:20

je nutno upravit kazdou bunku zvlast, zryclit lze potlacenim zobrazovani pri behu procedury:

Kód: Vybrat vše

...
Application.ScreenUpdating = False
For i = 1 To 3000
Cells(i, 3).Value = Val(Cells(i, 3).Value)
Next i
Application.ScreenUpdating = True
...

Uživatelský avatar
atari
Level 6
Level 6
Příspěvky: 3345
Registrován: říjen 08
Pohlaví: Muž
Stav:
Offline

Re: chyba VBA ??

Příspěvekod atari » 31 říj 2008 18:11

Pořád nad tím přemýšlím, a nechápu jednu věc. Buňku mám nastavenou na formát text, takže by to VBA neměl brát jako oddělovač tisíců, měl by to brát jako obyčejný text. Objevil jsem ještě jeden způsob zápisu (druhý v pořadí), který funguje jak má. Takže máme tří zápisy. První umí celý sloupec, ale nefugnuje korektně. Druhý a třetí fungují korektně, ale zase umí vždy jen jednu buňku.

1. Range("B:B").Replace What:=".", Replacement:="," (z 4.581 udelá 4581)
2. Cells(1, 3) = Replace(Cells(1, 3), ".", ",") (z 4.581 udělá 4,581)
3. Range("B2").Value = Val(Range("B3").Value) (z 4.581 udělá 4,581)

Takže příkaz Replace udělá pokáždé něco jiného, kdyby to uměl někdo vysvětlil, tak to uvítám.

.

navstevnik
Level 4
Level 4
Příspěvky: 1142
Registrován: srpen 08
Pohlaví: Nespecifikováno
Stav:
Offline

Re: chyba VBA ??

Příspěvekod navstevnik » 01 lis 2008 01:03

Format bunek - obecny
Metoda Replace - Range("B:B").Replace What:=".", Replacement:="," - i funkce Replace - Cells(1, 3) = Replace(Cells(1, 3), ".", ",") - vraceji retezec ("4,123"), ten je stejne jako vlozeni retezce - Range("d4").Value = "4,123" - interpretovan jako cislo 4123, avsak - Range("d5").Value = "4.123" - da cislo 4,123.
Neni rozdil mezi metodou a funkci ve vysledku, pouze metoda obslouzi blok bunek, funkce jednu bunku.

Funkce Val (Range("c4").Value = Val(Range("c4").Value)) prevede retezec "4.123" na cislo 4,123


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Chyba CPU na desce
    od petan320 » 24 bře 2025 15:29 » v Problémy s hardwarem
    16
    7654
    od petr22 Zobrazit poslední příspěvek
    02 dub 2025 21:50
  • Chyba hardware. Příloha(y)
    od Steage7717 » 10 lis 2024 16:29 » v Problémy s hardwarem
    4
    3266
    od Steage7717 Zobrazit poslední příspěvek
    12 lis 2024 18:49
  • Win11: Chyba 0x0000185
    od Speed_dead » 17 čer 2024 08:04 » v Windows 11, 10, 8...
    22
    9662
    od Speed_dead Zobrazit poslední příspěvek
    16 srp 2024 10:20
  • Sqlite - systémová chyba Příloha(y)
    od cindy the skull » 27 úno 2025 11:59 » v Vše ostatní (sw)
    6
    10174
    od atari Zobrazit poslední příspěvek
    16 bře 2025 11:11
  • Chyba příkazový řádek Příloha(y)
    od zik9 » 05 čer 2025 11:24 » v Windows 11, 10, 8...
    4
    1135
    od zik9 Zobrazit poslední příspěvek
    12 čer 2025 15:33

Zpět na “Kancelářské balíky”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 10 hostů