[Gelöst] Makros, Eingabemaske

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

Moderator: Moderatoren

Jörg
*****
Beiträge: 401
Registriert: Mo, 21.10.2013 12:05

Re: Makros, Eingabemaske

Beitrag von Jörg »

Hallo, hab da noch ein Problem und kann nichts finden.
Meine Frage bezieht sich auf die Tabelle Eingabe Abr._Rechnung Siehe Dateianhang.
Hab dort 7 Schaltflächen (6x ...) die sollen alle das gleiche Makro, mit jeweils anderem Namen, kriegen.
Den Quellbereich passe ich entsprechend an.
Vielen Dank.
Jörg

Code: Alles auswählen

sub manther
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 ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$I$54:$J$54"

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

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$F$16"

Bedingung: Wenn F16 <> "", dann F17,
                 Wenn F17 <> "", dann F18,
                 Wenn F18 <> "", dann F19,
                 Wenn F19 <> "", dann F20

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

rem ----------------------------------------------------------------------
dim args6(5) as new com.sun.star.beans.PropertyValue
args6(0).Name = "Flags"
args6(0).Value = "SV"
args6(1).Name = "FormulaCommand"
args6(1).Value = 0
args6(2).Name = "SkipEmptyCells"
args6(2).Value = false
args6(3).Name = "Transpose"
args6(3).Value = false
args6(4).Name = "AsLink"
args6(4).Value = false
args6(5).Name = "MoveMode"
args6(5).Value = 4

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


end sub
Dateianhänge
Eingabe.TB.ods
(216.79 KiB) 441-mal heruntergeladen
Gruß Jörg

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

Re: Makros, Eingabemaske

Beitrag von Jörg »

Ho, Ho,
habs selbst hinbekommen.
Geholfen hat mir ein Beitrag hier im Forum: "Makro zum Finden einer Leer Zelle"
Vielen Dank. :D :D :D :D :D
Jörg

Code: Alles auswählen

sub manther
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 ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$I$54:$J$54"

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

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

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

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

Sheet = ThisComponent.CurrentController.ActiveSheet   
c = Sheet.getCellRangeByName("F15:F20").queryEmptyCells
getFirstEmptyRowInColumn = Split(c.RowDescriptions(0)," ")
oRow = getFirstEmptyRowInColumn(1)
mycell =  Sheet.getCellRangeByName("F" & oRow)   
myView = thisComponent.CurrentController
myView.Select(mycell)

    rem ----------------------------------------------------------------------
dim args4(5) as new com.sun.star.beans.PropertyValue
args4(0).Name = "Flags"
args4(0).Value = "SV"
args4(1).Name = "FormulaCommand"
args4(1).Value = 0
args4(2).Name = "SkipEmptyCells"
args4(2).Value = false
args4(3).Name = "Transpose"
args4(3).Value = false
args4(4).Name = "AsLink"
args4(4).Value = false
args4(5).Name = "MoveMode"
args4(5).Value = 4

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

end sub
Gruß Jörg

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

Re: Makros, Eingabemaske

Beitrag von Jörg »

Hallo Gemeinde,
hab mal wieder ein kleines Problem.
Mit Hilfe des Makros möchte ich Formeln wiederherstellen.
Für die Zelle "D16" klappt das prima.
Für die Zelle "I16" nicht. Möglicher weise liegt es daran-> ;""; ???
Möchte aber die Formel nicht Ohne ISTNV.
Gruß
Jörg

Code: Alles auswählen

sub Formel_wiederherst
    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 ----------------------------------------------------------------------
    dim args3(0) as new com.sun.star.beans.PropertyValue
    args3(0).Name = "ToPoint"
    args3(0).Value = "$D$16"

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

    rem ----------------------------------------------------------------------
    dim args4(0) as new com.sun.star.beans.PropertyValue
    args4(0).Name = "StringName"
    args4(0).Value = "=SVERWEIS(C8;Hilfstabelle.C1:M$50;VERGLEICH(D15;Hilfstabelle.C1:M$1;0);0)"

    dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args4())
