BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Funktions Parameter Range

Alles zur Programmierung im LibreOffice.
Antworten
DKS_007
Beiträge: 4
Registriert: Mo 23. Jul 2018, 11:10

Funktions Parameter Range

Beitrag von DKS_007 » Mo 23. Jul 2018, 11:26

Hallo Zusammen,

ich habe eine ganz einfache frage finde aber keine Antwort für Calc bei Excel war es ganz einfach.

Ich möchte eine Funktion erstellen über die VBA die einen Bereichsparameter (Array) erhält und in dieser Funktion muss ich die Länge und die Breite ermitteln.

z.B.

Code: Alles auswählen

=FunctionsName("A1:B10")

Code: Alles auswählen

Function FunctionsName(Bereich)
breite = Bereich.[Breite ermitteln]
länge = Bereich.[Länge ermitteln]

End Function
Für die Länge habe ich eine art Lösung gefunden die auch funktioniert

Code: Alles auswählen

länge = UBound(Bereich)

nikki
Beiträge: 1026
Registriert: Sa 18. Mär 2017, 22:25
Kontaktdaten:

Re: Funktions Parameter Range

Beitrag von nikki » Mo 23. Jul 2018, 12:25

Hallo,
LO/AOO kennen kein VBA sondern stattdessen u. a. StarBasic. Informationen für StarBasic findest Du unter http://www.dannenhoefer.de/faqstarbasic/index.html
Gruß

---------------------------------------------------
Win.10 Prof. 64-bit, LO 6.3.4 (x64), LO 6.2.6 Portable, AOO 4.1.7

DKS_007
Beiträge: 4
Registriert: Mo 23. Jul 2018, 11:10

Re: Funktions Parameter Range

Beitrag von DKS_007 » Mo 23. Jul 2018, 19:30

Ich habe mir die Webseite jetzt angesehen und habe etwas Herumgekriegt.
Habe jetzt ein Befehl gefunden aber irgend wir klappt da was nicht.

Der Befehl steht so dringe.

Code: Alles auswählen

...
oCellRange = osheet.getCellRangeByName("A1:B10")

breite =oCellRange.rangeAddress.startRow
aber für meine Zwecke benötige ich in ungefähr so.

Code: Alles auswählen

...
oCellRange = osheet.getCellRangeByName(Bereich)

breite = oCellRange.rangeAddress.startRow
aber so geht es nicht? Hat jemand da eine Idee was ich falsch mache.

DavidG
Beiträge: 195
Registriert: Do 22. Mär 2018, 21:41

Re: Funktions Parameter Range

Beitrag von DavidG » Mo 23. Jul 2018, 23:44

Hallo,

ein Beispiel:

Code: Alles auswählen

REM  *****  BASIC  *****

Sub Main
Dim oDoc as Object
Dim oCC as Object
Dim oSheet as Object
Dim oCellRange as Object
Dim Breite as Long
Dim Länge as Long

' MRI ist eine Extension, welche der Code-Inspektion dient.
' Hiermit kann man sich z.B. Eigenschaften, Methoden, Schnittstellen usw. 
' des übergebenen Objektes anzeigen lassen.
' Download:
' extensions.openoffice.org/en/projectrelease/mri-uno-object-inspection-tool-133	
	oDoc = ThisComponent
'mri oDoc

	oCC=oDoc.getCurrentcontroller
' mri oCC	

	oSheet=oCC.ActiveSheet
'mri oSheet 	

	oCellRange = osheet.getCellRangeByName("A1:B10")
'mri 	oCellRange

Breite = oCellRange.Columns.Count
Laenge = oCellRange.Rows.Count
Msgbox "Breite = " & Chr(9) & Breite & Chr(10) & _
			"Laenge = " & Chr(9) & Laenge,64,"Zähler:"
End Sub
Gruß
David
Gruß

David
___________________
WIN 10 PRO
LO 7.4.5.1 (x64)

DKS_007
Beiträge: 4
Registriert: Mo 23. Jul 2018, 11:10

Re: Funktions Parameter Range

Beitrag von DKS_007 » Di 24. Jul 2018, 08:11

Hallo DavidG,

genau so kann ich es ja nicht machen da es ja keine "Sub" Makro wäre soll, ich benötige ein "Function" Makro.

Code: Alles auswählen

Function FunctionsName(Bereich)

End Function
und keine

Code: Alles auswählen

Sub Main

End Sub
und genau das ist ja mein Problem
Ich Übergebe der Funktion einen Bereich der unbestimmt ist.

F3K Total
Beiträge: 2410
Registriert: So 10. Apr 2011, 10:10

Re: Funktions Parameter Range

Beitrag von F3K Total » Di 24. Jul 2018, 09:25

Moin, so sollte es klappen:

Code: Alles auswählen

Function GET_RANGE_COLUMNS_AND_ROWS(sRange as string) as string
    oSheet = ThisComponent.currentcontroller.activeSheet
    oRange = oSheet.getcellrangebyName(sRange)
    aRA = oRange.RangeAddress
    C1 = aRA.StartColumn
    C2 = aRA.EndColumn
    R1 = aRA.StartRow
    R2 = aRA.EndRow
    nC = C2-C1 + 1
    nR = R2-R1 + 1
    if nC = 1 Then
        sC = " Spalte und "
    else
        sC = " Spalten und "
    endif
    if nR = 1 Then
        sR = " Zeile."
    else
        sR = " Zeilen."
    endif
    GET_RANGE_COLUMNS_AND_ROWS = "Der Bereich " & sRange & " hat " & nC & sC  & nR & sR
End function
Beispiel anbei.
Gruß R

EDIT: so geht's kürzer:

Code: Alles auswählen

Function GET_RANGE_COLUMNS_AND_ROWS(sRange as string) as string
    oSheet = ThisComponent.currentcontroller.activeSheet
    oRange = oSheet.getcellrangebyName(sRange)
    nC = oRange.Columns.count
    nR = oRange.Rows.count
    if nC > 1 Then sC = "n"
    if nR > 1 Then sR = "n"
    GET_RANGE_COLUMNS_AND_ROWS = "Der Zellbereich " & sRange & " hat " & nC & " Zeile" & sC & " und " & nR & " Spalte" & sR & "."
End function
Dateianhänge
GET_RANGE_COLUMNS_AND_ROWS.ods
(16.32 KiB) 167-mal heruntergeladen
Windows 10: AOO, LO Linux Mint: AOO, LO

DKS_007
Beiträge: 4
Registriert: Mo 23. Jul 2018, 11:10

Re: Funktions Parameter Range

Beitrag von DKS_007 » Di 24. Jul 2018, 15:16

Hallo,

Ich danke auch allen für eure Hilfe.
Danke auch an F3K Total deine Antwort hat auch geholfen.
Bin aber jetzt auf die kompaktere Lösung gekommen und dabei war Sie direkt vor meinen Augen.

Code: Alles auswählen

Function FunctionsName(Bereich)
' UBound(Array, dimension)   ; Dimension  1 = y (Spalte) ; 2 = x (Zeile)
breite = UBound(Bereich, 2) 
laenge = UBound(Bereich, 1)

End Function

mikele
Beiträge: 1642
Registriert: Mo 1. Aug 2011, 20:51

Re: Funktions Parameter Range

Beitrag von mikele » So 29. Jul 2018, 14:29

Hallo,
nur zur Sicherheit: Damit das Makro korrekt funktioniert, muss der Funktionsaufruf nun so

Code: Alles auswählen

=FunctionsName(A1:B10)
erfolgen und nicht, wie im ursprünglichen Post mit Anführungszeichen.
Gruß,
mikele

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten