Makro pendant zu =INDIREKT()

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Makro pendant zu =INDIREKT()

Beitrag von Karolus »

Hallo
Das müsste gehen über:
___
ocellstring = oSheet1.getCellRangeByName("A1").string
oquellrange = ThisComponent.sheets().getCellRangesbyName( ocellstring )
____

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Makro pendant zu =INDIREKT()

Beitrag von Karolus »

Hallo
Entschuldige, ich hatte es vorher nicht ausprobiert, ...getCellRangesbyName(..) erwartet wohl ein Array von Zellbereichsbezeichnungen, du übergibst aber nur eine und willst auch auf diesen Zellbereich zugreifen, daher:
..
oQuellRange = ThisComponent.sheets().getCellRangesbyName(oCellString)(0)
..
Damit gehts dann.

Edit
Ich hab es falsch ausgedrückt, ...getCellRangesbyName(..) liefert ein Array, und du möchtest auf das erste Element daraus zugreifen.
edit_ende

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Makro pendant zu =INDIREKT()

Beitrag von Karolus »

Hallo
Deine Beispielsdatei funktioniert hier ( OOo3.3 Release unter Linux ) ohne Probleme, versuch mal :

Code: Alles auswählen

Sub Main
   oDocument = ThisComponent
   oSheet1 = oDocument.Sheets.getByIndex(0)
   oSheet2 = oDocument.Sheets.getByIndex(1)

   oCellString = oSheet1.getCellRangeByName("A1").string
   oQuellRange = ThisComponent.sheets().getCellRangesbyName(oCellString)

	oQuellRange = oQuellRange(0) 

   oQuellRangeAddresse = oQuellRange.getRangeAddress 
   oZiel = oSheet2.getCellByPosition(2,5)
   oZielCellAdresse=oZiel.getCellAddress
   oSheet2.copyRange(oZielCellAdresse,oQuellRangeAddresse)
End Sub
Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Makro pendant zu =INDIREKT()

Beitrag von balu »

Hallo Leute,

ich klinke mich hier mal ein, da ich eigentlich genau den Code für mich gebrauchen kann. Jedoch habe ich da ein Problem. Denn ich möchte nicht nur einen Bereich, sondern 5 verschiedene an 5 verschiedenen Stellen kopieren. Mit folgendem Code funktioniert es wohl, aber der kommt mir doch zu unelegant vor.

Code: Alles auswählen

	oDocument = ThisComponent
       oSheet1 = oDocument.Sheets.getByName("Blatt_1")
       oSheet2 = oDocument.Sheets.getByName("Blatt_2")

       oCellString = oSheet1.getCellRangeByName("AX7").string
       oQuellRange = ThisComponent.sheets().getCellRangesbyName(oCellString)

       oCellString2 = oSheet1.getCellRangeByName("AX4").string
       oQuellRange2 = ThisComponent.sheets().getCellRangesbyName(oCellString2)

	oCellString3 = oSheet1.getCellRangeByName("AX6").string
	oQuellRange3 = ThisComponent.sheets().getCellRangesbyName(oCellString3)

      oCellString4 = oSheet1.getCellRangeByName("AX10").string
       oQuellRange4 = ThisComponent.sheets().getCellRangesbyName(oCellString4)

	oCellString5 = oSheet1.getCellRangeByName("AX11").string
	oQuellRange5 = ThisComponent.sheets().getCellRangesbyName(oCellString5)

       oQuellRange = oQuellRange(0)
       oQuellRange2 = oQuellRange2(0)
       oQuellRange3 = oQuellRange3(0)
       oQuellRange4 = oQuellRange4(0)
       oQuellRange5 = oQuellRange5(0)
       
       oQuellRangeAddresse = oQuellRange.getRangeAddress
       oQuellRangeAddresse2 = oQuellRange2.getRangeAddress
       oQuellRangeAddresse3 = oQuellRange3.getRangeAddress
       oQuellRangeAddresse4 = oQuellRange4.getRangeAddress
       oQuellRangeAddresse5 = oQuellRange5.getRangeAddress
       
       oZiel = oSheet2.getCellRangeByName("A1")
       oZiel2 = oSheet2.getCellRangeByName("J1")       
       oZiel3 = oSheet2.getCellRangeByName("AP1")
       oZiel4 = oSheet2.getCellRangeByName("J134")       
       oZiel5 = oSheet2.getCellRangeByName("AP134")       

       oZielCellAdresse=oZiel.getCellAddress
       oZielCellAdresse2=oZiel2.getCellAddress
       oZielCellAdresse3=oZiel3.getCellAddress
       oZielCellAdresse4=oZiel4.getCellAddress
       oZielCellAdresse5=oZiel5.getCellAddress       

       oSheet2.copyRange(oZielCellAdresse,oQuellRangeAddresse)
       oSheet2.copyRange(oZielCellAdresse2,oQuellRangeAddresse2)
       oSheet2.copyRange(oZielCellAdresse3,oQuellRangeAddresse3)
       oSheet2.copyRange(oZielCellAdresse4,oQuellRangeAddresse4)
       oSheet2.copyRange(oZielCellAdresse5,oQuellRangeAddresse5)
