Seite 1 von 1

[GELÖST} Eingabe autom. in Großbuchstaben

Verfasst: So 24. Dez 2023, 16:51
von conny64
Hi,

ich möchte in einer bestimmten Spalte, dass alle eingegeben Buchstaben autom. in groß sind.

Habe mich mit dem Macro Editor beschäftigt, bekomme es aber nicht zum laufen.
Vielleich kann mir als Anfängerin da jemand helfend unter die Arme greifen:

Code: Alles auswählen

Sub Grosbuchstaben(ByVal oCell As Object)
    Dim sRange As String
    Dim oSheet As Object
    Dim oChangedRange As Object
    
    sRange = "A:A" ' Hier die Spalte angeben, in der Änderungen überwacht werden sollen
    oSheet = oCell.getSpreadsheet()
    oChangedRange = oSheet.getCellRangeByName(sRange)
    
    If Not Intersect(oCell, oChangedRange) Is Nothing Then
        If oCell.supportsService("com.sun.star.text.Cell") Then
            oCell.setString(UCase(oCell.getString()))
        End If
    End If
End Sub

Sub OnChange(ByVal oEvent As Object)
    Dim oCell As Object
    
    oCell = oEvent.Range
    Call Grosbuchstaben(oCell)
End Sub

Re: Eingabe autom. in Großbuchstaben

Verfasst: So 24. Dez 2023, 18:15
von mikele
Hallo,

Code: Alles auswählen

Sub Grosbuchstaben(oevent)
	Dim oChangedRange As Object
	oCell=oEvent
	If oCell.supportsService("com.sun.star.sheet.SheetCell") Then
		oChangedRange = oCell.SpreadSheet.Columns(0)
		If oChangedRange.queryintersection(ocell.rangeaddress).count>0 Then
			oCell.setString(UCase(oCell.getString()))
		End If
	End If
End Sub
Das eine Makro (gebunden an das Tabellenereignis "Inhalt geändert") reicht.
Frohes Fest

Re: Eingabe autom. in Großbuchstaben

Verfasst: Mo 25. Dez 2023, 10:53
von conny64
Hi Mikele,

vielen lieben Dank für deine schnelle Hilfe - ich wünsche dir erst mal frohe Festtage.
Leider hat das nicht ganz so bei mir geklappt.

1. Das Tabellenereignis "Inhalt geändert" gibt es so nicht - ich habe es an "Der Status 'Geändert' wurde gerändert gebunden

Bild

2. Beim Ausführen bekomme ich folgenden Fehler:
Bild

3. Würde ich es gerne noch auf einen bestimmten Zellenbereich begrenzen
kann ich das so mache wie in meinem Beispiel?

Viele Grüße
Conny

Re: Eingabe autom. in Großbuchstaben

Verfasst: Mo 25. Dez 2023, 16:24
von conny64
Hallo

ich denke ich konnte das ganze selbst lösen.
Hier mein Vorschlag:

Code: Alles auswählen

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

Sub range_check()
REM Prüfen ob aktuelle Zelle in einem bestimmten Bereich liegt 
REM Wenn das der Fall ist wird der Inhalt der Zelle in Großschrift umgewandelt
REM Einbindung über: Sheetname mit der rechten Maustaste -> Ereignisse
REM "Inhalt geändert" auswählen und Macro "range_check" zuweisen

	Dim oSheet As Object
    Dim oCell As Object
    Dim oRange As Object
    
    oSheet = ThisComponent.CurrentController.ActiveSheet
    oCell = ThisComponent.CurrentSelection
    
    ' Definiere den Zellbereich
    Set oRange = oSheet.getCellRangeByName("A1:B10") ' Beispiel: Zellen A1 bis B10
    
    ' Überprüfe, ob die aktuelle Zelle innerhalb des Zellbereichs liegt
    If oCell.RangeAddress.StartColumn >= oRange.RangeAddress.StartColumn And _
       oCell.RangeAddress.EndColumn <= oRange.RangeAddress.EndColumn And _
       oCell.RangeAddress.StartRow >= oRange.RangeAddress.StartRow And _
       oCell.RangeAddress.EndRow <= oRange.RangeAddress.EndRow Then
       
        'MsgBox "Die Zelle liegt im definierten Bereich."
       Grossbuchstaben()
    Else
        'MsgBox "Die Zelle liegt nicht im definierten Bereich." 
    End If
End Sub

sub Grossbuchstaben()
rem Wandelt den Inhalt der aktuellen Zelle in Großbuchstaben 
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 ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ChangeCaseToUpper", "", 0, Array())

end sub

Re: Eingabe autom. in Großbuchstaben

Verfasst: Mo 25. Dez 2023, 17:59
von mikele
Hallo,
Das Tabellenereignis "Inhalt geändert" gibt es so nicht
doch ... du hast nur an der flaschen Stelle gesucht. Du bist bei den Anwendungs- bzw. Dokumentereignissen gelandet (deswegen auch die Fehlermeldung). Die Tabellenereignisse erreichst du, indem du mit rechter Maustaste auf den Tabellenreiter klickst oder im Menü Tabelle auf Ereignisse gehst.
Den Test auf den richtigen Bereich kannst du so machen. Alternativ kannst du auch:

Code: Alles auswählen

oSheet.getCellRangeByName("A1:B10").queryintersection(ocell.cellrangeaddress)
nutzen.

Re: Eingabe autom. in Großbuchstaben

Verfasst: Mo 25. Dez 2023, 20:18
von conny64
Hallo @Mikele,

vielen lieben Dank für deine tolle Unterstützung.
Ich habe es nach längerem suchen selbst gemerkt, dass ich da falsch war.

Es funktioniert jetzt alles - SUPER!

Viele Grüße
Conny

Re: Eingabe autom. in Großbuchstaben

Verfasst: Di 26. Dez 2023, 17:26
von Helmut_S
Hallo, nur eine kleine Ergänzung. Sollte dein Makro irgendwann nicht mehr machen was es soll, bleibt dir immer noch die Einstellung im Menue Format --> Text --> GROSSBUCHSTABEN. oder der allerletzte Notnagel: die Großschreibung-Feststelltaste, die wohl auf den meisten Tastaturen vorhanden sein dürfte.
Falls deine Frage zu deiner Zufriedenheit beantwortet wurde, kennzeichne dies bitte im Betreff des ersten Eintrags, danke und Gruß, Helmut

Re: [GELÖST} Eingabe autom. in Großbuchstaben

Verfasst: Di 26. Dez 2023, 19:32
von conny64
Hi @Helmut_S,

vielen Dank für die Info.
Die Möglichkeiten kannte ich, da ich aber das Script weiter gebe und ich in speziellen Spalten unbedingt
die Großschreibung brauche habe ich nach einer anderen Lösung gesucht.
Am liebsten wäre mir das gewesen, wenn es eine solche Möglichkeit beim Zellen-Formatieren gegeben hätte.
Dann hätte ich die Macro Geschichte nicht gebraucht.

Ich habe den Thread als gelöst gekennzeichnet.

Viele Grüße
Conny