< návrat zpět

MS Excel


Téma: pole premennych rss

Zaslal/a 26.2.2012 19:45

ahojte

mam vyse 100 premennych ktore potrebujem znulovat, najlepsie by bolo pouzit pole a cyklus, bohuzial neviem ako z pola a do pola dostat hodnotu premennej (nie samotnu premennu - to nieje problem)

pole = array(x, y, z)

potrebujem do x, y a z zapisat 0, pripadne potrebujem hodnoty x, y a z dalej pouzit v cykle tj priamo z pola.
viete mi pomoct? dakujem

stop Uzamčeno - nelze přidávat nové příspěvky.

icon #007446
avatar
pri option base 0 (nemusíš zadávať), asi takto nejak:Option Explicit

Sub pom()
Dim i As Integer
Dim pole(2) As Variant
Dim x, y, z
x = 1
y = 2
z = 3

'nacitanie premennych do pola pole
pole(0) = x
pole(1) = y
pole(2) = z

'sú tam?
For i = 0 To 2
Debug.Print pole(i)
Next i

'vymazanie premenných z pola pole
For i = 0 To 2
pole(i) = 0
Debug.Print pole(i)
Next i

'sú tam nuly?
For i = 0 To 2
Debug.Print pole(i)
Next i

End Sub
prípadne takto:Option Explicit

Sub pom()

Dim pole As Variant
Dim x, y, z

x = 0
y = 0
z = 0
pole = Array(x, y, z)
End Sub

jednotlivé hodnoty z poľa potom napr pomocou for i=0 to UBound(pole)
pole(i)=0
next i
citovat
#007447
avatar
dik za snahu ale bohuzial to neriesi moj problem, Ty davas do pola uz hodnoty, ja tam musim mat premenne ktore si musia zachovat hodnoty (nechce sa mi vypisovat 120 riadkov typu x = 0, y = 0 ........)

co potrebujem:

Sub pokus()

' mam vypocet ktory mi naplni premenne OK1 = 12, OK2 = 15, OK3 = 45 ...................... (v dalsom cykle sa zmenia)

pole = Array(OK1, OK2, OK3, OK4, OK5, OK6, OK7, OK8, OK9, OK10, OK11, OK12, OK13, OK14, OK15, OK16, OK17, OK18, OK19, OK20, OK21, OK22, OK23, OK24, OK25, OK26, OK27, OK28, OK29, OK30, OK31, OK32, OK33, OK34, OK35, OK36, OK37, OK38, OK39, OK40, OK41, OK42, OK43, OK44, OK45, OK46, OK47, OK48, OK49, OK50, OK51, OK52, OK53, OK54, OK55, OK56, OK57, OK58, OK59, OK60, OK61, OK62, OK63, OK64, OK65, OK66, OK67, OK68, OK69, OK70, OK71, OK72, OK73, OK74, OK75, OK76, OK77, OK78, OK79, OK80, OK81, OK82, OK83, OK84, OK85, OK86, OK87, OK88, OK89, OK90, OK91, OK92, OK93, OK94, OK95, OK96, OK97, OK98, OK99, OK100, OK101, OK102, OK103, OK104, OK105, OK106, OK107, OK108, OK109, OK110, OK111, OK112, OK113, OK114, OK115, OK116, OK117, OK118, OK119, OK120)

' tu potrebujem vypisat hodnoty premenných do buniek (nie premenne ale ich skutocne hodnoty)

riadok = 1
For Each xx In pole
Cells(riadok, 1).Value = xx.Value 'hodnota cize 12, 15 , 45 ........
riadok = riadok + 1
Next xx

' znulovanie
For Each xx In pole
xx = 0 'zase hodnota premennej nie obsah pola
Next xx

'vysledkom musi byt pole ktore je plne premennych ktore = 0
pole = Array(OK1, OK2, OK3, OK4, OK5, OK6, OK7, OK8, OK9, OK10, OK11, OK12, OK13, OK14, OK15, OK16, OK17, OK18, OK19, OK20, OK21, OK22, OK23, OK24, OK25, OK26, OK27, OK28, OK29, OK30, OK31, OK32, OK33, OK34, OK35, OK36, OK37, OK38, OK39, OK40, OK41, OK42, OK43, OK44, OK45, OK46, OK47, OK48, OK49, OK50, OK51, OK52, OK53, OK54, OK55, OK56, OK57, OK58, OK59, OK60, OK61, OK62, OK63, OK64, OK65, OK66, OK67, OK68, OK69, OK70, OK71, OK72, OK73, OK74, OK75, OK76, OK77, OK78, OK79, OK80, OK81, OK82, OK83, OK84, OK85, OK86, OK87, OK88, OK89, OK90, OK91, OK92, OK93, OK94, OK95, OK96, OK97, OK98, OK99, OK100, OK101, OK102, OK103, OK104, OK105, OK106, OK107, OK108, OK109, OK110, OK111, OK112, OK113, OK114, OK115, OK116, OK117, OK118, OK119, OK120)
' pricom OK1 = 0, OK2 = 0 ............................

End Sub
citovat
icon #007453
avatar
Rozumiem zadaniu, ale riešenie asi nedám. Chceš vynulovať premenné OK1 až OKxxx jednotlivo, pomocou nejakého cyklu. Nakoľko premenné nie sú indexované, tak cyklom to asi nepôjde. Mám taký pocit, že by pomohlo pre uvedené premenné definovanie novej class (za použitia class module) a následné vynulovanie hodnôt premenných v rámci celej takto novo vytvorenej triedy, moje aktuálne znalosti ale ešte nedosahujú použiteľnej úrovne v tejto oblasti.citovat
#007455
avatar

' mam vypocet ktory mi naplni premenne OK1 = 12, OK2 = 15, OK3 = 45 ...................... (v dalsom cykle sa zmenia)

pole = Array(OK1, OK2, OK3, OK4, OK5, OK6, OK7, OK8, OK9, OK10, OK11, OK12, OK13, OK14, OK15, OK16, OK17, OK18, OK19, OK20, OK21, OK22, OK23, OK24, OK25, OK26, OK27, OK28, OK29, OK30, OK31, OK32, OK33, OK34, OK35, OK36, OK37, OK38, OK39, OK40, OK41, OK42, OK43, OK44, OK45, OK46, OK47, OK48, OK49, OK50, OK51, OK52, OK53, OK54, OK55, OK56, OK57, OK58, OK59, OK60, OK61, OK62, OK63, OK64, OK65, OK66, OK67, OK68, OK69, OK70, OK71, OK72, OK73, OK74, OK75, OK76, OK77, OK78, OK79, OK80, OK81, OK82, OK83, OK84, OK85, OK86, OK87, OK88, OK89, OK90, OK91, OK92, OK93, OK94, OK95, OK96, OK97, OK98, OK99, OK100, OK101, OK102, OK103, OK104, OK105, OK106, OK107, OK108, OK109, OK110, OK111, OK112, OK113, OK114, OK115, OK116, OK117, OK118, OK119, OK120)

' tu potrebujem vypisat hodnoty premenných do buniek (nie premenne ale ich skutocne hodnoty)

Myslím, že najjednoduchšie by bolo upraviť ten tvoj výpočet a naplniť OK(i) namiesto OKi.
Teda OK(1), OK(2),OK(3).....OK(100) namiesto OK1,OK2,OK3,....OK100citovat
icon #007456
avatar
to ma tiež napadlo, alebo ďalej v kóde miesto OKi použivať pole(i-1), ale ťažko povedať, čo s čím v misockovom kóde bude súvisieť. Každopádne, 120 jednotlivých premenných je asi predsa len príliš :)citovat
#007459
avatar
Souhlasím s výše uvedeným. Použij klasické pole a proměnné smaž.

Sub pokus()

Dim r As Range
Dim i As Long ' čítač
Dim Pole() As Long

' Naplním pole hodnotami z označených buněk
i = 1
ReDim Pole(Selection.Count)
For Each r In Selection
Pole(i) = r.Value
i = i + 1
Next r

' Vypíšu pole do okenka "Immediate" ve VBA
Debug.Print "Výpis pole "
For i = 1 To UBound(Pole)
Debug.Print "Item " & i & " -> " & Pole(i)
Next i

' Vynuluji všechny hodnoty
For i = 1 To UBound(Pole)
Pole(i) = 0
Next i

' Vypíšu pole do okenka "Immediate" ve VBA
Debug.Print "Výpis nulovaného pole "
For i = 1 To UBound(Pole)
Debug.Print "Item " & i & " -> " & Pole(i)
Next i
End Sub
citovat
#007461
avatar
OK pani , to nieje zly napad skusim to teda cez OK(i).

ps neda sa predsa len vytvorit to pole premennych? - urcite ano lebo vypis hodnot v cykle z pola premennych mi funguje (obsah premennych mozem vypisat
do buniek) len nefunguje zapis do premennych v poli

zatial dakujem za nakopnutie 1citovat
#007464
avatar
To by išlo možno v assembleri, ale do pola môžeš ukladať iba hodnoty(čísla alebo reťazce).
príkaz pole=array(x,y,z)
uloží do poľa aktuálne hodnoty premenných x,y,z.
Ak sa zmení x to neznamená že sa automaticky zmení aj hodnota v pole(0).
Tá sa zmení až po príkaze ARRAY. Inverzná funkcia k ARRAY nie je. to by si musel priraďovať manuálne. Teda v podprograme tých 120 priradení k tvojim premenným OK1...OK120.

Názov premennej je vlastne informácia pre prekladač a ten priradí tej premennej určité miesto v pamäti a stou bunkou sa potom pracuje.

Príkaz pole=array(x,y,z)
urobí to isté ako
pole(0)=x
pole(1)=y
pole(2)=z
a urobí to iba raz
ak sa neskôr zmenia hodnoty x,y,z, tak hodnoty v poli zostanú pôvodné, ako boli priradené príkazom array.citovat
#007479
avatar
"marjankaj"
dakujem za vysvetlenie , uz to chapemcitovat
#007483
avatar
To je hezky napsané. Sice jsem v assemberu už 14 let nic nenapsal, ale kdyby jsi chtěl tak to zmastím 2 5.
Chtěl jsem ještě navrhnout jedno řešení ... poněkud modernější. Divím se, že mne to nenapadlo včera.
Ve VBA je object Collection který bere Key a Item tj. bere "OK1" -> "15". Pokud bys z nějakého jiného důvodu potřeboval proměnnou OK1, OK apod. pak tudy cesta taky vede. Je to jen zapoudření array. Další cesta by byla přes vytvoření objektu nebo recordu a uložení do Collection. To bys pak mohl mít víc než jednu informaci k OK1. R.citovat

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