"Dinamično" poimenovanje podatkov in ustavitev mak

Pomoč pri izdelavi makrov
Odgovori
jure121
Prispevkov: 19
Pridružen: Sr Nov 26, 2008 4:29 pm

"Dinamično" poimenovanje podatkov in ustavitev mak

Odgovor Napisal/-a jure121 »

Pozdravljeni!
Napisano imam proceduro za izvajanje interakcije.
Makro zajema podatke npr. v stolpcih a:f, vmesne rezultate piše v stolpce g:l, končni rezultat posameznega koraka pa v stolpec m.
Med izvajanjem makra, se torej vseskozi spreminja velika količina podatkov, ki pa se ves čas zapisujejo v celice. Izračunavanje traja kar nekaj minut, kar pa bi rad skrajšal. Zanima me, ali bi se makro izvajal hitreje, če vmesne rezultate ne bi izpisoval v celice, ampak bi jih program le shranil v spomin.

Če je odgovor "ja, mogoče je", me zanima kako poimenovati posamezno vrednost. Npr.: kako določiti, da bo podatek, ki se nahaja v stolpcu "A" in v vrstici "i" imenoval "Ai"

Primer
Stolpec A, vrstica 1 = ime podatka A1
Stolpec A, vrstica 2 = ime podatka A2
Stolpec A, vrstica 3 = ime podatka A3
...
Stolpec A, vrstica i = ime podatka Ai



Če pa je odgovor "ni mogoče" me zanima, kako ustaviti proces izvajanja (z namenom povečati korak interakcije in s tem skrajšati čas izvajanja makra) brez nadležnih Error sporočil (kar se zgodi, če makro ustavim s tipko Esc ali Ctrl+break.

Upam, da sem dovolj dobro objasnil v čem je problem in da mi boste znali pomagati.

Že v naprej hvala
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Če vrednosti ne pišete v celice potem bo makro hitrejši to je zagotovo. Koliko hitrejši bo pa je zelo odvisno od vašega algoritma.

Vendar pa v algoritmu ne boste vrednosti shranjevali v posamezne spremenljivke, temveč v polje (ARRAY) v vašem primeru pač potrebujete dvodimenzionalno polje kamor vrednosti shranjujete podobno kot v celice. Primer:

Koda: Izberi vse

Option Explicit

Sub test2Dpolja()
  Dim polje(2, 4) As Integer
  
  polje(0, 0) = 1
  polje(0, 1) = 2
  polje(0, 2) = 3
  polje(0, 3) = 4
  polje(0, 4) = 5
  
  Dim i, j
  For i = 0 To 4
    polje(1, i) = 2 * i
    polje(2, i) = 8 * i
  Next
  
  For j = 0 To 2
    For i = 0 To 4
      Debug.Print polje(j, i);
    Next
    Debug.Print ""
  Next
End Sub
lp,
Matjaž Prtenjak
Administrator
Odgovori