[Gelöst] Makros, Eingabemaske

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Benutzeravatar
balu
********
Beiträge: 3810
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Makros, Eingabemaske

Beitrag von balu »

Hallo Jörg,
habe lediglich den Tabellenindex in den Makros geändert, weil ja nun eine Tabelle mehr in der Mappe ist.
Ich sehe absolut keinen grund darin das Du in deinem Makro mit Tabellenindex arbeitest. Also warum gehst Du nicht endlich mal daher und gibst in deinem Makro den Tabellen einen gescheiten Namen? Dann kann es dir auch vollkommen wurscht sein an der wievielten Stelle sich ein Tabellenblatt befindet. Und nein, ich sage jetzt nicht wo Du dazu was nachlesen kannst.

Und noch was

Code: Alles auswählen

sub neuerKunde
rem ---------------------------------------------------------------------
 odoc = ThisComponent
        osheet = odoc.sheets(1)
        orange = osheet.getCellRangeByName("A28:J28")
        orangeAddress = orange.getrangeaddress
        odata()= orange.getdataarray
        oZielSheet = oDoc.sheets(0)
        c = oZielSheet.getCellRangeByName("A1:A5000").queryEmptyCells
        oZielCell = c(0).getcellbyposition(0,0)
        oZielCellAddress = oZielCell.getcelladdress
        X1=oZielCellAddress.column
        Y1=oZielCellAddress.row
        X2=oZielCellAddress.column+(orangeAddress.EndColumn-orangeAddress.StartColumn)
        Y2=oZielCellAddress.Row+(orangeAddress.EndRow-orangeAddress.StartRow)
        oZielrange=oZielSheet.getCellRangeByPosition(X1,Y1,X2,Y2)
        oZielrange.setdataarray(odata())

   oCalc = thisComponent
    oSheet = oCalc.sheets(1)
     oCellRange = osheet.getCellRangeByName("E9:E17")  
     ocellRange.clearContents(com.sun.star.sheet.CellFlags.VALUE)
rem ----------------------------------------------------------------------
 oCalc = thisComponent
    oSheet = oCalc.sheets(1)
     oCellRange = osheet.getCellRangeByName("E9:E17")  
          ocellRange.clearContents(com.sun.star.sheet.CellFlags.STRING) 
  rem-------------------------------------------------------------------------     
 oCalc = thisComponent
    oSheet = oCalc.sheets(1)
     oCellRange = osheet.getCellRangeByName("E9:E17")  
        ocellRange.clearContents(com.sun.star.sheet.CellFlags.DATETIME)


end sub
Innerhalb einer Sub reicht es wenn man einmal eine Variable defeniert. Also anstatt jedesmal oCalc neu zu defenieren, wie hier zu sehen, machst Du das ein einziges mal, und gut ist! Das gleiche gilt auch für die Variable oCellRange.

Und gleich mal einen praktischen Anwender-Tipp dazu.

Code: Alles auswählen

	oSheet = thisComponent
	oHauptBlatt = oSheet.sheets(0)
	oNebenBalatt = oSheet.sheets(1)
In diesem Beispiel habe ich den Tabellenindex verwendet. Wenn Du dich aber damit befasst wie das mit den Tabellennamen ist, dann dürfte es ja wohl kein Problem sein das gezeigte dementsprechend umzuschreiben.


Auch wenn es sich hart anhört, so muss ich das folgende doch mal sagen.
Wer sich bei der Makroprogrammierung nicht mit den Basisabläufen befasst, der kommt immer wieder ins Stolpern und macht sich das Leben nur unnötig schwer. Es bringt absolut gar nichts, wenn man sich hier und da etwas abkopiert und irgendwie sich das so zu recht biegt damit es im eigenen Makro funktioniert ohne die Basisabläufe zu verstehen. Und unter Basisabläufe verstehe ich Beispielsweise folgendes:
- Lesen und schreiben einer Zelle
- Tabellenblätter einen Namen zuordnen
- Zellen einen Namen zuordnen
- Variablen deklaration und defenition (Stichwort Dim)
Der letzt genannte ist besonders wichtig, da sehr viel davon abhängen wird. Und darüber wird man immer wieder Stolpern, Garantiert.

Aber auch in deiner neuen Version ist es so, dass nach Anlegen eines Neukunden die SVerweisformeln zum Aufruf bestehender Kundendaten überschrieben werden.
Dann stelle doch die Formeln wieder her. Das kennst Du doch schon, weil Du das ja schon gemacht hast. Oder überseh ich hier etwas?



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Jörg
*****
Beiträge: 392
Registriert: Mo, 21.10.2013 12:05