rem---------------------------------------------------------------------------------------------------------------------
    document   = ThisComponent.CurrentController.Frame
    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

     rem ----------------------------------------------------------------------
    dim args5(0) as new com.sun.star.beans.PropertyValue
    args5(0).Name = "ToPoint"
    args5(0).Value = "$I$16"

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

    rem ----------------------------------------------------------------------
    dim args6(0) as new com.sun.star.beans.PropertyValue
    args6(0).Name = "StringName"        
    args6(0).Value =  "=WENN(ISTNV(SVERWEIS($D$16;Preisliste.$A$4:$S$12;VERGLEICH(F16;Preisliste.$A$4:$T$4;0);0));"";(SVERWEIS($D$16;Preisliste.$A$4:$T$12;VERGLEICH(F16;Preisliste.$A$4:$T$4;0);0)))"
  
    dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args6()
end sub
Gruß Jörg

Win 10 Pro AOO 4.1.15
Karolus
********
Beiträge: 7524
Registriert: Mo, 02.01.2006 19:48

Re: Makros, Eingabemaske

Beitrag von Karolus »

Hallo
""""""

Karolus
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Jörg
*****
Beiträge: 401
Registriert: Mo, 21.10.2013 12:05

Re: Makros, Eingabemaske

Beitrag von Jörg »

Danke Karolus,
funktioniert. Hatte den richtigen Riecher, wäre aber nie auf die Lösung gekommen.
Das Ganze möchte ich für 9 weitere Zellen (= 9 unterschiedliche Formeln) tun.
Läßt sich die Prozedur irgendwie verkürzen oder muß so wie im Code jeden Schritt so wiederholen?
Gruß
Jörg
Gruß Jörg

Win 10 Pro AOO 4.1.15
Karolus
********
Beiträge: 7524
Registriert: Mo, 02.01.2006 19:48

Re: Makros, Eingabemaske

Beitrag von Karolus »

Hallo
Die Quotes aussenrum bleiben so, alle Quotes im Formeltext müssen allein oder als Gruppe in extra Quotes eingefasst werden.

Karolus
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Jörg
*****
Beiträge: 401
Registriert: Mo, 21.10.2013 12:05

Re: Makros, Eingabemaske

Beitrag von Jörg »

Formeln wieder herstellen

Moin,
versteh ich leider nicht. :?
Was sind Quotes ?
Ich stell mal den Code rein.

Code: Alles auswählen

sub Formel_wiederherst
    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 ----------------------------------------------------------------------
    dim args3(0) as new com.sun.star.beans.PropertyValue
    args3(0).Name = "ToPoint"
    args3(0).Value = "$D$16"

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

rem ----------------------------------------------------------------------
    dim args4(0) as new com.sun.star.beans.PropertyValue
    args4(0).Name = "StringName"
    args4(0).Value = "=SVERWEIS(C8;Hilfstabelle.C1:M$50;VERGLEICH(D15;Hilfstabelle.C1:M$1;0);0)"

    dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args4())
rem---------------------------------------------------------------------------------------------------------------------

    dim args5(0) as new com.sun.star.beans.PropertyValue
    args5(0).Name = "ToPoint"
    args5(0).Value = "$I$16"

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

rem ----------------------------------------------------------------------
    dim args6(0) as new com.sun.star.beans.PropertyValue
    args6(0).Name = "StringName"        
    args6(0).Value = "=WENN(ISTNV(SVERWEIS($D$16;Preisliste.$A$4:$S$12;VERGLEICH(F16;Preisliste.$A$4:$T$4;0);0));"""";(SVERWEIS($D$16;Preisliste.$A$4:$T$12;VERGLEICH(F16;Preisliste.$A$4:$T$4;0);0)))"
  
    dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args6())
rem---------------------------------------------------------------------------------------

    dim args7(0) as new com.sun.star.beans.PropertyValue
    args7(0).Name = "ToPoint"
    args7(0).Value = "$I$17"

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

rem ----------------------------------------------------------------------
    dim args8(0) as new com.sun.star.beans.PropertyValue
    args8(0).Name = "StringName"        
    args8(0).Value = "=WENN(ISTNV(SVERWEIS($D$16;Preisliste.$A$4:$S$12;VERGLEICH(F17;Preisliste.$A$4:$T$4;0);0));"""";(SVERWEIS($D$16;Preisliste.$A$4:$T$12;VERGLEICH(F17;Preisliste.$A$4:$T$4;0);0)))"
  
    dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args8())
