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ů: 3,468

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)


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É

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ů: 3,468

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.


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É

Offline

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

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

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)


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É

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ů: 3,468

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.


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É

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í