💚 BITTE helfen Sie uns NOCH HEUTE mit einer SPENDE 💚
Helfen Sie das LibreOffice Forum zu erhalten!
> 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. 🤗
Alles zur Programmierung im LibreOffice.
-
DKS_007
- Beiträge: 4
- Registriert: Mo 23. Jul 2018, 11:10
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
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
-
nikki
- Beiträge: 1026
- Registriert: Sa 18. Mär 2017, 22:25
-
Kontaktdaten:
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
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
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
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.
und keine
und genau das ist ja mein Problem
Ich Übergebe der Funktion einen Bereich der unbestimmt ist.
-
F3K Total
- Beiträge: 2416
- Registriert: So 10. Apr 2011, 10:10
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
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: 1659
- Registriert: Mo 1. Aug 2011, 20:51
Beitrag
von mikele » So 29. Jul 2018, 14:29
Hallo,
nur zur Sicherheit: Damit das Makro korrekt funktioniert, muss der Funktionsaufruf nun so
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 ❤️