RemoveRange OPGELOST

RemoveRange OPGELOST

Berichtdoor LeoDeWeerdt » za jun 12, 2010 10:56 am

Mijn bedoeling is een macrostukje te maken om, uit een bestaande Spreadsheet, een bepaald bereik ("B2:C6") te verwijderen.

Daarvoor heb ik, uit het document: "Basic Guide Ooo3.0.0.pdf", gevonden op de website, (http://wiki.services.openoffice.org/w/i ... o3.0.0.pdf
het volgende macrootje geplukt.
Code: Selecteer alles   UitklappenInklappen
Sub DeleteLines
Dim Doc As Object
Dim Sheet As Object
Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress
Doc = ThisComponent
Sheet = Doc.Sheets(1)
CellRangeAddress.Sheet = 1
CellRangeAddress.StartColumn = 1
CellRangeAddress.StartRow = 1
CellRangeAddress.EndColumn = 2
CellRangeAddress.EndRow = 5
Sheet.removeRange(CellRangeAddress,com.sun.star.sheet.CellDeleteMode.UP)
end sub

Als ik dat macrootje laat lopen verwijdert het inderdaad een gebied zo groot als het gevraagde en ook in de juiste kolommen, maar wel onderaan de lijst in plaats van de gevraagde rijen (CellRangeAddress.StartRow = 1 en CellRangeAddress.EndRow = 5) het aantal verwijderde rijen is wel juist.

Daar ben ik nu 4 dagen mee bezig en heb vastgesteld dat mijn huidige kennis over macro's maken in (Linux-Ooo) nog zeer beperkt is. Maar de aanhouder hoopt te kunnen winnen met een extra ruggenstootje
Dank bij voorbaat
Laatst bijgewerkt door floris v op ma jun 21, 2010 8:34 pm, in totaal 3 keer bewerkt.
Reden: vinkje toegevoegd
Leo
Het is voor mij een grote troost dat er geen domme vragen zijn.
LeoDeWeerdt
 
Berichten: 41
Geregistreerd: wo jan 06, 2010 4:26 pm

Re: RemoveRange

Berichtdoor RPG » za jun 12, 2010 11:25 am

Hallo

Is het werken met een opgenomen macro in dit geval niet het gemakkelijkste?

Hier staat een hele lijst met mogelijkheden om opgenomen macro's iets te kunnen aanpassen.

Code: Selecteer alles   UitklappenInklappen
sub Main2
rem ----------------------------------------------------------------------
rem define variables
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")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$B$2:$C$6"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array())
end sub
LibreOffice 6.1.5.2 op openSUSE Leap 15
RPG
 
Berichten: 3924
Geregistreerd: wo apr 15, 2009 1:01 am
Woonplaats: Apeldoorn, Nederland

Re: RemoveRange

Berichtdoor LeoDeWeerdt » za jun 12, 2010 4:03 pm

RGP, Dank voor de snelle reactie.
Voor het ogenblik heb ik een opgenomen macro in de totale makro gezet. Het nadeel daarvan is dat, gedurende de loop van het het opgenomen deel van het totale programma alle veranderingen op het scherm voorbij flitsen en daardoor het verloop van het totale pakket veel langer duurt.
Ik weet dat dat flikkeren onder excel (MS) kan onderdrukt worden door, in het begin en op het einde van de macro, een lijn -welke ben ik vergeten (False/True)- toe te voegen. Bestaat er bij uw weten in Ooo ook zoiets?
Leo
Het is voor mij een grote troost dat er geen domme vragen zijn.
LeoDeWeerdt
 
Berichten: 41
Geregistreerd: wo jan 06, 2010 4:26 pm

Re: RemoveRange

Berichtdoor RPG » za jun 12, 2010 7:21 pm

Hallo

Ik denk dat er een oplossing is voor het geflikker maar ik ben er niet zeker van. Ook is er misschine een snellere oplossing.
Beiden kun je hier vinden.

Romke
LibreOffice 6.1.5.2 op openSUSE Leap 15
RPG
 
Berichten: 3924
Geregistreerd: wo apr 15, 2009 1:01 am
Woonplaats: Apeldoorn, Nederland

Re: RemoveRange

Berichtdoor LeoDeWeerdt » ma jun 14, 2010 11:39 am

De door U opgegeven verwijzing bevat wel een macro voor het wissen van de informatie in de cellen maar niet het verwijderen van de cellen.
(Sub wisdeel...oDoc.lockcontrollers.....routine.......oDoc.unlockControllers..end Sub) onderdrukt het flikkeren van de cellen maar niet van de lijnnummering.
Mag ik er U ook op wijzen dat, op de site "http://wiki.services.openoffice.org/wiki/Spreadsheet_common#Remove_cells", de vermelde Macro (RemoveCells) voor het verwijderen van de cellen bij mij niet werkt .
"Sub RemoveCells
"Dim oRange As New com.sun.star.table.CellRangeAddress
"Dim oSheet
"' first sheet and B2:C3 range
"oRange.Sheet = 0
"oRange.StartColumn = 1
"oRange.StartRow = 1
"oRange.EndColumn = 2
"oRange.EndRow = 2
"oSheet.removeCells( oRange, com.sun.star.sheet.CellRemoveMode.UP )
"End Sub
En de foutmelding bij de voorlaatste lijn: "BASIC runtime error Property or method not found"
Leo
Het is voor mij een grote troost dat er geen domme vragen zijn.
LeoDeWeerdt
 
