Seite 1 von 1

Funktions Parameter Range

Verfasst: Mo 23. Jul 2018, 11:26
von DKS_007
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)

Re: Funktions Parameter Range

Verfasst: Mo 23. Jul 2018, 12:25
von nikki
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

Re: Funktions Parameter Range

Verfasst: Mo 23. Jul 2018, 19:30
von DKS_007
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.

Re: Funktions Parameter Range

Verfasst: Mo 23. Jul 2018, 23:44
von DavidG
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

Re: Funktions Parameter Range

Verfasst: Di 24. Jul 2018, 08:11
von DKS_007
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.

Re: Funktions Parameter Range

Verfasst: Di 24. Jul 2018, 09:25
von F3K Total
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

Re: Funktions Parameter Range

Verfasst: Di 24. Jul 2018, 15:16
von DKS_007
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

Re: Funktions Parameter Range

Verfasst: So 29. Jul 2018, 14:29
von mikele
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.