Všechno to vypadá dost divně. Například :
Dim MyArray(1 To 2) As String
MyArray(1) = "oblast01"
MyArray(2) = "oblast02"
Tohle má trošku význam jen pokud je "oblast01" a "oblast02" názvem oblasti - například pojmenovaný úsek. Jenomže pak je deklarace MyArray úplně zbytečná. Stačilo by
Dim oblast01, oblast02 as object (respektive variant) a nebo v určitém případě vůbec nic.
Navíc takhle jednoduchá pole se zadává nejspíš takto :
Dim MyArray(1) As String
MyArray(0) = "oblast01"
MyArray(1) = "oblast02"
Nebo přímo jako getByIndex(SC, SR, EC, ER) a pak by to bylo například takto :
Dim MyArray(1)
MyArray(0) = array(SC1, SR1, EC1, ER1)
MyArray(1) = array(SC2, SR2, EC2, ER2)
Ale i pak by bylo asi lepší nadefinovat hned celou adresu - při dvou by se takto nic neušetřilo - spíš naopak - bylo by více kódu.
Další věc :
For i = 1 To UBound(MyArray)
oCells = SplitString(GetRangeAddress(MyArray(i))(0),".",2)
... Doplňte si za ten výraz Myarray a dostanete například :
oCells = SplitString(GetRangeAddress("oblast01")(0),".",2)
....oCells se tváří jako "adresa buňky", ale je to String který k výrazu oblast01 přidá tečku jako separátor a něco - například XY - tedy získáte výraz "oblast01.XY"
Podobně také
oRowStart = GetRangeAddress("oblast01")(1)
Poroblém je v tom, že "startovní řádek" (tedy oRowStart) už by měl být deklarovaný číslem, ale když voláte oblast01 tak je to celý název oblasti - pokud to není jen jediná buňka. To zase koliduje s tím že voláte v jiných případech ten samý úsek a proto to není jediná buňka (a doufejme že jde o explicitní název oblasti sešitu vedené v rámci databázového úseku, nebo pojmenované oblasti).
Podobně všechno ostatní. Silně pochybuji že by to vůbec chodilo a natož potom "pomalu, ale správně" z toho konkrétního sešitu. Tohle se dělá jinak
Najdete poslední řádek každého sloupce - (startovní znáte). To jsou čísla, která dáte jako proměnné - například SR a ER - deklarace jako Long.
Dim Sheet, Doc
Sheet = ThisComponent.GetSheets(3)
Cyklus pak spouštíte For i = SR TO ER. Vlastní buňky pak mají deklaraci číslem
například
Cell = Sheet.GetCellRangeByposition(SC, i)
Dotaz :
IF Cell.String = XYZ Then
...něco
End If
Next i
Další sloupec
SR = něco, ER = něco, SC = něco (to je číslo sloupce - jak StartColumn)
a zase
For i = SR TO ER.
Cell = Sheet.GetCellRangeByposition(SC, i)
IF Cell.String = XYZ Then
...něco
End If
Next i
Osobně bych to řešil funkcí
Function IterujPotvoro(ByVal SC as long, ByVal SR as long, ByVal ER as long, ByVal sVar as string)
Dim Doc, Sheet
Cell = sheet.GetCellRangeByposition(SC, i)
IF Cell.String = XYZ Then
Cell.string = Cell.string & "." & sVar
End If
End Function
Tahle funkce by se spouštěla nějakým makrem které by přežvejkalo kde se má iterovat a co se bude přidávat k původnímu výrazu a podobně. Já to píšu samozřejmě z hlavy takže takhle to chodit asi nebude. Váš celý problém je v určení posledního řádku inkriminovaného sloupce. Na to se dá postavit makro, nebo funkce, nebo se to dá i nahrát záznamníkem.
Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