< návrat zpět

MS Excel


Téma: Fungovanie Collection rss

Zaslal/a icon 9.8.2014 12:11

Ahoj, mám problém s chápaním collection, ktorá by mala obsahovať unikátne hodnoty. Jednotlivé hodnoty načítam zo stĺpca B z tabulky Druha v abecednom poradí. Potom data v tabulke Druha zotriedim abecedne podľa stĺpca B a nechám vypísať hodnoty z collection. Na moje prekvapenie dochádza k ich zmene napriek tomu, že (aspoň sa teda domnievam) jednotlivé položky collection nijak nemením. Dokáže mi niekto vysvetliť, prečo sa tak deje? Vzorový súbor prikladám.
Data z collection som síce pred triedením dat v tabulke Druha schopný zapísať do nejakého poľa a ďalej pracovať miesto collection s novým poľom, mňa by ale zaujímalo, ako je možné, že položky collection, ktoré boli na začiatku unikátne, po triedení dat v tabulke Druha sú zrazu duplicitné.

Příloha: zip20973_collectionproblem.zip (16kB, staženo 26x)
Zaslat odpověď >

Strana:  « předchozí  1 2 3
icon #021012
eLCHa
@AL
takže Evaluate vlastne používam skoro stále, akurát mi nedocvaklo

což jsem Vám psal cca před rokem ;))
http://wall.cz/index.php?m=topic&id=15503

@Dingo
Zprvu jsem důsledně psal všude Cell.Value, nechal jsem toho, když jsem to okoukal ve zdejších nebo jiných kódech, že je zvykem to neudávat.
VBA je velmi tolerantní jazyk a umožňujne velmi volný zápis. Nicméně tím přenecháváte kompilátoru rozhodování, co se má udělat a tak někdy může dojít k nechtěnému průběhu kódu. Toto jiné jazyky neumožňují a kde není jasné co se chce je vyhodnoceno jako chyba. Někdy je to otravné, ale je to tak lepší. Ve VBA je proto lepší vždy psát co chcete udělat.
Není to tedy zvykem a nedoporučuji to.

Pokud jde o to zda použít Value nebo Text
Value dá hodnotu buňky jak je vložená (bez formátování) - takže jako číslo
Text dá hodnotu buňky jak je zobrazená (včetně naformátování) - takže jako textový řetězeccitovat
icon #021013
avatar
@eLCHa
však ja viem, nie vždy si ale hneď poskladám jednotlivé časti mozajky 1citovat
#021014
avatar
@eLCHa
Value dá hodnotu buňky jak je vložená (bez formátování) - takže jako číslo.
Value2 dá hodnotu buňky jak je vložená (bez formátování) - takže jako číslo.
Nebo ne ?citovat
#021016
avatar
.value vrací objekt - hodnota + typ (hodí se např. u typu datum nebo čas)

.value2 vrací jen hodnotu

.text vrací to co je vidět v buňce (tj. mimo formátování také třeba #### u úzkých sloupcůcitovat
icon #021019
eLCHa
@kp57
on za mně v podstatě odpověděl lubo, ale pokud do toho ještě zatáhneme Value2, tak

Text je jen pro čtení, takže nelze použítActiveCell.Text = 5a vrací hodnotu typu String tak, jak je zobrazená v buňce (hrozí tedy případ, který zmiňuje lubo)
Value2 vrací skutečnou hodnotu buňky - pro číslo je to Double, text = String, Chyba = Error nebo logická hodnota = Boolean
Value je stejné jako Value2 s tím, že pokud je hodnota v buňce číslo a buňka obsahuje formát měny, vrací typ Currency nebo pokud je tam Datum, vrací typ Date. Pokud je v buňce formát času, vrací Double (@lubo - označení, že vrací objekt mi přijde nepřesné, protože objekt obsahuje vlastnosti a metody a pokud by to byl objekt, tak při dosazování hodnoty by bylo vyžadováno Set - nicméně to je jen lpění na detailech)

Z toho vyplývá, že není bezpečné používat Text, ale je lepší použít Value a převést si hodnotu na String
Pokud jde o Value vs Value2, tak pokud chcete získat číselnou hodnotu, správnější by bylo používat Value2. Pokud si ovšem definujete proměnné, tak kompilátor stejně převede číslo na typ proměnné, do které hodnotu vkládáte. Takže, pokud je v aktivní buňce číslo ve formátu měny, není rozdíl meziDim a As Long
a = ActiveCell.Value
aDim a As Long
a = ActiveCell.Value2
V obou případech je a typu Long. Pokud však napíšeteActiveCell.Value = CCur(5)vloží se hodnota 5 do aktivní buňky a naformátuje se jako měna (u mně se zobrazí 5,00 Kč).ActiveCell.Value2 = CCur(5)vloží do buňky číslo 5 a musíte si ho formátovat sám.

Čímž se tedy omlouvám za zjednodušenou a ne zcela přesnou předchozí odpověď
Value dá hodnotu buňky jak je vložená (bez formátování) - takže jako číslo

Na závěr - Value vs Value2 mi přijde, že mělo být naopak, ale je to tak jak to je a v podstatě na tom nezáleží. Text jsem nikdy nepoužil a neuvědomuji si ani Value2, protože používám to vysmívané Option Explicit a mám tedy všechny proměnné definované.citovat

Strana:  « předchozí  1 2 3

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