Re: Makros, Eingabemaske

Beitrag von Jörg »

Hallo clag,
sorry, dass ich mein Anliegen nicht ausfführlicher beschrieben habe.
Wills mal versuchen.
1. Die Schaltfläche "Neuen Kunden anlegen" fügt zunächst die Formel

Code: Alles auswählen

sub neu_Kunde_anlegen
  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")

 dim args1(0) as new com.sun.star.beans.PropertyValue
    args1(0).Name = "ToPoint"
    args1(0).Value = "$E$8"

    dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
    dim args2(0) as new com.sun.star.beans.PropertyValue
    args2(0).Name = "StringName"        
    args2(0).Value = "=(KGRÖSSTE(Patientendatei.A2:B5000;1))+1"
    
    dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args2())
end sub    
ein, um in Zelle E8 eine neue Kundennummer zu generieren.
Dann wollte ich in die Zellen die neuen Stammdaten händisch eingeben. Und dabei werden die Formeln, die die vorhandenenStammdaten aus Tab.1 holen, überschrieben.
2. Die Schaltfläche "Neuen Kunden speichern" kopiert und fügt in die Tab. 1 ein.

Code: Alles auswählen

sub neuerKunde
antwort = msgbox("Daten speichern?",36,"Neuer Patient")
if antwort = 7 Then
		 exit sub
end if		
rem define variables
      rem ---------------------------------------------------------------------
     odoc = ThisComponent
            osheet = odoc.sheets(1)
            orange = osheet.getCellRangeByName("A28:J28")
            orangeAddress = orange.getrangeaddress
            odata()= orange.getdataarray
            oZielSheet = oDoc.sheets(0)
            c = oZielSheet.getCellRangeByName("A1:A5000").queryEmptyCells
            oZielCell = c(0).getcellbyposition(0,0)
            oZielCellAddress = oZielCell.getcelladdress
            X1=oZielCellAddress.column
            Y1=oZielCellAddress.row
            X2=oZielCellAddress.column+(orangeAddress.EndColumn-orangeAddress.StartColumn)
            Y2=oZielCellAddress.Row+(orangeAddress.EndRow-orangeAddress.StartRow)
            oZielrange=oZielSheet.getCellRangeByPosition(X1,Y1,X2,Y2)
            oZielrange.setdataarray(odata())

       oCalc = thisComponent
        oSheet = oCalc.sheets(1)
         oCellRange = osheet.getCellRangeByName("E9:E17") 
         ocellRange.clearContents(com.sun.star.sheet.CellFlags.VALUE)
    rem ----------------------------------------------------------------------
     oCalc = thisComponent
        oSheet = oCalc.sheets(1)
         oCellRange = osheet.getCellRangeByName("E9:E17") 
              ocellRange.clearContents(com.sun.star.sheet.CellFlags.STRING)
      rem-------------------------------------------------------------------------     
     oCalc = thisComponent
        oSheet = oCalc.sheets(1)
         oCellRange = osheet.getCellRangeByName("E9:E17") 
            ocellRange.clearContents(com.sun.star.sheet.CellFlags.DATETIME)
  
end sub
Deinem Makro "showColumnF hatte ich schon den Code für das Einfügen der Patientennummer aus "Tab.3 Zelle C10 " hinzugefügt. Klappt auch. Siehe

Code: Alles auswählen

sub showColumnF
    myDoc = thisComponent
    mySheet = myDoc.sheets(12)

    mycell = mysheet.getCellrangebyName("E8")
    mycell.Formula = "='Eingabemaske Abr_Rechnung'.C10"
     dim document   as object
    dim dispatcher as object
    rem ----------------------------------------------------------------------
    rem get access to the document
 
       myDoc = thisComponent
       mySheet = myDoc.sheets(12)
       myView = myDoc.CurrentController

       for i=0 to 8
          mysheet.getCellByPosition(5,8+i).string =""
       next

       oSpalte = mySheet.getcolumns().getByIndex(5)
       oSpalte.isVisible = true
       mycell =  mysheet.getCellByPosition(5,8)
       myView.Select(mycell)

       oForm = mySheet.drawpage.forms.getbyindex(0)
       oControl = oForm.getByName("Schaltfläche 1")
       oControl.enablevisible = false
       oControl = oForm.getByName("Schaltfläche 2")
       oControl.enablevisible = false
       oControl = oForm.getByName("Schaltfläche 4")
       oControl.enablevisible = false
       oControl = oForm.getByName("Schaltfläche 7")
       oControl.enablevisible = false
       oControl = oForm.getByName("Schaltfläche 5")
       oControl.enablevisible = true
       oControl = oForm.getByName("Schaltfläche 6")
       oControl.enablevisible = true
    
end sub
Die Codes enthalten schon die neuen Indexangaben.
Das heißt, dass ich in diesen Code noch das wiederherstellen der überschriebenen Formeln einbauen muß.
Wird schon klappen. Wenn nicht, meld ich mich.
Also keine Panik.
Sobald ich meine aktuelle Datei anonymisiert habe, stelle ich sie auch rein. Sind ja über 4000 Datensätze.
Also bis dann und vielen Dank.
Gruß Jörg
Gruß Jörg

Win 10 Pro AOO 4.1.15
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Makros, Eingabemaske

Beitrag von clag »

hallo Jörg
Jörg hat geschrieben:Sind ja über 4000 Datensätze.


ich sprach nur von der original Funktionalität
5 anonyme Datensätze sollten völlig ausreichen
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Jörg
*****
Beiträge: 392
Registriert: Mo, 21.10.2013 12:05

Re: Makros, Eingabemaske

Beitrag von Jörg »

Hallo clag, nachstehnd die Aktuelle Mappe.
Die von Dir erstellte Maske ist die letzte Tabelle.
Sie funktionirt.
Die blauen Schaltflächen sind nicht belegt.
Tabelle 2 ist die ursprüngliche Maske zur Neukundenerfassung.
Hoffe, dass es so o.k. ist.

Gruß Jörg
Gruß Jörg

Win 10 Pro AOO 4.1.15
Jörg
*****
Beiträge: 392
Registriert: Mo, 21.10.2013 12:05

Re: Makros, Eingabemaske

Beitrag von Jörg »

sorry, hier die Datei. hm zu groß!
So jetzt.
Dateianhänge
Patientendatei.TB.ods
(242.61 KiB) 146-mal heruntergeladen
Gruß Jörg

Win 10 Pro AOO 4.1.15
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Makros, Eingabemaske

Beitrag von clag »

hallo Jörg,

ich kann jetzt ehrlich nicht mehr folgen

warum hast du das jetzt so zerfleddert?

deine Tabelle "Eingabemaske Kunden" hat welche Aufgabe
einen Kundendatensatz neu anlegen mit den Daten aus der Eingabemaske ?

Warum nimmst du dort nicht auch die Änderungen vor??
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Jörg
*****
Beiträge: 392
Registriert: Mo, 21.10.2013 12:05

Re: Makros, Eingabemaske

Beitrag von Jörg »

Hallo clag,
Ja so ist es. Aber ich dachte es wäre beides in einer Maske möglich, also das Erfassen neuer Daten UND das Ändern vorhandener Daten.
In Zelle E9:E17 stehen Deine Sverweis-Formeln, die bei der Eingabe eines NEUEN Kunden überschrieben werden würden.
Darum hab ich beide Masken erstmal getrennt, damit ich weiterarbeiten kann.
Die Formeln füge ich mit Makro wieder ein. Bin bloß noch nicht dazu gekommen.
Alles chic.
Gruß
Jörg
Gruß Jörg

Win 10 Pro AOO 4.1.15
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Makros, Eingabemaske

Beitrag von clag »

hallo Jörg,

sag mal weist du überhaupt was du als Beispieldatei hochgeladen hast?
Jörg hat geschrieben:In Zelle E9:E17 stehen Deine Sverweis-Formeln,
Diese Formeln sind Bestandteil DEINER Beispieldatei und nicht mein Werk.
Ich habe diese Formel als gegeben angesehen und unangetastet gelassen.

Langsam bekomme ich das Gefühl du willst mich auf den Arm nehmen.
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Jörg
*****
Beiträge: 392
Registriert: Mo, 21.10.2013 12:05

Re: Makros, Eingabemaske

Beitrag von Jörg »

:oops: :oops: :oops: :oops: :oops:
Mensch, das war nicht meine Absicht.
Tut mir jetzt wirklich leid. Kein Wunder, warum wir aneinander vorbeigeredet haben. Ick seh bei meinem eigenen Kram nich durch. Muß ne Auszeit nehmen.
Du hast vollkommen recht. is alles da.
Hoffe, Du kannst mir nochmal verzeihen und nimmst meine Entschuldigung an un dich kann weiter auf Deine Hilfe rechnen ?

Gruß Jörg
Gruß Jörg

Win 10 Pro AOO 4.1.15
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Makros, Eingabemaske

Beitrag von clag »

Hallo Jörg,


wie und wodurch die Formeln nun dahin kommen und ob sie benötigt werden ist durch deine Antwort nicht geklärt,
diese Frage ist aber von dir zu klären um weiterhelfen zu können.
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Benutzeravatar
balu
********
Beiträge: 3810
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Makros, Eingabemaske

Beitrag von balu »

Hallo Jörg,

also noch mal, befasse dich mit den Basisabläufen, wie ich es dir nicht nur einmal gesagt hatte. Noch mal zur Verdeutlichung
1.
Zugriff auf eine Zelle, verschiedene Adressierungsmöglichkeiten

2.
Lesen und schreiben einer Zelle
dies als momentanes minimum.

Wenn Du das schon mal vom Grundprinzip her verstanden hast, kommt das nächste dran
3.
Tabellenblätter einen Namen zuordnen


Dann machst Du mal deinen Code zumindest ein wenig übersichtlicher, denn man hat es extrem schwer festzustellenn wo eine SUB aufhört, und wo die nächste SUB anfängt. Und wenn Du meinst das ich mich nicht so anstellen soll, so vertust Du dich ganz gewaltig! Denn Du wirst selber über kurz oder lang ganz schön ins straucheln kommen, wenn Du nicht gut sichtbar erkennen kannst wo eine SUB endet und anfängt. Und das kann durchaus ungewollt böse konsequenzen nach sich ziehen, wenn Du aus versehen im eifer des Gefechts in einer Sub was änderst obwohl Du dort nichts ändern wolltest.

Wenn ich das hier beispielsweise sehe

Code: Alles auswählen

End Sub
sub kmt
[...]
end sub
sub pa
und das ist jetzt ein wenig geschrumpft, dann ist da nix mit übersicht. Die Zeile mit Sub ... schließt direkt an die Zeile mit end Sub an.

Es gibt verschiedene Methoden wie man zumindest ein wenig übersicht schaffen kann, ich arbeite gerne nach diesem "Muster".

Code: Alles auswählen

end sub
'
'##############################################################################################
'
sub kmt
tu was
end sub
'
'##############################################################################################
'
sub pa
just do it
end sub
So ein Lattenzaun fällt im Code beim hoch oder runter scrollen schon auf, und man sieht dann doch recht schnell: "A-HA!! Die Sub geht von da bis da."
Das einfache Anführungszeichen ' hat die gleiche Bedeutung wie Rem.

Räume also bitte deinen Code auf diese Art und Weise schon mal Optisch ein wenig auf. Und dann änderst Du deinen Code wie ich hier schon mal vorgeschlagen hatte.


Und dann nehmen wir uns diesem Thema an.
Habe aber inzwischen den Code zur Wiederherstellung der Formeln in Dein Makro "showColumnF" eingebaut.
Jetzt ist es so wie es sein muß. Allerdings ist dieser Code sehr lang. Muß mal gucken, wie ich das anders mache.
Wenn Du die eingangs genannten Punkte 1 und 2 verstehst, dann zeige ich dir eine einfache Möglichkeit wie Du auf das wiederherstellen der Formeln verzichten kannst, da Du sie dann nicht mehr brauchst. Das ist eine Methode die wohl auch ein Anfänger begreifen kann :D .



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Jörg
*****
Beiträge: 392
Registriert: Mo, 21.10.2013 12:05

Re: Makros, Eingabemaske

Beitrag von Jörg »

hallo balu und clag,
hier mal der "verbesserte" Code zum Wiederhestellen der Formeln zum Aufruf der bestehenden Kundendaten.

Code: Alles auswählen

'
' ##########################################################################################################
'
sub showColumnF
     
myDoc = thisComponent
mySheet = myDoc.sheets(1)       
myView = myDoc.CurrentController    
mycell = mysheet.getCellRangebyName("$E$8")
mycell.formulalocal="='Eingabemaske Abr_Rechnung'.C10"
mycell = mysheet.getCellRangebyName("$E$9")
mycell.formulalocal= "=WENN(ZÄHLENWENN(Patientendatei.$A$2:$A$5000;$E$8);SVERWEIS($E$8;Patientendatei.$A$2:$J$5000;VERGLEICH($C9;Patientendatei.$A$1:$J$1;0);0);"""")"
mycell = mysheet.getCellRangebyName("$E$10")
mycell.formulalocal= "=WENN(ZÄHLENWENN(Patientendatei.$A$2:$A$5000;$E$8);SVERWEIS($E$8;Patientendatei.$A$2:$J$5000;VERGLEICH($C10;Patientendatei.$A$1:$J$1;0);0);"""")"
mycell = mysheet.getCellRangebyName("$E$11")
mycell.formulalocal= "=WENN(ZÄHLENWENN(Patientendatei.$A$2:$A$5000;$E$8);SVERWEIS($E$8;Patientendatei.$A$2:$J$5000;VERGLEICH($C11;Patientendatei.$A$1:$J$1;0);0);"""")"
mycell = mysheet.getCellRangebyName("$E$12")
mycell.formulalocal= "=WENN(ZÄHLENWENN(Patientendatei.$A$2:$A$5000;$E$8);SVERWEIS($E$8;Patientendatei.$A$2:$J$5000;VERGLEICH($C12;Patientendatei.$A$1:$J$1;0);0);"""")"
mycell = mysheet.getCellRangebyName("$E$13")
mycell.formulalocal= "=WENN(ZÄHLENWENN(Patientendatei.$A$2:$A$5000;$E$8);SVERWEIS($E$8;Patientendatei.$A$2:$J$5000;VERGLEICH($C13;Patientendatei.$A$1:$J$1;0);0);"""")"
mycell = mysheet.getCellRangebyName("$E$14")
mycell.formulalocal= "=WENN(ZÄHLENWENN(Patientendatei.$A$2:$A$5000;$E$8);SVERWEIS($E$8;Patientendatei.$A$2:$J$5000;VERGLEICH($C14;Patientendatei.$A$1:$J$1;0);0);"""")"
mycell = mysheet.getCellRangebyName("$E$15")
mycell.formulalocal= "=WENN(ZÄHLENWENN(Patientendatei.$A$2:$A$5000;$E$8);SVERWEIS($E$8;Patientendatei.$A$2:$J$5000;VERGLEICH($C15;Patientendatei.$A$1:$J$1;0);0);"""")" 
mycell = mysheet.getCellRangebyName("$E$16")
mycell.formulalocal= "=WENN(ZÄHLENWENN(Patientendatei.$A$2:$A$5000;$E$8);SVERWEIS($E$8;Patientendatei.$A$2:$J$5000;VERGLEICH($C16;Patientendatei.$A$1:$J$1;0);0);"""")"
mycell = mysheet.getCellRangebyName("$E$17")
mycell.formulalocal= "=WENN(ZÄHLENWENN(Patientendatei.$A$2:$A$5000;$E$8);SVERWEIS($E$8;Patientendatei.$A$2:$J$5000;VERGLEICH($C17;Patientendatei.$A$1:$J$1;0);0);"""")"          
         
          
           for i=0 to 8
              mysheet.getCellByPosition(5,8+i).string =""
           next

           oSpalte = mySheet.getcolumns().getByIndex(5)
           oSpalte.isVisible = true
           mycell =  mysheet.getCellByPosition(5,8)
           myView.Select(mycell)

           oForm = mySheet.drawpage.forms.getbyindex(0)
           oControl = oForm.getByName("Schaltfläche 1")
           oControl.enablevisible = false
           oControl = oForm.getByName("Schaltfläche 2")
           oControl.enablevisible = false
           oControl = oForm.getByName("Schaltfläche 4")
           oControl.enablevisible = false
           oControl = oForm.getByName("Schaltfläche 7")
           oControl.enablevisible = false
           oControl = oForm.getByName("Schaltfläche 5")
           oControl.enablevisible = true
           oControl = oForm.getByName("Schaltfläche 6")
           oControl.enablevisible = true

end sub
'
' ############################################################################
'
Zum Vergleich der Alte Code:

Code: Alles auswählen

    sub showColumnF
        myDoc = thisComponent
        mySheet = myDoc.sheets(1)

        mycell = mysheet.getCellrangebyName("E8")
        mycell.Formula = "='Eingabemaske Abr_Rechnung'.C10"
         dim document   as object
        dim dispatcher as object
        rem ----------------------------------------------------------------------
             rem define variables

        rem ----------------------------------------------------------------------
        rem get access to the document
        document   = ThisComponent.CurrentController.Frame
        dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

    rem--------------------------------------------------------------------------   
      dim args2(0) as new com.sun.star.beans.PropertyValue
        args2(0).Name = "ToPoint"
        args2(0).Value = "$E$9"

        dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())

    rem ----------------------------------------------------------------------
       dim args3(0) as new com.sun.star.beans.PropertyValue
       args3(0).Name = "StringName"   
       args3(0).Value = "=WENN(ISTNV(SVERWEIS($E$8;Patientendatei.$A$2:$J$5000;VERGLEICH($C9;Patientendatei.$A$1:$J$1;0);0));"""";SVERWEIS($E$8;Patientendatei.$A$2:$J$5000;VERGLEICH($C9;Patientendatei.$A$1:$J$1;0);0))"

       dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args3())
    rem--------------------------------------------------------------------------------------------
     dim args4(0) as new com.sun.star.beans.PropertyValue
        args4(0).Name = "ToPoint"
        args4(0).Value = "$E$10"

        dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args4())

    rem ----------------------------------------------------------------------
       dim args5(0) as new com.sun.star.beans.PropertyValue
       args5(0).Name = "StringName"   
       args5(0).Value = "=WENN(ISTNV(SVERWEIS($E$8;Patientendatei.$A$2:$J$5000;VERGLEICH($C10;Patientendatei.$A$1:$J$1;0);0));"""";SVERWEIS($E$8;Patientendatei.$A$2:$J$5000;VERGLEICH($C10;Patientendatei.$A$1:$J$1;0);0))"

       dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args5())
    rem-------------------------------------------------------------------------------
     dim args6(0) as new com.sun.star.beans.PropertyValue
        args6(0).Name = "ToPoint"
        args6(0).Value = "$E$11"

        dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args6())

    rem ----------------------------------------------------------------------
       dim args7(0) as new com.sun.star.beans.PropertyValue
       args7(0).Name = "StringName"   
       args7(0).Value = "=WENN(ISTNV(SVERWEIS($E$8;Patientendatei.$A$2:$J$5000;VERGLEICH($C11;Patientendatei.$A$1:$J$1;0);0));"""";SVERWEIS($E$8;Patientendatei.$A$2:$J$5000;VERGLEICH($C11;Patientendatei.$A$1:$J$1;0);0))"

       dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args7())
    rem------------------------------------------------------------------------------
     dim args8(0) as new com.sun.star.beans.PropertyValue
        args8(0).Name = "ToPoint"
        args8(0).Value = "$E$12"

        dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args8())

    rem ----------------------------------------------------------------------
       dim args9(0) as new com.sun.star.beans.PropertyValue
       args9(0).Name = "StringName"   
       args9(0).Value = "=WENN(ISTNV(SVERWEIS($E$8;Patientendatei.$A$2:$J$5000;VERGLEICH($C12;Patientendatei.$A$1:$J$1;0);0));"""";SVERWEIS($E$8;Patientendatei.$A$2:$J$5000;VERGLEICH($C12;Patientendatei.$A$1:$J$1;0);0))"
     
       dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args9())
    rem-------------------------------------------------------------------------
     dim args10(0) as new com.sun.star.beans.PropertyValue
        args10(0).Name = "ToPoint"
        args10(0).Value = "$E$13"

        dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args10())

    rem ----------------------------------------------------------------------
       dim args11(0) as new com.sun.star.beans.PropertyValue
       args11(0).Name = "StringName"   
       args11(0).Value = "=WENN(ISTNV(SVERWEIS($E$8;Patientendatei.$A$2:$J$5000;VERGLEICH($C13;Patientendatei.$A$1:$J$1;0);0));"""";SVERWEIS($E$8;Patientendatei.$A$2:$J$5000;VERGLEICH($C13;Patientendatei.$A$1:$J$1;0);0))"

       dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args11())
    rem-------------------------------------------------------------------------
     dim args12(0) as new com.sun.star.beans.PropertyValue
        args12(0).Name = "ToPoint"
        args12(0).Value = "$E$14"

        dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args12())

    rem ----------------------------------------------------------------------
       dim args13(0) as new com.sun.star.beans.PropertyValue
       args13(0).Name = "StringName"   
       args13(0).Value = "=$M$14"

       dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args13())
    rem-------------------------------------------------------------------------
     dim args14(0) as new com.sun.star.beans.PropertyValue
        args14(0).Name = "ToPoint"
        args14(0).Value = "$E$15"

        dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args14())

    rem ----------------------------------------------------------------------
       dim args15(0) as new com.sun.star.beans.PropertyValue
       args15(0).Name = "StringName"   
       args15(0).Value = "=WENN(ISTNV(SVERWEIS($E$8;Patientendatei.$A$2:$J$5000;VERGLEICH($C15;Patientendatei.$A$1:$J$1;0);0));"""";SVERWEIS($E$8;Patientendatei.$A$2:$J$5000;VERGLEICH($C15;Patientendatei.$A$1:$J$1;0);0))"

       dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args15())
    rem-------------------------------------------------------------------------
     dim args16(0) as new com.sun.star.beans.PropertyValue
        args16(0).Name = "ToPoint"
        args16(0).Value = "$E$16"

        dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args16())

    rem ----------------------------------------------------------------------
       dim args17(0) as new com.sun.star.beans.PropertyValue
       args17(0).Name = "StringName"   
       args17(0).Value = "=WENN(ISTNV(SVERWEIS($E$8;Patientendatei.$A$2:$J$5000;VERGLEICH($C16;Patientendatei.$A$1:$J$1;0);0));"""";SVERWEIS($E$8;Patientendatei.$A$2:$J$5000;VERGLEICH($C16;Patientendatei.$A$1:$J$1;0);0))"

       dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args17())
    rem-------------------------------------------------------------------------
     dim args18(0) as new com.sun.star.beans.PropertyValue
        args18(0).Name = "ToPoint"
        args18(0).Value = "$E$17"

        dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args18())

    rem ----------------------------------------------------------------------
       dim args19(0) as new com.sun.star.beans.PropertyValue
       args19(0).Name = "StringName"   
       args19(0).Value = "=WENN(ISTNV(SVERWEIS($E$8;Patientendatei.$A$2:$J$5000;VERGLEICH($C17;Patientendatei.$A$1:$J$1;0);0));"""";SVERWEIS($E$8;Patientendatei.$A$2:$J$5000;VERGLEICH($C17;Patientendatei.$A$1:$J$1;0);0))"

       dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args19())
        rem get access to the document
     
           myDoc = thisComponent
           mySheet = myDoc.sheets(1)
           myView = myDoc.CurrentController

           for i=0 to 8
              mysheet.getCellByPosition(5,8+i).string =""
           next

           oSpalte = mySheet.getcolumns().getByIndex(5)
           oSpalte.isVisible = true
           mycell =  mysheet.getCellByPosition(5,8)
           myView.Select(mycell)

           oForm = mySheet.drawpage.forms.getbyindex(0)
           oControl = oForm.getByName("Schaltfläche 1")
           oControl.enablevisible = false
           oControl = oForm.getByName("Schaltfläche 2")
           oControl.enablevisible = false
           oControl = oForm.getByName("Schaltfläche 4")
           oControl.enablevisible = false
           oControl = oForm.getByName("Schaltfläche 7")
           oControl.enablevisible = false
           oControl = oForm.getByName("Schaltfläche 5")
           oControl.enablevisible = true
           oControl = oForm.getByName("Schaltfläche 6")
           oControl.enablevisible = true
       
    end sub
Nochmal vielen Dank für Eure Hilfe und Anregungen
Gruß Jörg
Gruß Jörg

Win 10 Pro AOO 4.1.15
Jörg
*****
Beiträge: 392
Registriert: Mo, 21.10.2013 12:05

Gelöst: Makros, Eingabemaske

Beitrag von Jörg »

Hallo,
Habe jetzt alles so, wie ich es benötige.
Habe versucht, beim Überarbeiten der Makros die Hinweise und Anregungen umzusetzen.
Beim Anlegen neuer Kunden werden die Datensätze in Tabelle 1 automatisch nach Nach- und Vornamen sortiert. Ebenso in Tabelle 4.

Ich bedanke mich bei allen, Die mir hier direkt geholfen haben und bei denen, auf deren Beiträge ich zurückgreifen konnte.

Wünsche allen einen guten Rutsch.

Gruß Jörg
Dateianhänge
Eingabe_fuer_ooo.ods
(232.39 KiB) 194-mal heruntergeladen
Gruß Jörg

Win 10 Pro AOO 4.1.15
Antworten