rem----------------------------------------------------------------------------------------------
    
    dim args9(0) as new com.sun.star.beans.PropertyValue
    args9(0).Name = "ToPoint"
    args9(0).Value = "$I$18"

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

rem ----------------------------------------------------------------------
    dim args10(0) as new com.sun.star.beans.PropertyValue
    args10(0).Name = "StringName"        
    args10(0).Value = "=WENN(ISTNV(SVERWEIS($D$16;Preisliste.$A$4:$S$12;VERGLEICH(F18;Preisliste.$A$4:$T$4;0);0));"""";(SVERWEIS($D$16;Preisliste.$A$4:$T$12;VERGLEICH(F18;Preisliste.$A$4:$T$4;0);0)))"
  
    dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args10())
rem-----------------------------------------------------------------------------
    
    dim args11(0) as new com.sun.star.beans.PropertyValue
    args11(0).Name = "ToPoint"
    args11(0).Value = "$I$19"

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

rem ----------------------------------------------------------------------
    dim args12(0) as new com.sun.star.beans.PropertyValue
    args12(0).Name = "StringName"        
    args12(0).Value = "=WENN(ISTNV(SVERWEIS($D$16;Preisliste.$A$4:$S$12;VERGLEICH(F19;Preisliste.$A$4:$T$4;0);0));"""";(SVERWEIS($D$16;Preisliste.$A$4:$T$12;VERGLEICH(F19;Preisliste.$A$4:$T$4;0);0)))"
  
    dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args12())
rem-----------------------------------------------------------------------
    
    dim args13(0) as new com.sun.star.beans.PropertyValue
    args13(0).Name = "ToPoint"
    args13(0).Value = "$I$20"

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

rem ----------------------------------------------------------------------
    dim args14(0) as new com.sun.star.beans.PropertyValue
    args14(0).Name = "StringName"        
    args14(0).Value = "=WENN(ISTNV(SVERWEIS($D$16;Preisliste.$A$4:$S$12;VERGLEICH(F20;Preisliste.$A$4:$T$4;0);0));"""";(SVERWEIS($D$16;Preisliste.$A$4:$T$12;VERGLEICH(F20;Preisliste.$A$4:$T$4;0);0)))"
  
    dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args14())
rem------------------------------------------------------------------------
    
    dim args15(0) as new com.sun.star.beans.PropertyValue
    args15(0).Name = "ToPoint"
    args15(0).Value = "$J$16"

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

    rem ----------------------------------------------------------------------
    dim args16(0) as new com.sun.star.beans.PropertyValue
    args16(0).Name = "StringName"        
    args16(0).Value = "=WENN($B$12=""X"";WENN(ISTNV(SVERWEIS($D$16;Preisliste.$A$15:Preisliste.$T$23;VERGLEICH(F16;Preisliste.$A$15:Preisliste.$T$15;0);0));"""";(SVERWEIS($D$16;Preisliste.$A$15:Preisliste.$T$23;VERGLEICH(F16;Preisliste.$A$15:Preisliste.$T$15;0);0))))*G16"
  
    dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args16())
rem------------------------------------------------------------------------------------------------
 
    dim args17(0) as new com.sun.star.beans.PropertyValue
    args17(0).Name = "ToPoint"
    args17(0).Value = "$J$17"

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

rem ----------------------------------------------------------------------
    dim args18(0) as new com.sun.star.beans.PropertyValue
    args18(0).Name = "StringName"        
    args18(0).Value = "=WENN($B$12=""X"";WENN(ISTNV(SVERWEIS($D$16;Preisliste.$A$15:Preisliste.$T$23;VERGLEICH(F17;Preisliste.$A$15:Preisliste.$T$15;0);0));"""";(SVERWEIS($D$16;Preisliste.$A$15:Preisliste.$T$23;VERGLEICH(F17;Preisliste.$A$15:Preisliste.$T$15;0);0))))*G17" 
      
    dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args18())
 rem--------------------------------------------------------------------------------
    
    dim args19(0) as new com.sun.star.beans.PropertyValue
    args19(0).Name = "ToPoint"
    args19(0).Value = "$J$18"

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

    rem ----------------------------------------------------------------------
    dim args20(0) as new com.sun.star.beans.PropertyValue
    args20(0).Name = "StringName"        
    args20(0).Value =  "=WENN($B$12=""X"";WENN(ISTNV(SVERWEIS($D$16;Preisliste.$A$15:Preisliste.$T$23;VERGLEICH(F18;Preisliste.$A$15:Preisliste.$T$15;0);0));"""";(SVERWEIS($D$16;Preisliste.$A$15:Preisliste.$T$23;VERGLEICH(F18;Preisliste.$A$15:Preisliste.$T$15;0);0))))*G18"
  
    dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args20())
rem-------------------------------------------------------------------------

    dim args21(0) as new com.sun.star.beans.PropertyValue
    args21(0).Name = "ToPoint"
    args21(0).Value = "$J$19"

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

    rem ----------------------------------------------------------------------
    dim args22(0) as new com.sun.star.beans.PropertyValue
    args22(0).Name = "StringName"        
    args22(0).Value =  "=WENN($B$12=""X"";WENN(ISTNV(SVERWEIS($D$16;Preisliste.$A$15:Preisliste.$T$23;VERGLEICH(F19;Preisliste.$A$15:Preisliste.$T$15;0);0));"""";(SVERWEIS($D$16;Preisliste.$A$15:Preisliste.$T$23;VERGLEICH(F19;Preisliste.$A$15:Preisliste.$T$15;0);0))))*G19"
  
    dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args22())
rem--------------------------------------------------------------------------

    dim args23(0) as new com.sun.star.beans.PropertyValue
    args23(0).Name = "ToPoint"
    args23(0).Value = "$J$20"

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

rem ----------------------------------------------------------------------
    dim args24(0) as new com.sun.star.beans.PropertyValue
    args24(0).Name = "StringName"        
    args24(0).Value =  "=WENN($B$12=""X"";WENN(ISTNV(SVERWEIS($D$16;Preisliste.$A$15:Preisliste.$T$23;VERGLEICH(F20;Preisliste.$A$15:Preisliste.$T$15;0);0));"""";(SVERWEIS($D$16;Preisliste.$A$15:Preisliste.$T$23;VERGLEICH(F20;Preisliste.$A$15:Preisliste.$T$15;0);0))))*G20"
  
    dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args24())       
  
end sub

Gruß
Jörg
Gruß Jörg

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

Re: Makros, Eingabemaske

Beitrag von Jörg »

Moin,
Hab mal wieder eine kleine Bitte.
=> Tabelle Eingabemaske Kunden
Die Schaltfläche "Kunden anzeigen" gibt mir einen schon vorhandenen Kunden zurück.
Bei diesem will ich die Stammdaten wie Adresse o.ä. ändern und diese Änderungen mit der Schaltfläche "Änderungen speichern" speichern, so daß praktisch die alten Zellinhalte überschrieben werden.
Na ja und dazu bräuchte ich ein kleines Makro. Bitte.
Gruß und schönes WE
Jörg
Eingabe.TB.ods
(191.79 KiB) 133-mal heruntergeladen
Gruß Jörg

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

Re: Makros, Eingabemaske

Beitrag von Jörg »

Hallo,

Wollte gern fragen, ob mir jemand in Bezug auf den letzten Beitrag vom 15.02. weiterhelfen könnte.
Danke schon mal. :D

Gruß Jörg
Gruß Jörg

Win 10 Pro AOO 4.1.15
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Makros, Eingabemaske

Beitrag von balu »

Hallo Jörg,
Möchte aber die Formel nicht Ohne ISTNV.
Da muss ich dich ernsthaft Fragen: Warum? :roll:

Code: Alles auswählen

=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))
Diese deine Formel ausm Tabellenblatt *Eingabemaske Kunden*, macht dir das Leben nur unnötig schwer.
Und willst Du auch wissen warum?
[...]
Nun gut, ich sags dir.
Weil Du damit Calc jedesmal extrem viel Rechenleistung abverlangst. Denn die Rückgabe-SVERWEIS benutzt Du auch als Such-SVERWEIS, was dir zum verhängniss wird.
Es läuft, aber etwas ruckelig. D.h. die Wechsel zwischen den Tabellenblättern sind "erkennbar". Ließe sich das optimieren?
Und dazu trägt deine Formel mit bei. Ich weiß nicht um wieviel sich das bemerkbar macht, aber mit einer angepassten Formel erleichterst Du dir das Leben da die Formel übersichtlicher wird, und Calc muss sich nicht so quälen.

Ich habe irgendwie das Gefühl das dir mal gar nicht so wirkllich bewusst ist wie SVERWEIS arbeitet. Und deshalb mal wieder diesbezüglich ein kleiner Crash-Kurs von mir. :mrgreen:

SVERWEIS hat 4 Parameter, die Du ja auch alle ordentlich belegt hast. Manche schenken sich gerne den 4. Parameter und wundern sich dann warum sie nicht das gewünschte Ergebnis bekommen. Das aber nur so am Rande.

Der 1. Parameter ist der Suchbegriff, der im 2. Parameter, der Datenmatrix in der 1. Spalte der Datenmatrix, gesucht wird.
Lass das mal auf dich einen kurzen moment einwirken.
[...]
Wenn SVERWEIS den Suchbegriff in der ersten Spalte der Datenmatrix gefunden hat, geht es weiter mit dem 3. Parameter, der die Spalte der Datenmatrix angibt aus dem ein Wert oder ähnliches zurückgegeben werden soll. So weit klar und verständlich. Oder etwa nicht!?

Was aber passiert, wenn der Suchbegriff in der ersten Spalte der Datenmatrix nicht gefunden wird?
[...]
Ganz einfach!
Es kommt zur Fehlermeldung.
Und diese fängst Du mit ISTNV ab.
Du setzt also nicht nur die Rückgabe-SVERWEIS als Such-SVERWEIS ein, nein (!) Du packst diese noch zusätzlich in eine weitere Funktion [ISTNV()] ein. Das ist schon kompliziert genug, und da muss was gegen unternommen werden. Und da gibts auch eine ganz einfache Lösung, die sich wahrlich schon mehrfach bewährt hat. Und diese Lösung heißt ZÄHLENWENN.

Ich zeige dir das mal an der oben zitierten Formel wie das dann aussieht.

Code: Alles auswählen

=WENN(ZÄHLENWENN(Patientendatei.$A$2:$A$500;$E$8);SVERWEIS($E$8;Patientendatei.$A$2:$J$5000;VERGLEICH($C9;Patientendatei.$A$1:$J$1;0);0));"")
Mehr braucht es nicht.
Schau dir die Formel mal ganz genau in Ruhe an.

Und wie arbeitet ZÄHLENWENN?
Ganz einfach!
Es wird in einer Spalte (oder einer Zeile) nach einem Begriff gesucht. Und wenn er gefunden wurde, gibt ZÄHLENWENN eine 1 zurück. Sollte der Begriff aber mehrfach vorhanden sein, dann wird die Anzahl der übereinstimmungen zurückgegeben, z.B. 3. Wir können ja wohl davon ausgehen das es keine doppelten oder mehrfachen Patientennummern gibt, oder!?

Da aber der Wert 1 von der ZÄHLENWENN in der WENN(...) auch als Wahrheitswert WAHR (oder Logisch 1) interpretiert wird, geht es mit dem DANN-Teil der Formel weiter, also mit der SVERWEIS.

Und jetzt überleg noch mal was ich anfangs zu der SVERWEIS bezüglich suchen gesagt habe. Dann müsstest Du wohl den Sinn der Formelumstellung verstehen.


Die Schaltfläche "Kunden anzeigen" gibt mir einen schon vorhandenen Kunden zurück.
Bei diesem will ich die Stammdaten wie Adresse o.ä. ändern und diese Änderungen mit der Schaltfläche "Änderungen speichern" speichern, so daß praktisch die alten Zellinhalte überschrieben werden.
Na ja und dazu bräuchte ich ein kleines Makro. Bitte.
Tja, und spätestens ab hier heißt es für dich "Programmieren lernen, und nich einfach alles aufzeichnen, weil man eben nicht alles aufzeichnen kann!"
Du kennst ja schon Dannenhöfer, also schau doch da mal rein. Ich habe auch schon für dich die ersten wichtigen Themen rausgesucht.

7.1.1 Wie bekomme ich Zugriff zu einer Zelle?
7.1.4 Wie kann man den Inhalt von Zellen löschen?
7.1.10 Wie kann man Werte einer Zelle lesen und schreiben?1

Und natürlich die übergeordnete Seite: 7.1 Zellen

Und wenn Du das schon mal verstanden und in einer Beispieldatei umgesetzt hast, unterhalten wir uns weiter über das Thema "For ... next". Das kann auch noch zur Optimierung beitragen, da dadurch einige Abläufe verbessert (vereinfacht) werden können.



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: 401
Registriert: Mo, 21.10.2013 12:05

Re: Makros, Eingabemaske

Beitrag von Jörg »

Hallo Balu,
vielen Dank für Deine ausführliche Antwort.
In der Tat sehe ich wirklich nicht "voll" durch.
Deine Formel

Code: Alles auswählen

    =WENN(ZÄHLENWENN(Patientendatei.$A$2:$A$500;$E$8);SVERWEIS($E$8;Patientendatei.$A$2:$J$5000;VERGLEICH($C9;Patientendatei.$A$1:$J$1;0);0));"")
habe ich übernommen, mußte aber die 2. Klammer nach der 2. ;0 entfernen. Calc hatte Fehler in der Klammerung moniert.
Klappt einwandfrei.
Werd auch mal schauen, wo ich noch die Formel einsetzen kann( Eingabemaske Abr._Rechnung).
Die ISTNV Funtion hatte ich eingebaut, weil ich #NV in den Zellen vermeiden wollte. Mit ZÄHLENWENN dürfte das ja nicht passieren, wenn ich Dich richtig verstanden habe.
"Es läuft, aber etwas ruckelig. D.h. die Wechsel zwischen den Tabellenblättern sind "erkennbar". Ließe sich das optimieren?
Diese Frage bezog sich auf ein aufgezeichnetes Makro "Kopieren/Einfügen". Das "ruckeln" entsteht möglicherweise durch den Schritt "jump to table".

Zu Deinem letzten Hinweis:
Hab´s befürchtet. Nun also Dannenhöfer.
Mal sehen ob ich klar komme.
Bis dahin nochmal vielen Dank für Deine Mühe.

Gruß Jörg
Gruß Jörg

Win 10 Pro AOO 4.1.15
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Makros, Eingabemaske

Beitrag von balu »

Hallo Jörg,
vielen Dank für Deine ausführliche Antwort.
Gerne. :)

mußte aber die 2. Klammer nach der 2. ;0 entfernen. Calc hatte Fehler in der Klammerung moniert.
Sorry, Fehler meinerseits, da nicht aufgepasst. Aber gut das Du es selber regeln konntest.

Jörg hat geschrieben:
"Es läuft, aber etwas ruckelig. D.h. die Wechsel zwischen den Tabellenblättern sind "erkennbar". Ließe sich das optimieren?
Diese Frage bezog sich auf ein aufgezeichnetes Makro "Kopieren/Einfügen". Das "ruckeln" entsteht möglicherweise durch den Schritt "jump to table".
Es greft immer eins ins andere. Da sprech ich aus eigener Erfahrung. Als ich vor ein paar Jahren mich intensiver mit der Makroprogrammierung befassen musste, wohl nicht mit dem Makrorecorder sondern gleich richtig, hatte ich aus Angst und Gewohnheit sehr vieles noch mit Formeln erledigt. Da kam es auch teilweise zu unschönen "Aussetzern" oder "Rucklern", aber als ich mir ein Herz fasste und alles per Makro erledigte, wurd es wahrlich bedeutend besser.

In der Tat sehe ich wirklich nicht "voll" durch.
Macht doch nix, dazu ist doch ein Forum da um neues zu lernen und zu erfahren.

Die ISTNV Funtion hatte ich eingebaut, weil ich #NV in den Zellen vermeiden wollte.
Ist verständlich. Und ich hätte es auch nicht anders gemacht. Nur manchmal braucht man einen kleinen Schups in die richtige Richtung um zu verstehen das es auch anders geht. Und glaub mir, ich weiß auch noch längst nicht alles, egal ob bei Formeln, oder in der Programmierung.

Hab´s befürchtet. Nun also Dannenhöfer.
Nur keine Panik! Nimm dir Zeit und übe erstmal mit ganz einfachen kleinen Dingen, damit Du ein Gefühl dafür kriegst. Das wird schon :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: 401
Registriert: Mo, 21.10.2013 12:05

Re: Makros, Eingabemaske

Beitrag von Jörg »

Hallo an alle Helfer,

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
Dieser Code funktioniert zum Einfügen eines neuen Kunden prima. Vielen Dank auch an F3K Total und balu.
Für die Schaltfläche "Änderungen speichern" in Tabelle "Eingabemaske Kunden" müßte ich zuätzlich zum o.g. Code entweder die ganze Zeile des alten Datensatzes löschen (Dann fügt der Code den neuen Datensatz am Ende der Spalte ein) oder nur die Inhalte der Betreffenden Zeile löschen(dann findet der Code die nächste leere Zelle in Spalte A).
Dieser Code

Code: Alles auswählen

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)
erfordert aber die genaue Angabe des Zellbereiches.
Daher müßte das Makro wohl zuerst die entsprechende Zeile/Zelle finden.
Hab bei Dannenhöfer und im Makrokochbuch nachgesehen, hab aber nicht gefunden, wie ich klarmache, das eben Zelle "E8" aus Tab.2 zum Suchen in Tab.1
verwendet werden soll.
hänge mal die Datei dran.
Gruß
Jörg
Dateianhänge
Eingabe.TB.ods
(189.93 KiB) 85-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,

habe die mal ein "Kundendaten änderung" Button eingebaut der so hoffe ich deinem Wunsch nahe kommt
Du klickst den Button, eine ändern Maske öffnet sich, die zu ändernden Daten eintragen, dann ok und schon fertig.

Zu deinem Daten Bestand kann ich nur empfehlen alles als Text zu speichern
weder ID, Postleitzahlen oder KundenNr sind Zahlen sondern Zeichenfolgen in dem numerische Zeichen verwendet werden also "TEXT"

Das gleiche solltest du auch für die Geburtstagsangabe so sehen!
Denn wenn es Zahlen sind braucht man zB nur mal die Datumseinstellungen von Calc ändern und schon haben alle Kunden ein neues Geburtsdatum.

so hier mein Vorschlag wie man in deinem "Fall" Kundendaten komfortabel ändern könnte.
Eingabe.TB+.ods
(189.13 KiB) 86-mal heruntergeladen
viel Spaß
LG
clag

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

Re: Makros, Eingabemaske

Beitrag von Jörg »

Hallo clag,
schön mal wieder von Dir zu hören.
Tolle Sache. Hab soviel gegoogelt usw.
Allerdings würd ich gern, daß sich das Makro "showcolumnF" die Kundennr. aus Tab. 3 holt . Ginge das???

Könnte die Nummer natürlich auch manuell eingeben. Aber weil´s so schön ist :D

Deine Anregung zur Formatierung werd ich umsetzen.
Hoffe, dass es keine Auswirkungen auf meine writervorlagen hat, da ich die Tabellen als Datenquelle nutze.

Danke Dir nochmal.
Gruß Jörg

Win 10 Pro AOO 4.1.15
Antworten