< 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:  1 2 3   další »
#020974
Opičák
Nejsem si jistý, ale podle mě to je správně. Položky jsou duplicitní jen podle sloupce B, ale při třídění bere v úvahu celou oblast DRUHA a tam jsou např. u hodnoty "a" (ve sloupci B) jiná čísla ve sloupcích C a D. Takže ač název se zdá být stejný, nejsou stejné hodnoty. Takže podle mě není "a" jako "a" protože se liší sloupcem C a D.

hmmm, tak asi to tak není 8citovat
#020975
avatar
Zajímavé, navíc když jsem si nechal vypsat položky potřetí po kopii na konci makra, jsou zase 3 unikátní.
Ale nepomůžu, nevím. Snad něco se zdrojem colection držené v paměti??citovat
icon #020978
avatar
@ Opičák: Do collection načítam len hodnoty zo stĺpca B. Majú to byť 3 položky: aa, bb, cc. Vôbec mi nie je jasné, prečo by sa mali nejak zohľadňovať dáta v stĺpcoch C a D. Inými slovami, príliš Tvojmu vysvetleniu nerozumiem. 7
@ Dingo: Zajímavé, navíc když jsem si nechal vypsat položky potřetí po kopii na konci makra, jsou zase 3 unikátní. Áno, viem, na čo upozorňuješ, ale: Copy na konci makra slúži k púhemu obnoveniu pôvodnej tabuľky 2, aby sa to dalo znovu celé spustiť, takže Tvoj postreh mi bohužiaľ neosvetľuje nič.
Ja som práve žil v domnení, že pomocou collection si vytvorím zoznam unikátnych hodnôt, s ktorými budem môcť v kóde ďalej pracovať, ale zrejme to tak nie je, resp. niečo mi uniká...citovat
icon #020979
avatar
No, tak si pripadám ako blbec, páč som na niečo predsa len nakoniec prišiel:
Niekoľkokrát v minulosti som narazil na radu, že sa jeden nemá spoliehať na to, že pokiaľ potrebuje v kóde získavať hodnotu z bunky, tak miesto cell, je bezpečnejšie písaťcell.value, napriek tomu, že value je defaultná vlastnosť bunky a ako taká v kóde uvádzaná byť nemusí. Proste, pokiaľ sa do kódu zapíše cell, tak kód vráti hodnotu. Očividne to vždy neplatí, takže riešenie je nasledujúce: Správne má byť: On Error Resume Next
For Each cell In myRng
If MyCol.Count = 0 Then
MyCol.Add cell.Value, CStr(cell)
Else:
For i = 1 To MyCol.Count
If cell < MyCol(i) Then
MyCol.Add cell.Value, CStr(cell), i
Exit For
End If
MyCol.Add cell.Value, CStr(cell)
Next i
End If
Next cell
On Error GoTo 0
Pred včerom som strávil dosť času, než som to opravil spôsobom "škrabem sa nohou za uchom". Záver: Vždy, pokiaľ chcem, aby kód vracal .value, toto doňho písať a nespoliehať sa na to, že kód hodnotu vráti, keď .value neuvediemcitovat
#020981
avatar
@AL
Práve som na to prišiel, a vidím, že ty o hodinu skôr. 1 1citovat
icon #020982
avatar
@marjankaj
Tak to ma mrzí, že si sa s tým trápil takpovediac zbytočne 1citovat
#020983
avatar
No tak zase až tak zbytočne nie. Aspoň som sa naučil používať okno IMMEDIATE 1citovat
icon #020984
avatar
@marjankaj:
v tom prípade si odo mňa dostal cennú radu, páč Immediate je v procese ladenia kódu k nezaplateniu 1
Okrem hore uvedeného použitia si v ňom môžeš priamo nechávať zobrazovať napr. hodnotu premenných, pokiaľ do okna napíšeš príslušnú inštrukciu začínajúcu znakom ? s medzerou, či priamo písať jednotlivé inštrukcie, ktoré chceš testovať; ovšem v prípade, že ich je naraz viacero, musia byť vždy všetky zapísané naraz do jedného riadku, oddelené navzájom dvojbodkou.
Pre ilustráciu:
Inštrukcia ? [B2] zapísaná v Immediate vráti hodnotu bunky B2.
Inštrukcia [B8].FONT.BOLD=TRUE: [C18].FONT.BOLD=TRUE nastaví tučné písmo v bunkách B8 a C18.citovat
#020985
avatar
@AL
No zatiaľ som si to vedel aj inak zabezpečiť. 1citovat
icon #020987
eLCHa
@AL
Okrem hore uvedeného použitia si v ňom môžeš priamo nechávať zobrazovať napr. hodnotu premenných

ehm - neslouží k tomuto náhodou Watches?citovat

Strana:  1 2 3   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