Berichten: 41
Geregistreerd: wo jan 06, 2010 4:26 pm

Re: RemoveRange

Berichtdoor RPG » ma jun 14, 2010 1:24 pm

Hallo

Ik begrijp de reactie onvoldoende.
(Sub wisdeel...oDoc.lockcontrollers.....routine.......oDoc.unlockControllers..end Sub) onderdrukt het flikkeren van de cellen maar niet van de lijnnummering.
Wat betekent dit?


Mijn kennis van macros voor een spreadsheet gering.
Ik denk dat je deze vraag beter op een Engels forum kunt stellen. Hier zijn niet zoveel macro schrijvers. Ik schrijf wel macros maar niet voor spreadsheets.

Maak ook een betere omschrijving van je probleem want je omschrijft het in het begin als een klein iets en ik krijg de indruk dat je met een veel groter probleem bezig bent.

Romke
LibreOffice 6.1.5.2 op openSUSE Leap 15
RPG
 
Berichten: 3924
Geregistreerd: wo apr 15, 2009 1:01 am
Woonplaats: Apeldoorn, Nederland

Re: RemoveRange

Berichtdoor LeoDeWeerdt » ma jun 14, 2010 7:17 pm

RPG Eerst en vooal dank voor uw reacties.
RPG schreef:Hallo
Ik begrijp de reactie onvoldoende.
(Sub wisdeel...oDoc.lockcontrollers.....routine.......oDoc.unlockControllers..end Sub) onderdrukt het flikkeren van de cellen maar niet van de lijnnummering.
Wat betekent dit?
Romke

Hiervoor verwijs ik naar uw email hieronder
RPG schreef:Hallo
Ik denk dat er een oplossing is voor het geflikker maar ik ben er niet zeker van. Ook is er misschine een snellere oplossing.
Beiden kun je hier vinden.
Romke


Wat nu mijn probleem betreft? dat is, wel met een omweg, opgelost op de manier zoals in de macro hieronder.
Code: Selecteer alles   UitklappenInklappen
Sub InsertDelete
Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress
oDoc = ThisComponent
oSheet = oDoc.Sheets(0)
   CellRangeAddress.Sheet = 0
   CellRangeAddress.StartColumn = 1
   CellRangeAddress.StartRow = 5
   CellRangeAddress.EndColumn = 3
   CellRangeAddress.EndRow = 5
   oSheet.insertCells(CellRangeAddress,com.sun.star.sheet.CellInsertMode.DOWN)

   CellRangeAddress.StartColumn = 1
   CellRangeAddress.StartRow = 2
   CellRangeAddress.EndColumn = 3
   CellRangeAddress.EndRow = 5
   oSheet.removeRange(CellRangeAddress,com.sun.star.sheet.CellDeleteMode.UP)
End sub

ttz, Een lijn toevoegen NA het te verwijderen bereik (B3:D5) en dan het te verwijderen bereik (B3:D5) MET de toegevoegde lijn verwijderen.
Is niet de ideale oplossing maar het werkt zonder dat het betreffende blad op de scherm verschijnt. Wel moet, om het resultaat te zien het betreffende blad geactiveerd worden.
Laatst bijgewerkt door floris v op ma jun 14, 2010 9:33 pm, in totaal 1 keer bewerkt.
Reden: code-tags toegevoegd
Leo
Het is voor mij een grote troost dat er geen domme vragen zijn.
LeoDeWeerdt
 
Berichten: 41
Geregistreerd: wo jan 06, 2010 4:26 pm

Re: RemoveRange

Berichtdoor LeoDeWeerdt » ma jun 21, 2010 4:25 pm

Na verder onderzoek, en een kleine aanpassing aan de macro vermeld in mijn eerste vraag, ben ik erin geslaagd het gewenste bereik uit mijn rekenblad te verwijderen zonder toevoeging van een tussenlijn.
Het resultaat staat hier onder. Het bereik ("B2:C3") wordt verwijderd (Deleted)
Code: Selecteer alles   UitklappenInklappen
Sub RemoveCells
Dim oSheet As Object
Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress
   oSheet = ThisComponent.Sheets(0)
   CellRangeAddress.Sheet = 0
   CellRangeAddress.StartColumn = 1
   CellRangeAddress.StartRow = 1
   CellRangeAddress.EndColumn = 2
   CellRangeAddress.EndRow = 2
   oSheet.removeRange(CellRangeAddress,com.sun.star.sheet.CellDeleteMode.UP)   
End Sub

Daarmee kan, wat mij betreft deze topic afgesloten worden.
Leo
Het is voor mij een grote troost dat er geen domme vragen zijn.
LeoDeWeerdt
 
Berichten: 41
Geregistreerd: wo jan 06, 2010 4:26 pm


Keer terug naar Macro's

Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers. en 1 gast

cron