< návrat zpět

MS Excel


Téma: VB v Excel Standard a Excel profesional rss

Zaslal/a 1.4.2015 13:16

Mám problém ve zpracování jedné instrukce Visual Basic, která funguje v EXCEL 2003, 2007 a 2010-profesional. V EXCEL 2010-Standard se VB na této instrukci zastaví s hlášením "Run time error '5': invalid procedure call or argument".
Instrukce vytváří jednoduchý podmíněný formát, kdy podle výrazu "km" v jedné buňce v řádku se jiná buňka stejného zvýrazní tučně a čeveně. Tato instrukce má tvar

Selection.FormatConditions.Add Type:=xlExpression, Formula1:= "=ZPRAVA(r2;2)=""km"""

a je součásti jednouché programové sekvence

Range("q2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=ZPRAVA(r2;2)=""km"""

With Selection.FormatConditions(1).Font
.Bold = True
.Italic = False
.ColorIndex = 3
End With

Pro EXCEL 2010 Standard jsem zkusil tento podmíněný formát přeskočit vložením instrukce

On Error GoTo EXCEL2010Standard

Takže uvedená sekvence měla tvar

Range("q2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.FormatConditions.Delete
On Error GoTo EXCEL2010Standard
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=ZPRAVA(r2;2)=""km"""

With Selection.FormatConditions(1).Font
.Bold = True
.Italic = False
.ColorIndex = 3
End With
EXCEL2010Standard:

Toto přeskočení se neuplatní u EXCEL 2003, 2007 ani u EXCEL 2010 profesional a podmíněný formát se provede. Pokud u těchto třech Excelů umyslně udělám ve vzorci chybu, např. místo ZPRAVA napíšu v instrukci ZxxRAVA, je podmíněný formát spolehlivě přeskočen.

Pokud stejnou sekvencí obsahující On Error GoTo spustím pod EXCEL 2010 Standard, tak 1x sekvence projde bez hlášení s přeskočením podmíněného formátu a pak různě (4x, 6x atd) skončí chybovým hlášením na té kritické instrukci.

Napadne někoho, jaké řešení by měl tento problém pro EXCEL 2010 Standard? Potřebuji, aby Makro, které obsahuje tuto frekvenci, fungovalo u všech verzí EXCEL stejně, nebo by stačilo napsat ten přeskok tak, že by se v EXCEL Standard ta instrukce spolehlivě vynechávala přeskočením celé uvedené sekvence.

Dík za případné náměty. Nevím, proč by měl být EXCEL 2010 Standard ošizen právě ve zpraování instrukcí pro podmíněný formát.

Zaslat odpověď >

Strana:  1 2   další »
icon #024333
eLCHa
Nemám excel 2010, ale stejně si tipnu

Podle mne je to ztraceno v překladu (ve verzi 2010 nějaký aktivní lokalizátor přeložil RIGHT jako VPRAVO místo obvyklého ZPRAVA - možná později opraveno nějakou aktualizací - nevím)

Zkuste následující úpravu - jestli pomůže With Range(Range("q2"), Range("q2").End(xlDown))
.FormatConditions.Delete
On Error Resume Next
.FormatConditions.Add Type:=xlExpression, Formula1:="=ZPRAVA(r2;2)=""km"""
If Not Err.Number = 0 Then
.FormatConditions.Add Type:=xlExpression, Formula1:="=VPRAVO(r2;2)=""km"""
End If
On Error GoTo 0
With .FormatConditions(1).Font
.Bold = True
.Italic = False
.ColorIndex = 3
End With '.FormatConditions(1).Font
End With 'Range(Range("q2"), Range("q2").End(xlDown))
citovat
#024334
avatar
podla mna netreba ani debugovat to a staci tam dat len anglicky nazov:
With Range(Range("G2"), Range("G2").End(xlDown))
.FormatConditions.Delete
.FormatConditions.Add Type:=xlExpression, Formula1:="=RIGHT(R2;2)=""km"""
With .FormatConditions(1).Font
.Bold = True
.Italic = False
.ColorIndex = 3
End With
End With
citovat
#024342
avatar
Dík za náměty. Podle očekávání u mého EXCEL 2010 Profesional náhrada instrukce ZPRAVA instrukcemi VPRAVO nebo RIGHT nefunguje. Jen mne překvapuje , že EXCEL 2010 Profesional vzorec "=RIGHT(r2;2)=""km""" akceptuje bez hlášení chyby, ale nastavené formátování se neprovede (jak píšu výše, formátování nefunguje).

Zítra to vyzkouším u uživatelů aplikace excel s tím problémovým Makrem s nefunkční instrukcí, kteří mají EXCEL 2010 Standard. Pak se ozvu.citovat
#024345
avatar
A zkusils "Right" a místo středníku, čárku?citovat
icon #024347
eLCHa
Nemusím to ani zkoušet abych věděl, že to fungovat nemůže.
Mluvím o českém excelu:
Pokud napíšete do buňky vzorec=RIGHT(B2;2)tak vás excel pustí, ale výsledkem bude #NÁZEV. RIGHT není integrovaná funkce, ale může to být uživatelská funkce a proto excel nezablokuje její vložení.
Naproti tomu při pokusu vložit =RIGHT(B2,2)to excel prostě nedovolí, protože jako oddělovač argumentů slouží ";". Čárka je oddělovač desetinných míst a proto je výraz B2,2 vyhodnocen jako chybný - není číslo, není odkaz a není ani text.

@Palooo - rozhodně nestačí ;) - nemyslete si že mne nenapadlo použít anglický vzorec. Jenže FormatConditions nezná Formula/FormulaLocal. A jak jsem napsal, český excel toto prostě nepochopí tak, jak byste si přál ;)