Nun hatte ich ihn auf das hier gekürzt, aber das funktioniert überhaupt nicht wie erhofft.

Code: Alles auswählen

	oDocument = ThisComponent
       oSheet1 = oDocument.Sheets.getByName("Blatt_1")
       oSheet2 = oDocument.Sheets.getByName("Blatt_2")

       oCellString = oSheet1.getCellRangeByName("AX7" , "AX4" , "AX6" , "AX10" , "AX11").string
       oQuellRange = ThisComponent.sheets().getCellRangesbyName(oCellString)

       oQuellRange = oQuellRange(0,0,0,0,0)
       
       oQuellRangeAddresse = oQuellRange.getRangeAddress
       
       oZiel = oSheet2.getCellRangeByName("A1" , "J1" , "AP1" , "J134" , "AP134")

       oZielCellAdresse=oZiel.getCellAddress

       oSheet2.copyRange(oZielCellAdresse,oQuellRangeAddresse)
Es wird nur "AX7" nach "A1" kopiert, also nur der erste Eintrag. Es gibt auch keine Fehlermeldung.

Nun meine Frage.
Läßt sich überhaupt der erstgenannte Code etwas optimieren, oder ist das in diesem Falle nicht möglich?
Wenn keine Optimierung, oder Verbesserung möglich ist, dann ist das okay und bin mit der Antwort zufrieden.

Für eure Bemühungen sag ich schon mal danke.
Freue mich auf eure Antworten :D .


Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Makro pendant zu =INDIREKT()

Beitrag von Karolus »

Hallo
Tuts folgendes: ( Vorsicht ungetestet ! )

Code: Alles auswählen

sub Test
odoc = thisComponent
osheet1 = odoc.sheets.getbyName("Blatt_1")
osheet2 = odoc.sheets.getbyName("Blatt_2")
Quelladressen = array("AX7", "AX4", "AX6", "AX10", "AX11" )
zieladressen = array("A1", "J1", "AP1", "J134", "AP134")
dim addressstrings(4)
dim ziel(4)
for i = 0 to 4
    addressstrings(i) = Quelladdresses(i).string
    ziel(i) = osheet2.getcellrangebyName( zieladressen(i)).getcelladdress
next i
oquellranges = odoc.sheets().getcellrangesbyName( addressstrings() )
for i = 0 to 4
    osheet2.copyRange( ziel(i) , oquellranges(i).getrangeaddress )
next i
end sub
Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Makro pendant zu =INDIREKT()

Beitrag von Karolus »

Hallo
Ok jetzt mit Test und Test bestanden :

Code: Alles auswählen

Sub Main
odoc = thisComponent
osheet1 = odoc.sheets.getbyName("Blatt_1")
osheet2 = odoc.sheets.getbyName("Blatt_2")
Quelladressen = array("AX7", "AX4", "AX6", "AX10", "AX11" )
zieladressen = array("A1", "J1", "AP1", "J134", "AP134")

for i = 0 to 4
    qaddname = osheet1.getcellrangebyname( Quelladressen(i)).string
    adresse = odoc.sheets().getcellrangesbyName( qaddname )
    adresse = adresse( 0 ).getrangeaddress
    osheet2.copyrange(osheet2.getcellrangebyName( zieladressen(i)).getcelladdress , adresse  )
next i

End Sub
Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Makro pendant zu =INDIREKT()

Beitrag von balu »

Hallo Karo,

oh ja, es funktioniert einfach wunderbar :D.

Ich bin wirklich von Herzen sehr erfreut, dass Du mal wieder so klasse helfen konntest. Ich danke dir vielmals :D.


Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Antworten