Nejste přihlášen/a.
Napsal jsem si pro Word (XP) makro které by mělo najít řetězec Morph.
Můj dotaz je: je to normální, že při spouštění Makra se otevře dialogové okno pro hledání? Jde mi o to, že jsem chtěl najít a vybrat řetězec, aniž by se otevíralo dialogové okno (což vždy trvá déle než když by se neotevřelo). I když jde asi o 100ms, při součtu toto způsobuje nežádoucí prodlevy a tak pochopitelně nechci otevírat okno. Co s tím?
Sub find_Morph()
Selection.Find.ClearFormatting
With Selection.Find
.Text = "Morph"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
End Sub
doplněno 21.08.17 10:50:
Ruším dotaz. otevření okna bylo způsobené něčím úplně jiným co s makrem nesouviselo
0x
já bych jen doplnil, že vaše makro je plné balastu a možná právě proto vám způsobuje delší prodlevy. Zkuste promáznout všechny řádky, které končí False.
Vlastnosti výběru jako Format nebo Matchcase jsou přednastavené na hodnotu False a vy je svým makrem přepisujete na hodnotu False. Výsledný efekt takového příkazu není nic víc, než ztráta času.
doplněno 21.08.17 16:11:
ale jistě. Průměrný programátor ví, že VBA je interpretr. To znamená, že příkazový řádek přečte, přeloží a provede, pak přejde na další řádek, který přečte, přeloží a provede atd. Příkazy neprovádí hromadně, ale postupně po jednom, pro všechny nalezené případy. Dále průměrný programátor ví, že příkaz provedený makrem VBA je asi 100x pomalejší, než příkaz zapsaný v binárním kódu systému. A jsou dokonce i takoví průměrní programátoři, kteří ví, že jestliže se takový 100x pomalejší příkaz volá stokrát zasebou, pak nastává desetisícinásobné zpoždění proti systémovému příkazu a z milisekund můžou být desetiny vteřin, i celé vteřiny.
A pokud onen programátor není jen průměrný, pak obvykle zdrojovému kódu dobře rozumí a hned ze začátku se zbaví balastu a nechává po sobě čisto a uklizeno.
Ještě nějaký dotaz? ![]()
Průměrný programátor ví, že řádky, které tam jsou navíc jsou v řádu jednotek milisekund (neměřitelné) a nemohou výrazně snížit rychlost programu. Jak jsem už napsal, bylo to způsobeno něčím úplně jiným co způsobovalo vyskočení okna a s VB to neuviselo.
doplněno 21.08.17 17:22:
100 cyklů a ani necekne. Nemám potřebu to dál řešit.
Neneseme odpovědnost za správnost informací a za škodu vzniklou jejich využitím. Jednotlivé odpovědi vyjadřují názory jejich autorů a nemusí se shodovat s názorem provozovatele poradny Poradte.cz.
Používáním poradny vyjadřujete souhlas s personifikovanou reklamou, která pomáhá financovat tento server, děkujeme.