@Standa-B
Podle toho co jsem teď napsal, by ale neměl fungovat ani kód, který jsem vložil já - ale stejně to zkuste.
Jen mne překvapuje , že EXCEL 2010 Profesional vzorec "=RIGHT(r2;2)=""km""" akceptuje bez hlášení chyby
On Vám tu chybu hlásí, jenže Vy ji nevidíte, protože je výsledkem ve vzorci pro podmíněné formátování - výsledek je #NÁZEV a proto se formátování nezmění - to se provede pouze, pokud je výsledek PRAVDA. Takže ji hlásí tak, že neprovede formátování ;) - vložte vzorec do buňky a uvidíte ;)

Co by ale mělo fungovat je vzorec=IFERROR(VPRAVO(R2;2);ZPRAVA(R2;2))="km"nebo=COUNTIF(R2;"*km")

A ještě jen technická - pokud budete takto napsaný kód používat výhradně v česky lokalizoaných excelech, bude to fungovat - nicméně, pokud už byste ho spustil v jiné lokalizaci, fungovat to nebude. Tady bych šel asi cestou definovaného názvu, protože ten si každá lokalizace přeloží automaticky - ale to jen tak na okraj ;)citovat
#024348
avatar
to som netusil ze v ceskom to nejde lebo v Nemeckom a Slovenskom to ide.

alebo vytcorit si vlasnu funkciu a riesit to cez VBA tam uz ten prikaz urcite nebude premenovany do jazyku :)citovat
#024352
avatar
Děkuji všem za pomoc při řešení dotazu. Omluvte mne, že Vaše náměty nemohu testovat obratem na svém PC. Musím se obracet na kolegy v "jiných městech", kteří mají EXCEL 2010 Standard ve svých PC, a moje aplikace jim havaruje.
Jen dodám, že celá aplikace pro EXCEL má několik tisíc programových řádků ve Visual Basic a je provozována na řadě počítačů s OS XP až W8.1 s EXCEL 2003, 2007 a 2010. Dále byla převedena také do Finštiny a pracují s ní technici ve Finsku.
Úkolem aplikace je převod vstupního jednoduchého kódovaného datového TXT souboru chybových dat z lokomotivy do přehledné formy tabulky EXCEL s textovými názvy chyb a reálnými fyzikálními jednotkami včetně grafických výstupů a statistiky.
Aplikace se vyvíjí od roku 2005 a byla upgradována vždy při každé nové verzi EXCEL a OS.
Nyní jsme narazili na problém u EXCEL 2010 Standard, který se snažím s Vaší pomoci vyřešit.
Ideální by bylo, kdyby někdo z mých odborných poradců měl přístup k EXCEL Standard a náměty měl možnost hned ověřit. Na dálku s uživateli se mi pracuje obtížně.citovat
icon #024353
eLCHa
@Palooo
to som netusil ze v ceskom to nejde lebo v Nemeckom a Slovenskom to ide.
Pokud je ekvivalent fce ZPRAVA v německém excelu RIGHT tak Vám to fungovat bude. Pokud ne, tak Vám nevěřím, že to funguje (myslím funkční podmíněný formát) ;))

alebo vytcorit si vlasnu funkciu a riesit to cez VBA tam uz ten prikaz urcite nebude premenovany do jazyku :)
Tohle jsem jako nečetl ;)))citovat
icon #024355
eLCHa
@Standa-B
Jednoduché řešení - nainstalujte si doma Office 2010 Standard na virtuální počítač a ověřte si to.

Všechny 3 řešení, které jsem Vám nabídl fungují na českém excelu 2007 a jsem si na 99% jistý, že poslední dva budou fungovat i na českém excelu 2010 Standard. Takže pokud nemáte možnost zkoušet, změňte ve Vašem kóduSelection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=ZPRAVA(r2;2)=""km""
naSelection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=COUNTIF(R2;""*km"")"
Technická: Pokud to vyvíjíte od roku 2005, už byste mohl vědět, jak se zbavit těch Selectů...

Ve Finsku mají česky lokalizovaný excel? Pokud ne, jste si jistý, že jim tam funguje podmíněný formát se vzorcem:=ZPRAVA(r2;2)="km"?citovat
#024358
avatar

eLCHa napsal/a:

......Technická: Pokud to vyvíjíte od roku 2005, už byste mohl vědět, jak se zbavit těch Selectů...

Ve Finsku mají česky lokalizovaný excel? Pokud ne, jste si jistý, že jim tam funguje podmíněný formát se vzorcem:=ZPRAVA(r2;2)="km"?


Přiznám se, že jsem programátor na "baterky". Profesně jsem elektronik. Navíc oslavím tento rok sedmdesátku. Vyvíjím systémem "pokus-omyl". Nebo si sekvenci vytvářím ručně s nahráváním do VBA a pak sekvenci zkopíruji do aplikace. Tak se nedivte, že v mém VBA jsou funkční "pitominy" (selecty), nad kterými odborník programátor žasne a kroutí hlavou. Je ale fakt, že moje rozsáhlá aplikace funguje a je využívána servisními techiky lokomotiv.

Ve Finsku mají finský EXCEL. Dostal jsem od kolegů ve Finsku instalační CD s jejich excelem a nainstaloval to na takový odložený PC. Instalaci jsem neregistroval, a tak jsem po 30 spuštěních EXCEL vždy musel přeinstalovat systém a finský EXCEL znovu nainstalovat, abych mohl pokračovat, protože neregistrovaný EXCEL přestal pracovat. Pak jsem do finského EXCEL pustil českou aplikaci a vždy na chybě jsem hledal řešení pro finskou verzi. Nakonec se to podařilo.citovat

Strana:  1 2   další »

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje