Arbeitsmenü für LibreOffice

LibreOffice und OpenOffice: Schnellstartmenü für häufig genutzte Dokumente

Sie müs­sen häu­fig bestimm­te Doku­men­te öff­nen und bear­bei­ten? Dann rich­ten Sie sich in Libre­Of­fice oder Open­Of­fice per Makro ein eige­nes Menü für den schnel­len Zugriff ein.

Es hängt von der per­sön­li­chen Arbeits­wei­se ab: Wer sei­ne Doku­men­te in Ord­nern und Unter­ord­nern orga­ni­siert hat, ver­wen­det in der Regel den Datei-Mana­ger des Betriebs­sys­tems, um die gewünsch­ten Datei­en anzu­steu­ern und zu öff­nen. Auf die zuletzt geöff­ne­ten Datei­en bie­ten Libre­Of­fice oder Open­Of­fice über den Menü­punkt „Datei -> Zuletzt benutz­te Doku­men­te“ oder das Start­mo­dul einen schnel­len Zugriff. Die­ser hat jedoch einen Nach­teil. Län­ger nicht ver­wen­de­te Datei­en ver­schwin­den nach eini­ger Zeit aus dem Menü, wenn Sie zwi­schen­durch ande­re Datei­en öff­nen. Zudem lässt sich die Rei­hen­fol­ge nicht ändern.

Bes­ser ist daher ein Arbeits­me­nü, über das Sie Datei­en öff­nen, an denen Sie gera­de täg­lich arbei­ten oder die Sie häu­fi­ger öff­nen und ändern müs­sen. Für die­se Lösung benö­ti­gen Sie Makros, die ich Ihnen in die­sem Arti­kel vor­stel­le.

Update Janu­ar 2023: In der neu­en Ver­si­on 2.4 wur­den eini­ge Feh­ler beho­ben. Auch unter Linux wer­den die Menü­ein­trä­ge nun kor­rekt ange­legt. Außer­dem las­sen sich die Makros jetzt als Erwei­te­rung für Libre­Of­fice oder Open­Of­fice instal­lie­ren.

Neu ist eine Funk­ti­on, über die sich die ers­te Datei aus der Lis­te der gespei­cher­ten Datei­en auto­ma­tisch beim Start von LibreOffice/OpenOffice öff­nen lässt.

Down­load zu die­sem Arti­kel:

Arbeits­me­nü OXT 2.4 (Erwei­te­rung):

286 Down­loads

Arbeits­me­nü 2.4 (Doku­ment mit Makos, instal­lier­bar):

304 Down­loads

Alte Ver­si­on Arbeits­me­nü 2.1:

1191 Down­loads

Die Makros funk­tio­nie­ren in Libre­Of­fice und Open­Of­fice ab Ver­si­on 4.x unter Win­dows, Linux und Mac OSX. Ledig­lich bei Ubun­tu mit dem Unity-Desk­top gibt es eine Ein­schrän­kung: Das Menü wird per Makro nicht rich­tig aktua­li­siert, sodass neue Ein­trä­ge erst nach einem Neu­start von Libre­Of­fice auf­tau­chen. Eine Lösung für die­ses Pro­blem ist mir zur­zeit nicht bekannt.

Der Makro-Code ermög­licht die Über­nah­me des aktu­ell genutz­ten Doku­ments in ein Menü. Wenn Sie die Arbeit an einem Doku­ment wie­der auf­neh­men, wäh­len Sie ein­fach den zuge­hö­ri­gen Menü-Ein­trag aus. Zusätz­lich gibt es einen Dia­log, über den Sie die gespei­cher­ten Ein­trä­ge ver­wal­ten. Sie kön­nen Ein­trä­ge aus der Lis­te löschen, alle Ein­trä­ge löschen oder die Rei­hen­fol­ge ändern. Zusätz­lich gibt es noch die Kom­fort­funk­ti­on „Öff­ne Doku­ment-Ord­ner“, der im Datei-Mana­ger den Ord­ner anzeigt, in dem das aktu­ell geöff­ne­te Doku­ment liegt. Das ist prak­tisch, wenn Sie Mate­ria­li­en wie Bil­der oder PDFs im glei­chen Ord­ner able­gen. Sie müs­sen dann den Ord­ner nicht erst umständ­lich im Datei-Mana­ger auf­ru­fen, um hier Datei­en abzu­le­gen oder zu ändern.

Arbeitsmenü oder Favoritenmenü für LibreOffice
Über das neue Arbeits­me­nü laden Sie schnell die häu­fig genutz­ten Doku­men­te.

So installieren Sie die Makros

Libre­Of­fice bezie­hungs­wei­se Open­Of­fice star­ten aus Sicher­heits­grün­den stan­dard­mä­ßig kei­ne Makros aus Doku­men­ten, die Sie von Ihrer Fest­plat­te laden. Um das zu ändern, gehen Sie auf „Extras -> Optio­nen“ und dann unter „Libre­Of­fice“ auf „Sicher­heit“. Kli­cken Sie auf „Makro­si­cher­heit“. Stel­len Sie das Sicher­heits­le­vel auf „Mit­tel, kli­cken Sie auf „OK“ und noch ein­mal auf „OK“. Open­Of­fice-Nut­zer gehen auf „Extras -> Ein­stel­lun­gen“ und dann auf „Open­Of­fice“ und „Sicher­heit“.

Laden Sie die Datei Arbeitsmenu.zip her­un­ter und Ent­pa­cken Sie das Archiv. Öff­nen Sie dann Arbeitsmenu.odt per Dop­pel­klick. Bestä­ti­gen Sie die Sicher­heits­ab­fra­ge per Klick auf „Makros akti­vie­ren“. Kli­cken Sie auf „Arbeits­me­nü instal­lie­ren“. Damit kopie­ren Sie die Makro-Biblio­thek „lib­Ar­beits­me­nü“ in den Makro­spei­cher „Mei­ne Makros & Dia­lo­ge“. Wenn Sie möch­ten, stel­len Sie das Sicher­heits­le­vel wie­der zurück auf „Hoch“.

Makrosicherheit
Um die Makros zu instal­lie­ren, müs­sen Sie hier mit „Makros akti­vie­ren“ bestä­ti­gen.

Alter­na­tiv ver­wen­den Sie die Erwei­te­rung. Die OXT-Datei lässt sich ein­fach per Dop­pel­klick im Büro­pa­ket öff­nen. Oder Sie ver­wen­den „Extras -> Exten­si­on-Mana­ger“.

So nutzen Sie die Makros

Das Makro erzeugt den neu­en Ein­trag „Arbeits­me­nü“ in der Menü­leis­te. Um ein neu­es Doku­ment hin­zu­zu­fü­gen spei­chern Sie die­ses zuerst und kli­cken dann auf „Arbeits­me­nü -> Zum Menü hin­zu­fü­gen“. Der Pfad zum Doku­ment erscheint dann im Menü. Wenn Sie spä­ter die Arbeit an einem Doku­ment fort­set­zen wol­len, kli­cken Sie den zuge­hö­ri­gen Ein­trag im Menü an.

Tipp: Sie kön­nen auch Doku­ment­vor­la­gen in das Menü auf­neh­men. Öff­nen Sie die gewünsch­te Doku­ment­vor­la­ge über „Datei -> Doku­ment­vor­la­ge -> Ver­wal­ten“ zum Bear­bei­ten und fügen Sie die Datei über „Arbeits­me­nü -> Zum Menü hin­zu­fü­gen“ hin­zu.

Dialog
Dia­log zur Ver­wal­tung der häu­fig genutz­ten Doku­men­te.

Datei-Lis­te ver­wal­ten: Per Klick auf „Arbeits­me­nü -> Optio­nen“ erhal­ten Sie Zugriff auf die Lis­te der Ein­trä­ge. Über die Pfeil-Schalt­flä­chen lässt sich die Rei­hen­fol­ge ändern. Um einen Ein­trag zu ent­fer­nen, kli­cken Sie ihn an und dann auf „Löschen“. „Alle Löschen“ ent­fernt alle Ein­trä­ge nach Rück­fra­ge. Über die Schalt­flä­che „Öff­nen“ kön­nen Sie das gera­de mar­kier­te Doku­ment öff­nen und über „Zei­gen“ öff­nen Sie den Ord­ner, in dem das Doku­ment liegt, im Datei-Mana­ger. Die­se Funk­ti­on errei­chen Sie auch direkt über den Menü­punkt „Arbeits­me­nü -> Öff­ne Doku­ment-Ord­ner“. Über die Schalt­flä­che „Spei­chern und schlie­ßen“ über­neh­men Sie Ände­run­gen im Dia­log und been­den ihn. „Abbre­chen“ schließt den Dia­log, ohne die Ände­run­gen zu spei­chern.

Ansichts­op­tio­nen ändern: Nach einem Klick auf „Ein­stel­lun­gen“ kön­nen Sie die Ansicht des Menüs ändern. Vor­ein­ge­stellt ist die Anzei­ge des voll­stän­di­gen Pfa­des im Menü. Bei lan­gen Pfa­den kön­nen die Menü­ein­trä­ge sehr lang wer­den. In die­sem Fall wäh­len Sie die Opti­on „Gekürz­ter Pfad“ und geben hin­ter „Län­ge der Anzei­ge“ die Anzahl der Zei­chen ein, die ein Menü­punkt maxi­mal haben soll. Wenn Sie „Nur Datei­na­me“ wäh­len, zeigt das Menü nur die Datei­na­men. Dann besteht bei gleich­na­mi­gen Doku­men­ten in unter­schied­li­chen Ord­nern jedoch Ver­wechs­lungs­ge­fahr. Die­se Ein­stel­lun­gen betref­fen jedoch nur die Anzei­ge. Die Makros spei­chern immer den kom­plet­ten Pfad zur Datei.

Wenn Sie ein Häk­chen vor „Letz­tes Doku­ment auto­ma­tisch öff­nen“ set­zen, wird das ers­te Doku­ment aus der Lis­te beim Start des Büro­pro­gram­me auto­ma­tisch gela­den. Das funk­tio­niert noch nicht ganz befrie­di­gend. Unter Win­dows star­tet Libre­Of­fice stan­dard­mä­ßig mit dem Start­mo­dul, das die zuletzt ver­wen­de­ten Doku­men­te anzeigt. Das auto­ma­tisch gela­de­ne Doku­ment wird zuerst geöff­net und das Start­mo­dul erst danach. Wenn Sie das Start­mo­dul oder das Doku­ment schlie­ßen, wer­den jeweils bei­de geschos­sen. Das Pro­blem lässt sich umge­hen, indem Sie das Modul Libre­Of­fice-Wri­ter über eine Ver­knüp­fung star­ten. Dann öff­net sich nur ein Fens­ter. Das Doku­ment wird auch auto­ma­tisch geöff­net, wenn Sie ein ande­res Doku­ment öff­nen. Ganz befrie­di­gend ist das nicht. Wahr­schein­lich ist es bes­ser, etwa eine eigen Schalt­flä­che in einer Sym­bol­leis­te zu erstel­len und die­se mit dem Makro „Open­Last­Doc“ zu ver­knüp­fen. Dann genügt ein Klick, um das letz­te Doku­ment zu öff­nen. Sym­bol­leis­ten gibt es aller­dings nicht im Start­cen­ter, wes­halb man auch dafür den Libre­Of­fice-Wri­ter direkt star­ten muss.

Makro individuell konfigurieren

Das Makro erstellt stan­dard­mä­ßig nur Menü-Ein­trä­ge in den Office-Modu­len Wri­te und Calc sowie in der Über­sichts­sei­te. Wenn Sie das Arbeits­me­nü auch in ande­ren Modu­len ver­wen­den wol­len, gehen Sie auf „Extras -> Makros -> Makros ver­wal­ten -> Libre­Of­fice Basic“. Gehen Sie unter „Mei­ne Makros“ auf „lib­Ar­beits­me­nu -> modArb­men“, und kli­cken Sie auf „Bear­bei­ten“. Unter „Func­tion Get­In­ter­faces As Array“ sehen Sie die Defi­ni­ti­on der Office-Modu­le. Wenn Sie bei­spiels­wei­se das Menü auch in Draw („Zeich­nung“) sehen wol­len, ent­fer­nen Sie das Hoch­kom­ma vor

myInterfaces(X)="com.sun.star.drawing.DrawingDocument"

Ändern Sie „myInterfaces(X)“ auf „myInterfaces(3)“ und „Dim myInterfaces(2)“ auf „Dim myInterfaces(3)“. Wenn Sie auch Impress hin­zu­fü­gen möch­ten, ändern Sie die Zei­le

myInterfaces(X)="com.sun.star.presentation.PresentationDocument"

in „myInterfaces(4)“ und erhö­hen den Wert für das Array auf „Dim myInterfaces(4)“.
Außer­dem kön­nen Sie bei Bedarf den Namen der INI-Datei hin­ter „strI­ni­Fi­le­Na­me=“ ändern, in dem das Makro die Menü­ein­trä­ge spei­chert. Eine wei­te­re Anpas­sung kann für Linux erfor­der­lich sein. Da es hier – je nach Dis­tri­bu­ti­on – unter­schied­li­che Datei-Mana­ger zu Ein­satz kom­men, tra­gen Sie des­sen Namen hin­ter „str­Li­nux­Fi­le­Ma­na­ger=“ ein. Für Ubun­tu bei­spiels­wei­se

Const strLinuxFileManager="nautilus"

Und für Linux Mint:

Const strLinuxFileManager="nemo"

Wel­ches Betriebs­sys­tem jeweils zum Ein­satz kommt, ermit­telt das Makro auto­ma­tisch.

Technische Informationen zur Arbeitsweise der Makros

Damit das Arbeits­me­nü beim Start von Libre­Of­fice bezie­hungs­wei­se Open­Of­fice erscheint und dyna­misch gefüllt wird, muss das Unter­pro­gramm „Modul­e­Init()“ auto­ma­tisch gestar­tet wer­den. Die Instal­la­ti­ons-Rou­ti­ne erzeugt dazu einen pas­sen­den Ein­trag, den Sie über „Extras -> Anpas­sen“ auf der Regis­ter­kar­te „Ereig­nis­se“ hin­ter „Pro­gramm­start“ sehen kön­nen. Die Instal­la­ti­ons-Rou­ti­ne berück­sich­tigt, ob hier bereits ein von Ihnen selbst erstell­ter Ein­trag vor­han­den ist. Es fragt gege­be­nen­falls, ob die­ser ersetzt wer­den soll. Wenn Sie hier mit „Nein“ ant­wor­ten, müs­sen Sie selbst „Modul­e­Init()“ in Ihre Auto­start-Makro auf­neh­men. Ent­spre­chend wird auch bei der De-Instal­la­ti­on gefragt, ob der Ein­trag bei „Pro­gramm­start“ unter „Ereig­nis­se“ ent­fernt wer­den soll.

Das Makro spei­chert die Menü-Ein­trä­ge in der Datei Arbeitsmenu.ini. Die­se wird etwa bei Libre­Of­fice unter Win­dows im Ver­zeich­nis „%appdata%\LibreOffice\4\user\config“ erstellt. „Modul­e­Init()“ liest die INI-Datei aus und erstell­te die Menü­ein­trä­ge neu. Das Menü wird nicht per­ma­nent gespei­chert, son­dern immer dyna­misch erzeugt. Das kann sich ein wenig auf die Start­zeit des Office-Pakets aus­wir­ken, vor allem, wenn Sie Menüs für meh­re­re Office-Modu­le erzeu­gen. Auf einem durch­schnitt­lich schnel­len PC soll­te die Ver­zö­ge­rung aber kaum spür­bar sein.

So deinstallieren Sie das Makro

Wenn Sie das Arbeits­me­nü nicht mehr ver­wen­den wol­len, öff­nen Sie erneut die Datei Arbeitsmenu.odt. Kli­cken Sie auf „Arbeits­me­nü de-instal­lie­ren“.

Die Erwei­te­rung lässt sich über „Extras -> Exten­si­on-Mana­ger“ deinstal­lie­ren.

Sie kön­nen die Biblio­thek auch manu­ell ent­fer­nen. Dazu gehen Sie auf „Extras -> Makros -> Makros ver­wal­ten -> Libre­Of­fice Basic“ und kli­cken auf die Schalt­flä­che „Ver­wal­ten“. Gehen Sie auf die Regis­ter­kar­te „Biblio­the­ken“, wäh­len die „lib­Ar­beits­me­nu“ aus, und kli­cken Sie auf „Löschen“. Danach gehen Sie auf „Extras -> Anpas­sen“ und die Regis­ter­kar­te „Ereig­nis­se“. Löschen Sie die Akti­on hin­ter „Pro­gramm­start“.

Makros im Quelltext

REM ******  BASIC  **********
REM Arbeitsmenu Version 2.4 *
REM *************************
Private oDialog as Variant  
Dim oListBox As Variant
Dim ListBoxChanged As Boolean
Dim mySettings(2)
Dim isBusy As Boolean
Dim MyIni
Const strMenuID="vnd.openoffice.org:Arbmenu"
Const strLibName="libArbeitsmenu"
Const strModName="modArbmen"

Const strIniFileName="Arbeitsmenu.ini"
Const strLinuxFileManager="nautilus" ' Ubuntu
'Const strLinuxFileManager="nemo" ' Linux Mint


Sub OpenLastDoc
OpenDoc(1)
End Sub

' get interfaces where menu should be added
' 
Function GetInterfaces  As Array
' increase the value when adding more interfaces
' 2 means 3 values (0, 1, 2)
Dim myInterfaces(2) As Variant 
myInterfaces(0)="com.sun.star.text.TextDocument" 'show menu in Writer
myInterfaces(1)="com.sun.star.sheet.SpreadsheetDocument" 'show menu in Calc
myInterfaces(2)="com.sun.star.frame.StartModule" 'show menu on start page

' more examples
'myInterfaces(3)="com.sun.star.drawing.DrawingDocument" ' show menu in Draw
'myInterfaces(4)="com.sun.star.presentation.PresentationDocument" ' show menu in Impress

GetInterfaces=myInterfaces()
End Function


' create menu and fill with entries
' must be executed on LibreOffice startup (OnStartApp event)
Sub ModuleInit
Dim Doc As Object
Dim myInterfaces()

  If (Not GlobalScope.BasicLibraries.isLibraryLoaded("Tools")) Then
    GlobalScope.BasicLibraries.LoadLibrary("Tools")
  End If


myInterfaces()=GetInterfaces ' interfaces where menu should be placed
' CreateTopLevelMenu("<path>","<interface>")
' AddSubMenu("<path>","<menutext>","<interface>")
 For i = 0 To UBound(myInterfaces)
   If FindMenuByID(strMenuID, myInterfaces(i)) = -1 Then
    CreateTopLevelMenu(strMenuID,"Arbeits~menü",myInterfaces(i) )
    AddSubMenu(strMenuID, "macro:///"+strLibName+"."+strModName+".AddToMenu()","Zum Menü hinzufügen",0,myInterfaces(i) )
    AddSubMenu(strMenuID, "macro:///"+strLibName+"."+strModName+".ArbMenOptions()","Optionen",0,myInterfaces(i))
    'add seperator
    AddSubMenu(strMenuID, "","",1,myInterfaces(i))
    AddSubMenu(strMenuID, "macro:///"+strLibName+"."+strModName+".ShowCurrentDocFolder()","Öffne Dokument-Ordner",0,myInterfaces(i))
    'add seperator
    AddSubMenu(strMenuID, "","",1,myInterfaces(i))    
   End If
next i

Dim myItems (1)
myIni=ConvertFromUrl(getConfigPath+ "/" + strIniFileName) 
'create new ini with defaults
If  Not  checkForFile(myIni) Then
mySettings(0)="3" 'file name
mySettings(1)="80" 'text lenght
mySettings(2)=0 'AutoOpen last document
CreateIniFile(myIni, 0, myItems(), mySettings())
End If
 ' get entries from ini
 For i = 0 To UBound(myInterfaces)
  FillMenuFromIni(myInterfaces(i))
 Next i
 
'AutoOpen (experimental)
AutoOpenDoc=Val(getIniValue(myIni, "Settings", "AutoOpen"))
If AutoOpenDoc=1 Then  OpenDoc(1) 
End Sub

' remove documents from menu
Sub cmdClear_Click
Dim sVar as Integer
sVar=MsgBox("Wollen Sie wirklich alle Einträge löschen?",256 + 32 +1,"Alle Löschen?")
If sVar=1 Then
 ListBoxChanged=True
 ClearListBox
End If
End Sub

' show selected item in dialog
Sub FillLabel
 selItem=oListBox.SelectedItemPos()
 if selItem=-1 Then Exit Sub
 oLabel = oDialog.getControl("Label1")
 oLabel.SetText(oListBox.getItem(selItem))
End Sub


' something was modified in dialog?
Sub DialogModified
ListBoxChanged=True
End Sub


' move entry down
Sub cmDown_Click
Dim nCount As Integer
nCount = oListBox.getItemCount()
If nCount = 0 Then Exit Sub
selItem=oListBox.SelectedItemPos()
If selItem = -1 Then Exit Sub
If selItem=nCount-1 Then Exit Sub
ReDim myList(nCount - 1)

ListBoxChanged=True
 intIDX = selItem

   For i = 0 To nCount - 1
     S = oListBox.getItem(i)
     myList(i) = S
   Next i

strItem1 = myList(intIDX)
strItem0 = myList(intIDX + 1)
myList(intIDX + 1) = strItem1
myList(intIDX) = strItem0
ClearListBox
For i = 0 To nCount -1
 oListBox.addItem (Trim(myList(i)),i)
Next i
oListBox.selectItemPos(intIDX + 1, True)
End Sub

' move entry up
Sub cmUp_Click
Dim intIDX, strItem1, strItem0
nCount = oListBox.getItemCount()
If nCount = 0 Then Exit Sub
selItem=oListBox.SelectedItemPos()
If selItem= 0 Then Exit Sub
Dim myList()
ReDim myList(nCount - 1)
ListBoxChanged = True
intIDX = selItem
For i = 0 To nCount -1
  S = oListBox.getItem(i)
  myList(i) = S
Next i
strItem1 = myList(intIDX)
strItem0 = myList(intIDX - 1)
myList(intIDX - 1) = strItem1
myList(intIDX) = strItem0
ClearListBox
For i = 0 To nCount -1
 oListBox.addItem (Trim(myList(i)),i)
Next i
oListBox.selectItemPos(intIDX - 1, True)
End Sub

' add current document to menu
Sub AddToMenu

'prevent second time call
If isBusy=True Then Exit Sub
isBusy=True

Dim i As Integer
Dim numItems As Integer
Dim myInterfaces()
If GetDocumentURL <> "" Then
 myIni=ConvertFromUrl(getConfigPath+ "/" + strIniFileName) 
 numItems=Val(getIniValue(myIni, "ArbMenu", "ItemsCount"))
 
 Dim myItems(numItems+1)
' read old items from ini
 For i = 1 to numItems
   myItems(i)="Item"+Trim(Str(i)) + "=" + getIniValue(myIni, "ArbMenu", "Item"+Trim(Str(i)))
 Next i
 
' get settings from ini
mySettings(0)=getIniValue(myIni, "Settings", "Option")
mySettings(1)=getIniValue(myIni, "Settings", "NumChar")
mySettings(2)=getIniValue(myIni, "Settings", "AutoOpen")

 
 ' add new entry to menu
 myItems(numItems+1)="Item"+Trim(Str(numItems+1))+"="+GetDocumentURL
 ' write ini file
 CreateIniFile(myIni, numItems+1, myItems(),mySettings())

 ' refresh menu all interfaces
 myInterfaces()=GetInterfaces
 For i = 0 To UBound(myInterfaces)
  FillMenuFromIni(myInterfaces(i))
 Next i
End If 
isBusy=False
End Sub

' show options dialog
Sub ArbMenOptions
Dim nCount As Integer
 DialogLibraries.LoadLibrary(strLibName)
 oDialog = createUnoDialog(DialogLibraries.libArbeitsmenu.dlgArbMen)
 oDialog.Model.Step = 1 ' show first page
 oListBox = oDialog.getControl("ListBox1")
 FillListBoxFromIni ' get menu entries form ini
 ListBoxChanged=False
 oDialog.execute ' show dialog
End Sub

' remove selected item from list
Sub RemoveSelectedItem
ListBoxChanged=True
selItem=oListBox.SelectedItemPos()
If selItem >=0 Then
oListBox.removeItems(selItem,1)
End If 
End Sub

' remove all entries from list
Sub ClearListBox
  Dim nCount As Integer
   nCount = oListBox.getItemCount()
  If nCount >0 Then
   For i = 0 to nCount-1
    oListBox.removeItems(0,1)
   Next i
  End If
End Sub

' get menu entries from ini
Sub FillMenuFromIni (myInterface As String)
Dim numItems As Integer
Dim n As Integer
Dim numMenuItems
Dim myOption As Integer
Dim NumChar As Integer
Dim S As String
' we need the tools library (ConvertFromUrl)
  If (Not GlobalScope.BasicLibraries.isLibraryLoaded("Tools")) Then
    GlobalScope.BasicLibraries.LoadLibrary("Tools")
  End If
' remove menu entries starting at 5
numMenuItems=GetNumMenuEntries(strMenuID, myInterface)
If numMenuItems > 5 Then
RemoveSubMenu(strMenuID, numMenuItems-5, myInterface)
End If


myIni=ConvertFromUrl(getConfigPath+ "/" + strIniFileName) 
numItems=getIniValue(myIni, "ArbMenu", "ItemsCount")

'no entries = exit
If numItems=0 Then Exit Sub

myOption=Val(getIniValue(myIni, "Settings", "Option"))
If myOption <=0 Or myOption >=4 Then myOption=3 ' default 3 full path names

NumChar=Val(getIniValue(myIni, "Settings", "NumChar"))
If NumChar=0 Then NumChar=80 ' default 80 characters

'fill menu from ini
 For n = 1 to numItems
   myDoc=getIniValue(myIni, "ArbMenu", "Item"+Val(n))
Select Case myOption
 '1 filename only
 Case 1
  S=FileNameoutofPath(myDoc)
 '2 short path
 Case 2
  S=LongDirFix(myDoc,NumChar)
 '3 full path
 Case 3
 S=myDoc
End Select
' add new menu entry
AddSubMenu(strMenuID, "macro:///"+strLibName+"."+strModName+".OpenDoc("+Trim(Str(n)) +")",Trim(Str(n) + " " + S),0,myInterface)
Next n
End Sub

' fill dialog listbox from ini
Sub FillListBoxFromIni
ClearListBox
Dim numItems As Integer
Dim n As Integer
Dim myOption As Integer
Dim NumChar As Integer

myIni=ConvertFromUrl(getConfigPath+ "/" + strIniFileName) 
numItems=getIniValue(myIni, "ArbMenu", "ItemsCount")

'settings
myOption=Val(getIniValue(myIni, "Settings", "Option"))
If myOption <=0 Or myOption >=4 Then myOption=3
oCheckbox = oDialog.getControl("OptionButton"+ Trim (Str(myOption)))
oCheckbox.Model.State=1

NumChar=Val(getIniValue(myIni, "Settings", "NumChar"))
If NumChar=0 Then NumChar=80
oTextField=oDialog.getControl("txtLength")
oTextField.Text=Trim(Str(NumChar))

AutoOpenDoc=Val(getIniValue(myIni, "Settings", "AutoOpen"))
oCheckAutoOpen = oDialog.getControl("chkAutoOpen")
oCheckAutoOpen.Model.State=AutoOpenDoc

For n = 0 to numItems-1
  myDoc=getIniValue(myIni, "ArbMenu", "Item"+Val(n+1))
  oListBox.addItem( myDoc, n )
Next n
End Sub

' close dialog
Sub CancelDialog
oDialog.endExecute()
End Sub

' close dialog and save
Sub CloseDialogAndSave

Dim myOption As Integer
Dim NumChar As Integer
Dim S As String

'Nothing has changed, exit
If ListBoxChanged=false Then
oDialog.endExecute()
Exit Sub
End If

Dim n As Integer
Dim myInterfaces ()
myInterfaces()=GetInterfaces
myIni=ConvertFromUrl(getConfigPath+ "/" + strIniFileName) 

'get option settings
For i = 1 to 3
oCheckbox = oDialog.getControl("OptionButton"+ Trim (Str(i)))
If oCheckbox.Model.State=1 Then myOption = i
Next i

oTextField=oDialog.getControl("txtLength")
NumChar=Trim(Val(oTextField.getText()))
If NumChar=0 Then NumChar=80

mySettings(0)=Trim(Str(myOption))
mySettings(1)=Trim(Str(NumChar))
oCheckAutoOpen = oDialog.getControl("chkAutoOpen")
mySettings(2)=oCheckAutoOpen.Model.State

'write ini from ListBox values
numItems=oListBox.getItemCount()
Dim myItems(numItems)
For n = 1 to numItems
myItems(n)="Item" + Trim(Str(n)) + "=" + oListBox.getItem(n-1)
Next n

' save ini file
CreateIniFile(myIni, numItems, myItems(), mySettings())

'remove all menu entries
numItems=getIniValue(myIni, "ArbMenu", "ItemsCount")

For i = 0 To UBound(myInterfaces)
RemoveSubMenu(strMenuID, numItems, myInterfaces(i))
Next i


' refresh menu
 For i = 0 To UBound(myInterfaces)
  FillMenuFromIni(myInterfaces(i))
 Next i

oDialog.endExecute() 'close dialog
End Sub

' dialog: switch step 1 or 2
Sub DialogSettings
If oDialog.Model.Step = 1 Then
 oDialog.Model.Step = 2
 oDialog.Model.cmdSettings.Label="Einträge"
Else
 oDialog.Model.Step = 1
  oDialog.Model.cmdSettings.Label="Einstellungen" 
End If
End Sub

' open doc folder in file manager
Sub OpenFileManager(DocDir)
Dim TheOS
TheOS=OS()
If TheOS="WINDOWS" then
WinDir=Environ("Windir")
Shell(Windir+"\explorer.exe /e,"+DocDir,1) ' Windows
ElseIf TheOS="UNIX" Then
Shell(strLinuxFileManager + " "+ DocDir ,1) ' Linux
ElseIf  TheOS="OSX" Then
Shell("open "+ DocDir ,1) ' OSX
End If
End Sub

' open current docs folder in file manager
Sub ShowCurrentDocFolder
dim oDoc as object
oDoc = ThisComponent
If (Not GlobalScope.BasicLibraries.isLibraryLoaded("Tools")) Then
    GlobalScope.BasicLibraries.LoadLibrary("Tools")
  End If
On error goto ErrH:
If (oDoc.hasLocation) Then ' document saved?
OpenFileManager(DirectoryNameoutofPath(oDoc.getURL(), "/"))
Else
MsgBox("Bitte speichern Sie das Dokument, bevor Sie diese Funktion verwenden.",64,"Dokument ist nicht gespeichert")
End If
Exit Sub
ErrH: ' document has no location
MsgBox("Die Funktion steht hier nicht zur Verfügung.",64,"Fehler")
End Sub

' show selected document folder in file manager
Sub ShowDocFolder
Dim selItem
Dim myDoc

If (Not GlobalScope.BasicLibraries.isLibraryLoaded("Tools")) Then
    GlobalScope.BasicLibraries.LoadLibrary("Tools")
  End If
  
selItem=oListBox.SelectedItemPos()

 If selItem >=0 Then
   myIni=ConvertFromUrl(getConfigPath+ "/" + strIniFileName) 
   myDoc=getIniValue(myIni, "ArbMenu", "Item"+Val(selItem + 1))
     If checkForFile(ConvertToUrl(myDoc))=True Then
       OpenFileManager(DirectoryNameoutofPath(ConvertToUrl(myDoc), "/"))
     Else
      MsgBox("Die Datei " + myDoc +" ist nicht vorhanden" )   
     End If  
 Else
 oLabel = oDialog.getControl("Label1")
 oLabel.SetText("Es ist nichts ausgewählt") ' nothing selected
 End If
End Sub

' Dialog: open document
Sub OpenDocFromDialog
Dim selItem
selItem=oListBox.SelectedItemPos()
 If selItem >=0 Then
  OpenDoc ( selItem + 1 )
  'CancelDialog
  Else
 oLabel = oDialog.getControl("Label1")
 oLabel.SetText("Es ist nichts ausgewählt")
 End If
End Sub

' open document from menu
Sub OpenDoc (index As Integer)
' https://wiki.openoffice.org/wiki/Documentation/DevGuide/OfficeDev/Handling_Documents
Dim args (0) as New com.sun.star.beans.PropertyValue
' optional macro setting
'args(0).Name="MacroExecutionMode"
'args(0).Value=6 'Use configuration to retrieve macro settings. Treat cases when user confirmation required as approved.
' Reference: https://www.openoffice.org/api/docs/common/ref/com/sun/star/document/MacroExecMode.html
'args(0).Name="OpenNewView"
'args(0).Value=true


myIni=ConvertFromUrl(getConfigPath+ "/" + strIniFileName) 
myDoc=getIniValue(myIni, "ArbMenu", "Item"+Val(index))
' file exists?
If checkForFile(ConvertToUrl(myDoc))=True Then ' file exists?
' Reference: https://wiki.openoffice.org/wiki/Documentation/DevGuide/OfficeDev/Handling_Documents
' TheDoc=StarDesktop.loadComponentFromURL(ConvertToUrl(myDoc),"_blank",0,args())
TheDoc=StarDesktop.loadComponentFromURL(ConvertToUrl(myDoc),"_default",0,args())
Else
 MsgBox("Die Datei " + myDoc +" ist nicht vorhanden" )
End If
End Sub

' get document path
Function GetDocumentURL As String
  Dim oDoc
  Dim sDocURL
  oDoc = ThisComponent
  If (Not GlobalScope.BasicLibraries.isLibraryLoaded("Tools")) Then
    GlobalScope.BasicLibraries.LoadLibrary("Tools")
  End If
  On error goto ErrH:
  If (oDoc.hasLocation()) Then
    GetDocumentURL= ConvertFromUrl(oDoc.getURL())
    Else
    MsgBox("Sie müssen das Dokument erst speichern.") ' not saved yet
  End If
Exit Function
ErrH:
MsgBox("Die Funktion steht hier nicht zur Verfügung.",64,"Fehler")  
  End Function

' 
' Get submenus from given menu 'PopupIndex'
'
Function getItemContainer (Byval PopupIndex AS Integer, _
								Settings AS Object) _
								AS Object
	Dim Popup AS Object
	Dim i AS Integer
	
	Popup = Settings.getByIndex (PopupIndex)
	For i = 0 to uBound (Popup)
		If Popup(i).Name = "ItemDescriptorContainer" Then
			getItemContainer = Popup(i).Value
			Exit Function
		End If
	Next
End Function

' test only, not used
Sub CheckMenu
myInterface="com.sun.star.text.TextDocument"
sMenuBar = "private:resource/menubar/menubar"
strMenuID2="vnd.openoffice.org:Arbmenu"
sMyPopupMenuCmdId=strMenuID
oModuleCfgMgrSupplier = createUnoService("com.sun.star.ui.ModuleUIConfigurationManagerSupplier") 
oModuleCfgMgr = oModuleCfgMgrSupplier.getUIConfigurationManager(myInterface)
oMenuBarSettings = oModuleCfgMgr.getSettings( sMenuBar, true )
iPos=FindMenuByID(strMenuID2,myInterface)
oPopupMenu() = oMenuBarSettings.getByIndex( iPos )
oPopupMenuContainer = getItemContainer (iPos, oMenuBarSettings)
nEntries=oPopupMenuContainer.getCount()
oMenuItem()= oPopupMenuContainer.getByIndex(0)
MsgBox("Menüeinträge: " + nEntries + Chr(13) + "Erstes Menü: " + oMenuItem(0).Value)
End Sub

' number of menu entries
Function GetNumMenuEntries (ID As String, Interface As String) As Integer
sMenuBar = "private:resource/menubar/menubar"
oModuleCfgMgrSupplier = createUnoService("com.sun.star.ui.ModuleUIConfigurationManagerSupplier") 
oModuleCfgMgr = oModuleCfgMgrSupplier.getUIConfigurationManager(Interface)
oMenuBarSettings = oModuleCfgMgr.getSettings( sMenuBar, true )
iPos=FindMenuByID(ID,Interface)

 If iPos >= 0 Then
   oPopupMenu() = oMenuBarSettings.getByIndex( iPos )  
  if Not IsEmpty(oPopupMenu) Then
   oPopupMenuContainer = getItemContainer (iPos, oMenuBarSettings)
   GetNumMenuEntries=oPopupMenuContainer.getCount()
  End If
 End If 

End Function


' remove documents from menu
Sub RemoveSubMenu(ID As String, numItems As integer, Interface As String)
sMenuBar = "private:resource/menubar/menubar"
oModuleCfgMgrSupplier = createUnoService("com.sun.star.ui.ModuleUIConfigurationManagerSupplier") 
oModuleCfgMgr = oModuleCfgMgrSupplier.getUIConfigurationManager(Interface)
oMenuBarSettings = oModuleCfgMgr.getSettings( sMenuBar, true )
iPos=FindMenuByID(ID, Interface)
 If iPos >= 0 Then
  oPopupMenu() = oMenuBarSettings.getByIndex( iPos )
  oPopupMenuContainer= getItemContainer (iPos, oMenuBarSettings)

  For i = 1 to numItems
   oPopupMenuContainer.removeByIndex(5)
  Next i

  oModuleCfgMgr.replaceSettings( sMenuBar, oMenuBarSettings )
 End If 
End Sub

' add sub menu
Sub AddSubMenu (ID As String, Action As String, Label As String, iType As Integer, Interface As String)
Dim nSubNumItems As Integer
sMenuBar = "private:resource/menubar/menubar"
oModuleCfgMgrSupplier = createUnoService("com.sun.star.ui.ModuleUIConfigurationManagerSupplier") 
oModuleCfgMgr = oModuleCfgMgrSupplier.getUIConfigurationManager(Interface)
oMenuBarSettings = oModuleCfgMgr.getSettings( sMenuBar, true )
iPos=FindMenuByID(ID, Interface)

 If iPos >= 0 Then
  oPopupMenu() = oMenuBarSettings.getByIndex( iPos )
  nPopupMenuCount = ubound(oPopupMenu())
  oPopupMenuContainer = getItemContainer (iPos, oMenuBarSettings)
  nSubNumItems=oPopupMenuContainer.getCount()
  oMenuItem = CreateMenuItem( Action,Label,iType )
  oPopupMenuContainer.insertByIndex( nSubNumItems, oMenuItem )
  oModuleCfgMgr.replaceSettings( sMenuBar, oMenuBarSettings )
 End If 

End Sub

' create main menu entry
Sub CreateTopLevelMenu(ID As String, Label As String, Interface As String)
sMenuBar = "private:resource/menubar/menubar"
sMyPopupMenuCmdId = "vnd.openoffice.org:" +ID 
oModuleCfgMgrSupplier = createUnoService("com.sun.star.ui.ModuleUIConfigurationManagerSupplier") 
oModuleCfgMgr = oModuleCfgMgrSupplier.getUIConfigurationManager(Interface)
oMenuBarSettings = oModuleCfgMgr.getSettings( sMenuBar, true )
nCount = oMenuBarSettings.getCount()
oPopupMenu = CreatePopupMenu( ID, Label, oMenuBarSettings )
'insert after last item
oMenuBarSettings.insertByIndex( nCount, oPopupMenu )
oModuleCfgMgr.replaceSettings( sMenuBar, oMenuBarSettings )
End Sub

' locate menu by ID
Function FindMenuByID (ID As String, Interface As String) As Integer
FindMenuByID=-1
sMenuBar = "private:resource/menubar/menubar"
oModuleCfgMgrSupplier = createUnoService("com.sun.star.ui.ModuleUIConfigurationManagerSupplier") 
oModuleCfgMgr = oModuleCfgMgrSupplier.getUIConfigurationManager(Interface)
oMenuBarSettings = oModuleCfgMgr.getSettings( sMenuBar, true ) 
nCount = oMenuBarSettings.getCount()
 for i = 0 to nCount-1
   oPopupMenu() = oMenuBarSettings.getByIndex( i )
 If oPopupMenu(0).Value=ID Then FindMenuByID=i
next i
End Function

' create menu
Function CreatePopupMenu( CommandId, Label, Factory ) as Variant
        Dim aPopupMenu(3) as new com.sun.star.beans.PropertyValue

        aPopupMenu(0).Name = "CommandURL"
        aPopupMenu(0).Value = CommandId
        aPopupMenu(1).Name = "Label"
        aPopupMenu(1).Value = Label
        aPopupMenu(2).Name = "Type"
        aPopupMenu(2).Value = 0
        aPopupMenu(3).Name = "ItemDescriptorContainer"
        aPopupMenu(3).Value = Factory.createInstanceWithContext(GetDefaultContext() )
        CreatePopupMenu = aPopupMenu()
End Function

' create menu item
Function CreateMenuItem( Command as String, Label as String, iType As Integer ) as Variant
        Dim aMenuItem(2) as new com.sun.star.beans.PropertyValue
        aMenuItem(0).Name = "CommandURL"
        aMenuItem(0).Value = Command
        aMenuItem(1).Name = "Label"
        aMenuItem(1).Value = Label
        aMenuItem(2).Name = "Type"
        aMenuItem(2).Value = iType
        CreateMenuItem = aMenuItem()
End Function

Rem ------------------------------------------
rem helper
Rem ------------------------------------------
' which operating system?
function OS()as string  
  select case getGUIType
  case 1: OS="WINDOWS"
  case 3: OS="MAC"
  case 4: OS=iif(instr(environ("HOME"),"Users")=0,"UNIX","OSX")
  end select
end function

'LO/OO config path
Function getConfigPath As String
oPathSettings = CreateUnoService( "com.sun.star.util.PathSettings" )
sPathConfig = oPathSettings.UserConfig
if right(sPathConfig,6) <> "config" then
  getConfigPath=""
Else
 getConfigPath=sPathConfig
endif
End Function

' shorten path
Function LongDirFix (TargetString As String, Max As Integer) As String
Dim i, LblLen, StringLen As Integer
Dim TempString As String

        TempString = TargetString
        LblLen = Max

                If Len(TempString) <= LblLen Then
                LongDirFix = TempString
                Exit Function
                End If
 
        LblLen = LblLen - 6

                For i = Len(TempString) - LblLen To Len(TempString)
                If Mid$(TempString, i, 1) = "\" Then Exit For
                Next
 
        'On one line:
        LongDirFix = Left$(TempString, 3) & "..." & Right$(TempString, Len(TempString) - (i - 1))

End Function

' does sUrl (ini file) exist?
Function checkForFile (sUrl As String) As Boolean
   oSimpleFileAccess = createUnoService( "com.sun.star.ucb.SimpleFileAccess" )
    If oSimpleFileAccess.exists(sUrl) = TRUE Then
      checkForFile=True
   Else
      checkForFile=False
   End If
End Function

' CreateIni
Sub CreateIniFile (myIniFile As String, NumItems As Integer, myItems As Array, mySettings As Array)
Dim i As Integer
fileAccessService = createUnoService("com.sun.star.ucb.SimpleFileAccess")
textOutputStream = createUnoService("com.sun.star.io.TextOutputStream")
'now open the file..
outputStream = fileAccessService.openFileWrite(myIniFile)
outputStream.truncate()
textOutputStream.setOutputStream(outputStream)

textOutputStream.writeString("[Settings]"  +Chr(13) +Chr(10))
textOutputStream.writeString("Option=" + mySettings(0)+Chr(13) +Chr(10))
textOutputStream.writeString("NumChar=" + mySettings(1)+Chr(13) +Chr(10))
textOutputStream.writeString("AutoOpen=" + mySettings(2)+Chr(13) +Chr(10))


textOutputStream.writeString("[ArbMenu]"  +Chr(13) +Chr(10))
'numItems=0
textOutputStream.writeString("ItemsCount=" + Trim(Str(NumItems))+Chr(13) +Chr(10))

If numItems=0 Then ' no items, exit
textOutputStream.writeString(Chr(13) +Chr(10))
textOutputStream.closeOutput()
Exit Sub
End If

For i = 1 to UBound(myItems)
textOutputStream.writeString(myItems(i)+Chr(13) +Chr(10))
Next i

textOutputStream.writeString(Chr(13) +Chr(10))
'and don't forget to close it..
textOutputStream.closeOutput()
End Sub

' get value from ini file
Function getIniValue(sIniPath As String, sIniNode As String, sIniKey As String)
   
   oUcb = createUnoService("com.sun.star.ucb.SimpleFileAccess")
   iKeyLength = len(sIniKey)
   
   If oUcb.Exists(sIniPath) Then
   
      oInputStream = createUnoService("com.sun.star.io.TextInputStream")
      oFile = oUcb.OpenFileReadWrite(sIniPath)
      oInputStream.SetInputStream(oFile.GetInputStream)

      'find node
      Do While Not oInputStream.IsEOF
         sLine = oInputStream.ReadLine
         If sLine = "[" & sIniNode & "]" Then
            sLine = oInputStream.ReadLine
            Exit Do 'going out here and start the next loop, searching the key
         End If
      Loop
      
      'find key
      Do While ((Not (Left(sLine, 1) = "[")) AND (Not oInputStream.IsEOF))
         If left(sLine, iKeyLength) = sIniKey Then
            sValue = mid(sLine,iKeyLength + 2)
            Exit Do ' going out, no need for further searching
         End If
         sLine = oInputStream.Readline
      Loop

      oInputStream.CloseInput()
   Else
      msgbox("ini-file:" & sIniPath & " nicht gefunden.")
   End If

   getIniValue = sValue
   
End Function

[amazon_auto_links id="323980"]


Schlagwörter:


Kommentare

5 Antworten zu „LibreOffice und OpenOffice: Schnellstartmenü für häufig genutzte Dokumente“

  1. Avatar von Michael Bauch
    Michael Bauch

    Hal­lo,
    eine ganz tol­le Erwei­te­rung – und vor allem völ­lig umsonst (außer ein paar Dan­kes­wor­te). Herz­li­chen Dank dem Autor (Thors­ten Egge­ling) für das, was ich schon lan­ge in Libre­Of­fice gesucht habe. Bis vor zwei Jah­ren war ich bei Excel (ich spei­che­re heu­te noch im .xls bzw. .xlsx-For­mat), aber die stän­di­gen Pro­ble­me und Updates haben mich doch ziem­lich genervt, so dass ich auf LO umge­stie­gen bin. Und ich habe es nicht bereut.
    Eini­ge Makros aus Excel funk­tio­nier­ten nicht mehr, ich hat­te mir da auch ein Arbeits­me­nü zusam­men­ge­bas­telt, das war ähn­lich. Aller­dings muss­te ich damals die Datei­ein­trä­ge manu­ell ändern im Makro­skript. Mit der Ini-Datei ist dies bedeu­tend ein­fa­cher und kom­for­ta­bler. Da ich sehr häu­fig mit ver­schie­de­nen Datei­en arbei­te (bin Wiki­pe­dia-Autor) hat mir das Arbeits­me­nü-Makro die Suche in den Wie­der­vor­la­ge-Datei­en (zuletzt ver­wen­de­te Doku­men­te) viel Suche­rei abge­nom­men und so dan­ke ich noch­mals.
    PS. Wo kann ich mehr über die Arbeit des Autors erfah­ren.

    Freund­li­che Mai­grü­ße von der säch­sisch-thü­rin­gi­schen Gren­ze
    M. Bauch

  2. Für mich ist die Erwei­te­rung „Arbeits­me­nü“ eine der wirk­lich sinn­vol­len, da sehr zeit­spa­ren­den Erwei­te­run­gen, die es für Libre­Of­fice (bzw. OO) gibt. Ein­fa­che Instal­la­ti­on, durch­dach­te Ein­bin­dung und Hand­ha­bung. Obwohl ich die Erwei­te­rung schon eini­ge zeit nut­ze ist mir erst vor kur­zem die Ein­stel­lungs-Opti­on zum auto­ma­ti­schen Öff­nen des „letz­ten Doku­men­tes“ auf­ge­fal­len. Auch sehr sinn­voll, wenn man, aus wel­chen Grün­den auch immer, LO häu­fig neu star­ten muss.
    2 Din­ge sind mir aber noch auf­ge­fal­len:
    ➽ In Impress wird der Menü­punkt „Arbeits­me­nü“ gar nicht ange­zeigt, es wäre schön, wenn das auch gin­ge
    ➽ Im Wri­ter wer­den sowohl Calc-Datei­en ange­zeigt aber auch die vom Wri­ter (und umge­kehrt). Viel­leicht wäre es sinn­voll, dass immer die rele­van­ten Datei­en (nach Datei­typ) ange­zeigt wer­den.

    1. Wobei die Erwei­te­rung seit eini­ger Zeit eher obso­let gewor­den ist. Man kann in Lib­re Office jetzt auch „Zuletzt ver­wen­de­te Doku­men­te“ anpin­nen (im Start­mo­dul) und die ver­blei­ben dann in der Lis­te.
      Mit „Letz­tes Doku­ment auto­ma­tisch öff­nen“ bin ich nicht ganz glück­lich. Die Neben­ef­fek­te sind im Arti­kel beschrie­ben. Es geht aber nicht anders, soweit ich sehe.
      Die Erwei­te­rung lässt sich auch in ande­ren Modu­len nut­zen. Dazu müs­sen Sie das Makro anpas­sen, wie unter „Makro indi­vi­du­ell kon­fi­gu­rie­ren“ beschrie­ben.
      Ja. Es wer­den Ein­trä­ge von Wri­ter und Calc gespei­chert und in allen Modu­len ange­zeigt. Das fin­de ich sinn­voll, denn wenn man gera­de regel­mä­ßig mit einer Wri­ter- und Calc-Datei arbei­tet, will man viel­leicht bei­de schnell im Zugriff haben, ohne erst das zuge­hö­ri­ge Modul zu öff­nen.
      Das könn­te man aber ändern und die Ein­trä­ge pro Modul spei­chern bezie­hungs­wei­se anzei­gen, was man dann aber even­tu­ell kon­fi­gu­rier­bar machen soll­te. Ich über­le­ge mir das ein­mal… wenn die Zeit dafür da ist;-)

  3. Avatar von Frank Volberg
    Frank Volberg

    Hal­lo, nach der Instal­la­ti­on habe ich ein Pro­blem mit dem Tool. Instal­liert ist Libre­Of­fice 6.1.5.2(64bit), Java 8 201.
    Beim Start von Libre­Of­fice kommt eine Feh­ler­mel­dung im Makro­e­di­tor: BASIC-Lauf­zeit­feh­ler, Objekt­va­ria­ble nicht belegt.
    Im Edi­tor wird die Zei­le 506 ange­zeigt: GetNumMenuEntries=oPopupMenuContainer.getCount().

    Das Tool läßt sich nicht mehr deinstal­lie­ren, der Menü­ein­trag bleibt bestehen, und auch nicht mehr kor­rekt instal­lie­ren, die Feh­ler­mel­dung bleibt hart­nä­ckig bestehen.
    Fra­ge: Was kann ich tun?
    Mit bes­ten Grü­ßen
    Frank Vol­berg

    1. Es kann sein, dass es bei neue­ren Lib­re-Office-Ver­sio­nen zu Pro­ble­men kommt. Das wer­de ich bei Gele­gen­heit durch ein Update behe­ben.
      Wenn die Deinstal­la­ti­on nicht klappt, bit­te auf „Extras -> Anpas­sen“ und dann auf die Regis­ter­kar­te „Ereig­nis­se“ gehen. Hin­ter „Spei­chern in:“ bit­te „Libre­Of­fice“ wäh­len. Dann bei „Pro­gramm­start“ den Auto­start des Makros löschen.
      Auf der Regis­ter­kar­te „Menüs“ wäh­len Sie auf der rech­ten Sei­te „Arbeits­me­nü“ und löschen es über die „x“-Schaltfläche.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Partner-Links

[amazon_auto_links id="323997"]

Neueste Kommentare

  1. Die digitale Abhängigkeit von Geräten wie dem Smartphone ist nicht mehr von der Hand zu weisen. Man soll am besten…

  2. Vielen herzlichen Dank für die Anleitung. Sie war äußerst hilfreich bei der Einrichtung meiner Fritzbox. Ich kann sie nur bestens…


Die Website durchsuchen