Zdravím. Mám určitý problém s makrem. Používán několik způsobů pro stejný účel. Funkce If mi při prvním způsobu (Main1) funguje, ale je pomalejší a i méně přehledná. To druhé makro (Main2) zase nečte funkci If. Jde sice o jiné deklarace, ale ten druhý způsob (zřejmě z Excelu, nebo jiného Basicu - už nevím jak jsem na to přišel) Funguje v jiném makru přímo skvěle. Ty první makra jsou řídící pro makro "Vykonny" a to funguje bezvadně přestože je deklarována druhým stylem. Chtěl jsem to dát jako návod a s touhle ptákovinou si nevím rady - ani ryba ani rak. Zajímá mne, jestli někdo ví proč to je. Ukázka Main1, Main2, a Výkonny.
Sub Main1
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
Dim H2
Sheet = thisComponent.Sheets(0)
H2 = Sheet.getCellRangeByName("H2")
Dim H6
H6 = Sheet.getCellRangeByName("H6")
For iCount = 1 To 10000
IF H2.Value = H6.Value Then
Print "Překopíruj a smaž výsledky"
Stop REM (Exit Sub)
End If
Call Vykonny
Next iCount
End Sub
_____________________________________________________
Sub Main2
oDoc = ThisComponent
oSheets = oDoc.Sheets
oSheet = oSheets.getByIndex(0)
H2 = oSheet.getCellbyPosition(7,1).Value
H6 = oSheet.getCellbyPosition(7,5).Value
For iCount = 1 To 10000
REM tahle funkce nefunguje PROČ?
IF H2 = H6 Then
Print "Překopíruj a smaž výsledky"
Stop REM (Exit Sub)
End If
Call Vykonny
Next iCount
End Sub
_______________________________________________________
Sub Vykonny
oDoc = ThisComponent
oSheets = oDoc.Sheets
oSheet = oSheets.getByIndex(0)
A1 = oSheet.getCellbyPosition(0,0).Value
B1 = oSheet.getCellbyPosition(1,0).Value
C1 = oSheet.getCellbyPosition(2,0).Value
D1 = oSheet.getCellbyPosition(3,0).Value
E1 = oSheet.getCellbyPosition(4,0).Value
A2 = oSheet.getCellbyPosition(0,1).Value
B2 = oSheet.getCellbyPosition(1,1).Value
C2 = oSheet.getCellbyPosition(2,1).Value
D2 = oSheet.getCellbyPosition(3,1).Value
E2 = oSheet.getCellbyPosition(4,1).Value
REM Funkce vylučující zápis variace s opakováním prvků
REM bez této funkce generátor generuje variace s opakováním
IF A1 <> B1 AND A1 <> C1 AND A1 <> D1 AND A1 <> E1 AND B1 <> C1 AND B1 <> D1 AND B1 <> E1 And C1 <> D1 AND C1 <> E1 And D1 <> E1 Then
Call krok_0 REM Rídí zápis do registru výsledků
End IF
REM Vlastní krok podmínečné iterace
IF A1 = A2 AND B1 = B2 AND C1 = C2 And D1 = D2 And E1 = E2 Then
Exit Sub
Else IF A1 < A2 AND B1 = B2 AND C1 = C2 And D1 = D2 And E1 = E2 Then
oSheet(0).getCellByPosition(0,0).SetFormula(A1+1)
oSheet(0).getCellByPosition(1,0).SetFormula(1)
oSheet(0).getCellByPosition(2,0).SetFormula(1)
oSheet(0).getCellByPosition(3,0).SetFormula(1)
oSheet(0).getCellByPosition(4,0).SetFormula(1)
Else IF B1 < B2 AND C1 = C2 And D1 = D2 And E1 = E2 Then
oSheet(0).getCellByPosition(1,0).SetFormula(B1+1)
oSheet(0).getCellByPosition(2,0).SetFormula(1)
oSheet(0).getCellByPosition(3,0).SetFormula(1)
oSheet(0).getCellByPosition(4,0).SetFormula(1)
Else IF C1 < C2 And D1 = D2 And E1 = E2 Then
oSheet(0).getCellByPosition(2,0).SetFormula(C1+1)
oSheet(0).getCellByPosition(3,0).SetFormula(1)
oSheet(0).getCellByPosition(4,0).SetFormula(1)
Else IF D1 < D2 And E1 = E2 Then
oSheet(0).getCellByPosition(3,0).SetFormula(D1+1)
oSheet(0).getCellByPosition(4,0).SetFormula(1)
Else IF E1 < E2 Then
oSheet(0).getCellByPosition(4,0).SetFormula(E1+1)
End IF
End IF
End IF
End IF
End IF
End IF
End Sub
Poznámka - toto makro je plně funkčním generátorem - 1 krok libovolné variace 5. třídy bez opakování z libovolného základu. Po úpravě (ta je poznamenána) můžeme generovat variace 5. třídy libovolného základu s opakováním. Je však třeba nastavit pracovní prostředí a to se dělá "velkým" makrem. Zájemcům to pošlu, ale chtěl bych to dát do návodů. Děkuji za náměty
Petr
Editoval neutr (8. 10. 2011 07:03:02)
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É