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

#1 4. 1. 2019 18:05:25

barevnej
Člen
Registrace: 6. 8. 2015
Příspěvků: 173

Schovávání řádků pomocí makra "VYŘEŠENO"

Hezký nový rok,

jsem naprostý amatér a potřebuji schovávat řádky podle toho co je v prvním sloupci.

Použil jsem návod vit tento příspěvek nakonci
https://ask.libreoffice.org/en/question … ell-value/

Jenže se schová jen a pouze první řádek, měl by se schovat i ten třetí. Já bych potřeboval aby to fungovalo na celý sloupec A kdekoliv se objeví "Hello" tak aby se řádek schoval.
Schovat.gif

Sub MyDoLoop

Dim oCell as Object, oSheet as Variant, oSheets as Variant, oString as String

oSheets = ThisComponent.getSheets(0)
oSheet = oSheets.getByIndex(0)
oRows = oSheet.Rows
oRow = oRows.GetByIndex(0)


oCell = oSheet.GetCellByPosition(0, 0)
oString = oCell.getString()
If oString = "Hello" Then
  oRow.IsVisible = False
Else
  oRow.IsVisible = True
End If

End Sub

Editoval barevnej (22. 2. 2019 15:46:55)

Offline

#2 4. 1. 2019 18:48:48

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

Re: Schovávání řádků pomocí makra "VYŘEŠENO"

To není problém. Musíte ale upřesnit předpokládaný rozsah kde se může "Hello" objevit.

Sub MyDoLoop

Dim oCell as Object, oSheet as Variant, oSheets as Variant, oString as String

oSheets = ThisComponent.getSheets(0)
oSheet = oSheets.getByIndex(0)
oRows = oSheet.Rows

For i = 0 To 12
oCell = oSheet.GetCellByPosition(0, i)
oRow = oRows.GetByIndex(i)
oString = oCell.getString()
If oString = "Hello" Then
  oRow.IsVisible = False
Else
  oRow.IsVisible = True
End If
Next i

End Sub

     Šlo by to upravit. Tohle je jen malá ukázka. Cyklus For..Next iteruje řádky od 1. do 13. a když v buňce sloupce A najde "Hello" tak ten řádek skryje. Podobně by to šlo i se sloupci.
     


POZNÁMKA :
Počítání řádků (podobně sloupců) začíná od nuly. Takže "0" je 1. řádek.... 12. řádek je ve skutečnosti 13. a tak dál

Editoval neutr (4. 1. 2019 18:55:26)


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 7. 1. 2019 22:36:00

barevnej
Člen
Registrace: 6. 8. 2015
Příspěvků: 173

Re: Schovávání řádků pomocí makra "VYŘEŠENO"

Děkuji funguje to krásně, je to mé první Makro vůbec použité v praxi a moc se mi to líbí.

Offline

#4 22. 2. 2019 12:11:22

barevnej
Člen
Registrace: 6. 8. 2015
Příspěvků: 173

Re: Schovávání řádků pomocí makra "VYŘEŠENO"

Vše funguje jak má ale občas potřebuji řádky i vymazat namísto schovat.

Je to ten poslední oddíl "Smazat" vím že oRow.Delet to asi nebude :-)))

Sub Schovat

Dim oCell as Object, oSheet as Variant, oSheets as Variant, oString as String

oSheets = ThisComponent.getSheets(0)
oSheet = oSheets.getByIndex(0)
oRows = oSheet.Rows

For i = 9 To 2000
oCell = oSheet.GetCellByPosition(25, i)
oRow = oRows.GetByIndex(i)
oString = oCell.getString()
If oString = "0" Then
  oRow.IsVisible = False
Else
  oRow.IsVisible = True
End If
Next i

End Sub



Sub Zobrazit

Dim oCell as Object, oSheet as Variant, oSheets as Variant, oString as String

oSheets = ThisComponent.getSheets(0)
oSheet = oSheets.getByIndex(0)
oRows = oSheet.Rows

For i = 9 To 2000
oCell = oSheet.GetCellByPosition(25, i)
oRow = oRows.GetByIndex(i)
oString = oCell.getString()
If oString = "nic" Then
  oRow.IsVisible = False
Else
  oRow.IsVisible = True
End If
Next i

End Sub




Sub Smazat

Dim oCell as Object, oSheet as Variant, oSheets as Variant, oString as String

oSheets = ThisComponent.getSheets(0)
oSheet = oSheets.getByIndex(0)
oRows = oSheet.Rows

For i = 9 To 2000
oCell = oSheet.GetCellByPosition(25, i)
oRow = oRows.GetByIndex(i)
oString = oCell.getString()
If oString = "0" Then
  oRow.Delete = False
Else
  oRow.Delete = True
End If
Next i

End Sub

Offline

#5 22. 2. 2019 12:36:13

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

Re: Schovávání řádků pomocí makra "VYŘEŠENO"

sub SmazatRadky 
Dim oDoc as Object 
oDoc=ThisComponent 
oSheet=oDoc.Sheets(0) 
oRows = oSheet.getRows() 
oRows.removeByIndex(0,4) '1. číslo=start, 2. číslo = počet smazaných
End Sub

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 22. 2. 2019 13:17:57

barevnej
Člen
Registrace: 6. 8. 2015
Příspěvků: 173

Re: Schovávání řádků pomocí makra "VYŘEŠENO"

Trchu chápu že to smaže první 4 řádky ale neumím to aplikovat na tohle aby to ale řádky neschovalo ale smazalo...

Sub Schovat

Dim oCell as Object, oSheet as Variant, oSheets as Variant, oString as String

oSheets = ThisComponent.getSheets(0)
oSheet = oSheets.getByIndex(0)
oRows = oSheet.Rows

For i = 9 To 2000
oCell = oSheet.GetCellByPosition(25, i)
oRow = oRows.GetByIndex(i)
oString = oCell.getString()
If oString = "0" Then
  oRow.IsVisible = False
Else
  oRow.IsVisible = True
End If
Next i

End Sub

Offline

#7 22. 2. 2019 14:54:33

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

Re: Schovávání řádků pomocí makra "VYŘEŠENO"

Sub Smazat
Dim oCell as Object, oSheet as Variant, oSheets as Variant, oString as String
Dim oDoc as Object 
oDoc=ThisComponent 
oSheet=oDoc.Sheets(0
For i = 2000 To 9 Step -1
oCell = oSheet.GetCellByPosition(25, i)
oRows = oSheet.getRows() 
oString = oCell.getString()
If oString = "0" Then 
oRows = oSheet.getRows() 
oRows.removeByIndex(i,1)
End If
Next i
End Sub

     Je to trošku jiné - mazání se musí dělat od konce jinak to špatně dopadne. Originál makro je možné spíš volat jako rutinu která jen smaže řádek který mu pošleme jako parametr. Tohle jsem udělal abyste nebyl dezorientovaný. Také název makra jsem změnit na "Smazat".


     Otestujte zda to funguje jak má. Přeji úspěch


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 22. 2. 2019 15:46:35

barevnej
Člen
Registrace: 6. 8. 2015
Příspěvků: 173

Re: Schovávání řádků pomocí makra "VYŘEŠENO"

Funguje to děkuji. Jste vážně dobrej smile

Offline

Zápatí