Online 207 uživatelů Přihlášení | Registrace | Zaslat heslo | Prohlížení bez přihlášení

 

1 / 40
LEGGY   16:53:28 10.08.2022
SPETLIK [ 15:43:46 10.08.2022 ]: Už to mám :10)  Díky za to nakopnutí se dvěma uvozovkama. Dále jsem už pochopil, proč mi ve VBA editoru nešlo použít _ pro pokračování na dalším řádku. Neuvědomil jsem si, že nepokračuju v příkazu, ale v proměnné, tam se to dělá trochu jinak.
Už dokážu ten šílený vzorec zapsat do jediné proměnné a takto zadanou proměnnou mi už jde použít jako formulalocal. Zbytek generování bude hračka. Ještě jednou dík.


Sub Macro1()
  Msgbox "Four score and seven years ago our fathers " _
        & "brought forth on this continent, a new nation, " _
        & "conceived in Liberty, and dedicated to the proposition " _
        & "that all men are created equal."
End Sub

Sub Macro2()
Dim oRng As Range
  Set oRng = ActiveDocument.SelectContentControlsByTitle("RichText Container") _
          .Item(1).Range.Paragraphs(3).Range
End Sub
LEGGY   15:46:33 10.08.2022
SPETLIK [ 15:43:46 10.08.2022 ]: Si to právě potřebuju šoupnout do VBA editoru.Když tam budu mít něco jakoch tam měl něco jako proměnná= "vzorec s jedněma uvozovkama", tak to bude blbě.
LEGGY   15:43:55 10.08.2022
Proto jsem do toho původně začal montovat ch(34), abych viděl, které uvozovky jsou součástí vzorce. Bohužel tím se to stalo velmi nepřehledné.
SPETLIK   15:43:46 10.08.2022
LEGGY [ 15:41:09 10.08.2022 ]: Chápu. To je v pohodě. Jen, pokud ho máš ve zdrojové buňce jako vzorec, tak tam ty uvozovky nezdvojuj a jen jej šoupni jinam, případně udělej replace odkazů, nebo co potřebuješ. Ty uvozovky tam jsou správně.
LEGGY   15:41:09 10.08.2022
SPETLIK [ 15:27:07 10.08.2022 ]: Na tomhle jenom testuju, jestli po změně ten vzorec jde zase použít. Já ho budu muset uložit do několika proměnných, abych ho pak zase mohl v případě potřeby skládat dohromady, protože zapsaný bude jenom v tom makru a nikde jinde. Nemůžu za to, že moje potřeby jsou větší než možnosti VBA editoru :2)
SPETLIK   15:36:10 10.08.2022
LEGGY [ 15:18:14 10.08.2022 ]: Ještě pro jistotu. Zdvojení uvozovek se dělá při zápisu ve VBA, aby šlo do stringu zapsat uvozovky:
Franta řekl: "Tak to je."
Tohle bys jinak než zdvojením do string proměnné ve VBA nezapsal. Ale pokud to již v proměnné máš, Přečetl jsi si to z buňky, tak již nezdvojuj.
SPETLIK   15:27:07 10.08.2022
LEGGY [ 14:51:31 10.08.2022 ]: To tak studuji...
Nahradíš ve vzorci jednu uvozovku za dvě.
Potom do dalšího čtyři uvozovky za dvě
A potom se snažíš oba dostat do další buňky.
Ale pokud ten vzorec přečteš z buňky, tak jej do jiné můžeš vrátit tak jak je bez úprav ú)vozovek. On to má v sobě dobře. Alespoň mám takovou zkušenost s vlasností "Formula". Zdvojit úvozovky musíš, pokud zadáváš vzorec jako string do proměnné v zápisu VBA.
Chápu to dobře?
LEGGY   15:18:14 10.08.2022
SPETLIK [ 15:13:13 10.08.2022 ]: u tvého vzorce mám formula, u svých jedu raději ve formulalocal, ale je to v podstatě jedno v jakém tvaru to načtu do proměnné vzorec5

První replace mi zamění 1 uvozovky na 2. Na konci mi tedy vzniknou 4 uvozovky, proto jsem dělal 2. replace, abych to stáhnul ze čtyř uvozovek na dvě.
Teď jsem zjistil, že to je blbá úvaha, že tento způsob zadávání vyžaduje ty čtyři uvozovky na konci, ale nejde mi zapsat ani vzorec3 po prvním replace.
SPETLIK   15:16:03 10.08.2022
LEGGY [ 14:51:31 10.08.2022 ]: Já FormulaLocal radši nikde nepoužívám...
SPETLIK   15:13:13 10.08.2022
LEGGY [ 14:51:31 10.08.2022 ]: Počkej, proč tam dáváš FormulaLocal? Očekává to potom vzorec lokalizovaný do aktuálního jazyka. Tedy, pokud je Excel česky, musí tam být Když a ne IF.
LEGGY   14:51:31 10.08.2022
zkouším to takhle, ale prostě do M3 mi zápis končí chybou. Podle debugu ten výsledný vzorec4 vypadá v pořádku
Kruci, citím, že v tom bude nějaká kravina

