Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 20. 1. 2017 13:37:33

gunmant
Člen
Registrace: 18. 1. 2017
Příspěvků: 9

Zeštíhlení makra do Calc - VYŘEŠENÝ

Dobrý den.
Dá se nějak kód viz níže upravit jinak, aby jsem nemusel 4x provádět to samé.
Jediné co se mi vždy mění je list (1,2,3,4) a dlg.model.d_01.value (d_01,d_02,d_03d,_04).
oCel.formula taky nemusí být zapsaná do buňky, je to jen pro vyhledání do proměnné.

Děkuji za radu.


    nasel = dlg.model.d_por.text
        oSheet = ThisComponent.Sheets.getByName("List1")
    oCel = oSheet.getCellByPosition(18,6)
    oCel.formula = "=VLOOKUP(""" & nasel & """;A34:O270;15;0)"
    dlg.model.d_01.value = list1.getCellRangeByName("S7").value
       
    oSheet = ThisComponent.Sheets.getByName("List2")
    oCel = oSheet.getCellByPosition(18,6)
    oCel.formula = "=VLOOKUP(""" & nasel & """;A34:O270;15;0)"
    dlg.model.d_02.value = list2.getCellRangeByName("S7").value
       
    oSheet = ThisComponent.Sheets.getByName("List3")
    oCel = oSheet.getCellByPosition(18,6)
    oCel.formula = "=VLOOKUP(""" & nasel & """;A34:O270;15;0)"
    dlg.model.d_03.value = list3.getCellRangeByName("S7").value
       
    oSheet = ThisComponent.Sheets.getByName("List4")
    oCel = oSheet.getCellByPosition(18,6)
    oCel.formula = "=VLOOKUP(""" & nasel & """;A34:O270;15;0)"
    dlg.model.d_04.value = list4.getCellRangeByName("S7").value

Editoval gunmant (21. 1. 2017 11:55:00)

Offline

#2 20. 1. 2017 13:59:44

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,678

Re: Zeštíhlení makra do Calc - VYŘEŠENÝ

To se dělá pomocí cyklu. Netestoval jsem to ale pokud Vám to chodilo, bude tohle chodit také :

Sub Main
nasel = dlg.model.d_por.text
Dim sVar as string
For i = 0 To 3
sVar = "dlg.model.d_0" & i + 1 & ".value"
        oSheet = ThisComponent.Sheets.getByPosition(i)
    oCel = oSheet.getCellByPosition(18,6)
    oCel.formula = "=VLOOKUP(""" & nasel & """;A34:O270;15;0)"
    sVar = list1.getCellRangeByName("S7").value
Next i
End Sub

     Otestujte a když by to nefungovalo musel bych postavit ty dialogy a otestovat. Je tam ale minimální úprava do cyklu :
list jako číslo (pozor neakceptuje názvy ale pořadí v sešitě)
označení dialogu je udělané jak string závislý na iteraci "i".

Editoval neutr (20. 1. 2017 14:08:05)


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#3 20. 1. 2017 14:05:59

gunmant
Člen
Registrace: 18. 1. 2017
Příspěvků: 9

Re: Zeštíhlení makra do Calc - VYŘEŠENÝ

Ano pomoci cyklu by to šlo, ale, už se mi v tomto cyklu nezmění dlg.model.d_01.value na 02..03.. a v tom mám ten problém, že nevím jestli cyklem jde i toto nějak změnit.


neutr napsal(a)

To se dělá pomocí cyklu. Netestoval jsem to ale pokud Vám to chodilo, bude tohle chodit také :

Sub Main
nasel = dlg.model.d_por.text
For i = 0 To 3
        oSheet = ThisComponent.Sheets.getByPosition(i)
    oCel = oSheet.getCellByPosition(18,6)
    oCel.formula = "=VLOOKUP(""" & nasel & """;A34:O270;15;0)"
    dlg.model.d_01.value = list1.getCellRangeByName("S7").value
Next i
End Sub

Offline

#4 20. 1. 2017 14:11:11

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,678

Re: Zeštíhlení makra do Calc - VYŘEŠENÝ

Já to psal z hlavy a nežli jsem to upravil na správnou míru, tak jste postnul další příspěvek. Nyní tam je řešení s přepisem volaného dialogu.


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#5 20. 1. 2017 14:16:47

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,678

Re: Zeštíhlení makra do Calc - VYŘEŠENÝ

nebo otestujte tohle řešení - to by se hodilo když by názvy byly špatně upravitelné -

Sub Main_1
Dim sVar as string
nasel = dlg.model.d_por.text
For i = 0 To 3
Select Case i
Case 0
svar = dlg.model.d_01
Case 1
svar = dlg.model.d_02
Case 2
svar = dlg.model.d_03
Case 3
svar = dlg.model.d_04
End select
        oSheet = ThisComponent.Sheets.getByPosition(i)
    oCel = oSheet.getCellByPosition(18,6)
    oCel.formula = "=VLOOKUP(""" & nasel & """;A34:O270;15;0)"
    sVar.value = list1.getCellRangeByName("S7").value
Next i
End Sub

PS : když by to nechtělo chodit tak to bude deklarací sVar. Pak by to chtělo
Místo Dim svar as string - as object

Editoval neutr (20. 1. 2017 14:21:07)


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#6 21. 1. 2017 11:02:00

gunmant
Člen
Registrace: 18. 1. 2017
Příspěvků: 9

Re: Zeštíhlení makra do Calc - VYŘEŠENÝ

Tak po spuštění mi to napíše, že vlastnost nebo metoda getByPosition nenalezena.

neutr napsal(a)

nebo otestujte tohle řešení - to by se hodilo když by názvy byly špatně upravitelné -

Sub Main_1
Dim sVar as string
nasel = dlg.model.d_por.text
For i = 0 To 3
Select Case i
Case 0
svar = dlg.model.d_01
Case 1
svar = dlg.model.d_02
Case 2
svar = dlg.model.d_03
Case 3
svar = dlg.model.d_04
End select
        oSheet = ThisComponent.Sheets.getByPosition(i)
    oCel = oSheet.getCellByPosition(18,6)
    oCel.formula = "=VLOOKUP(""" & nasel & """;A34:O270;15;0)"
    sVar.value = list1.getCellRangeByName("S7").value
Next i
End Sub

PS : když by to nechtělo chodit tak to bude deklarací sVar. Pak by to chtělo
Místo Dim svar as string - as object

Offline

#7 21. 1. 2017 11:08:41

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,678

Re: Zeštíhlení makra do Calc - VYŘEŠENÝ

Jejda máte pravdu to je nesmysl má tam být "Index" - správně tedy :

Sub Main_1
Dim sVar as string
nasel = dlg.model.d_por.text
For i = 0 To 3
Select Case i
Case 0
svar = dlg.model.d_01
Case 1
svar = dlg.model.d_02
Case 2
svar = dlg.model.d_03
Case 3
svar = dlg.model.d_04
End select
        oSheet = ThisComponent.Sheets.getByIndex(i)
    oCel = oSheet.getCellByPosition(18,6)
    oCel.formula = "=VLOOKUP(""" & nasel & """;A34:O270;15;0)"
    sVar.value = list1.getCellRangeByName("S7").value
Next i
End Sub 

   Omlouvám se psal jsem z hlavy aniž bych to testoval.


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#8 21. 1. 2017 11:16:17

gunmant
Člen
Registrace: 18. 1. 2017
Příspěvků: 9

Re: Zeštíhlení makra do Calc - VYŘEŠENÝ

KONEČNÝ KÓD

Sub Main_1
Dim sVar as object
nasel = dlg.model.d_por.text
For i = 0 To 3
Select Case i
Case 0
svar = dlg.model.d_01
Case 1
svar = dlg.model.d_02
Case 2
svar = dlg.model.d_03
Case 3
svar = dlg.model.d_04
End select
        oSheet = ThisComponent.Sheets.getByIndex(i)
    oCel = oSheet.getCellByPosition(18,6)
    oCel.formula = "=VLOOKUP(""" & nasel & """;A34:O270;15;0)"
    sVar.value = oSheet.getCellRangeByName("S7").value
Next i
End Sub 

Editoval gunmant (21. 1. 2017 11:58:03)

Offline

#9 21. 1. 2017 11:33:16

gunmant
Člen
Registrace: 18. 1. 2017
Příspěvků: 9

Re: Zeštíhlení makra do Calc - VYŘEŠENÝ

Děkuji mnohokrát

Vyřešeno.

Offline

Zápatí