vzorec5 = ActiveSheet.Range("M2").FormulaLocal

    vzorec3 = Replace(vzorec5, Chr(34), Chr(34) & Chr(34))
    vzorec4 = Replace(vzorec3, Chr(34) & Chr(34) & Chr(34) & Chr(34), Chr(34) & Chr(34))
   
 
    .ActiveSheet.Range("M4").Formula = "=IF(C5=""Kuk"",""Je tam"",""Není tam"")"
    .ActiveSheet.Range("M5").FormulaLocal = vzorec5
    .ActiveSheet.Range("M3").FormulaLocal = vzorec4

SPETLIK [ 13:44:38 10.08.2022 ]: podtržítko tam nemám. Problémem tam jsou ty uvozovky, protože součástí vzorce je hledání řetězců v buňce), takže hledané řetězce jsou v uvozovkách
SPETLIK   13:45:56 10.08.2022
LEGGY [ 13:17:30 10.08.2022 ]: Jsem si uvědomil, že i to zalomení řádku _ se dá použít jen v omezeném počtu. Taky jsem na to již narazil.
SPETLIK   13:44:38 10.08.2022
LEGGY [ 13:17:30 10.08.2022 ]: Aha 1500 znaků. A tomu se dá ještě říkat vzorec? Nepokoušíš se vložit_ uvnitř stringu toho vzorce?
SPETLIK   13:41:49 10.08.2022
LEGGY [ 13:17:30 10.08.2022 ]:  Celá procedura mi projde:
Sub aa()

Range("C5").Value = "a""a"
Range("E5").Formula = "=IF(C5=""a""""a"",""Je tam"",""není tam"")"
Range("E6").Value = "'" & Range("E5").Formula
Range("E7").Formula = Replace(Range("E6").Value, "'", "")

End Sub
SPETLIK   13:39:16 10.08.2022
LEGGY [ 13:17:30 10.08.2022 ]: Ano. Vykopíroval jsem to z immediate, kde jsem to spouštěl po jednom řádku.
LEGGY   13:17:30 10.08.2022
SPETLIK [ 12:52:10 10.08.2022 ]: Je to vzorec, který má zhruba 1500 znaků. Protože se mi nevejde do editoru VBA a nějak mi nefunguje _ pro pokračování textu na dalším řádku, mám to rozházené po několika proměnných, které vždy sloučím dohromady. No a prostě jsem byl z minulosti zvyklý v proměnných dělat s chr(34).

Ten tvůj příklad se dvěma uvozovkama mi končí jako runtime error 1004. Tobě to funguje?
SPETLIK   13:09:06 10.08.2022
LEGGY [ 16:31:42 09.08.2022 ]: Ještě jsem pro jistotu otestoval tuto sadu a myslím, že to jde:

Range("C5").Value = "a""a"
Range("E5").Formula = "=IF(C5=""a""""a"",""Je tam"",""není tam"")"
Range("E6").value = "'" & Range("E5").Formula
Range("E7").Formula = replace(Range("E6").value,"'","")

SPETLIK   12:52:10 10.08.2022
LEGGY [ 16:31:42 09.08.2022 ]: Nerozumím, proč to nahrazuješ & Chr(34) &. Vždyť stačí ty uvozovky zdvojit: ActiveCell.Formula = "=IF(C5=""Kuk"",""Je tam"",""Není tam"")"
LEGGY   16:31:42 09.08.2022
Neřešil jste někdo někdy generování vzorce buňky pomocí makra?

V makru mám jako textovou proměnnou připravený 9x vnořený IF s podvzorci typu A(), NEBO() a hledání textů v uvozovkách, který pak přidávám do buňky. Ve vzorci v makru musím všechny uvozovky nahradit  pomocí "& Chr(34) &", takže výsledná proměnná vypadá úplně příšerně.

Problém je, že už se začínám ztrácet v závorkách a & Chr(34) &, takže každá další aktualizace je tak trochu boj. Důvod, proč to dělám takhle je, že otevřu nový workbook, připojím si k němu knihovnu *.bas a pomocí maker za pár minut z unloadů z databáze (stovky tisíc položek ve třech listech) vygeneruju podklady, které potřebuju. Proto musím finální vzorec mít ve formě, se kterou VBA dokáže pracovat.

Teď mě napadlo, že by se to dalo udělat tak, že napíšu vzorec do buňky, VBA si ho přečte a nahradí uvozovky řetězcem & Chr(34) & a nakonec do TXT souboru hodí výsledek. Nedělal jste už někdo něco podobného?
RUBINUS   14:33:40 05.05.2022
PŘÍSPĚVEK Přes xlsx se nepovedlo, protože odbouralo i nějaké vzorce. Ale při přenosu na flashdisk a zkopírování na jiný stroj, protože mi kleknul notebook, to nějak zmizelo.
1 / 40