Formeln mittels Array einfügen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Formeln mittels Array einfügen

Re: Formeln mittels Array einfügen

von Jörg » Mi, 05.10.2016 16:22

Hallo Karolus,
hast eigentlich recht :)
Der ursprüngliche Code stammt noch aus den Anfängen. Hatte ich damals so gebraucht bzw. nicht besser überblickt.
Die zu kopierenden Inhalte kommen aus Tabelle 3(Index), Quellbereiche: D8:I8,C10:F10.

Wie dem auch sei.
???? Habs schon mal probiert. .....o.E. :(
Da es aber so ja geht, würd mich trotzdem freuen.

Re: Formeln mittels Array einfügen

von Karolus » Mi, 05.10.2016 13:32

Hallo

Ich hab zwei Fragen dazu.

1.) Gibt es einen Grund nur Formelverweise auf diese Namensbereiche einzufügen, anstatt gleich die Inhalte zu kopieren?

2.) Sind diese benannten Zellen irgendwie frei verteilt, oder liegen die auch alle in der gleichen Reihenfolge in einer Zeile oder einer Spalte?

Karolus

Re: Formeln mittels Array einfügen

von Jörg » Mi, 05.10.2016 12:44

Vielen Dank Euch beiden,
konnte Eure Hinweise erfolgreich umsetzen.

Code: Alles auswählen

sub Stamm_Daten_aendern
            
    myDoc = thisComponent
    mySheet = myDoc.sheets(1)   
     
    mycell = mysheet.getCellRangebyName("$E$6")
    mycell.string = "Aktuelle Aktion: Patientendaten ändern"
    Dim array2(10)

zielbereich = mySheet.GetCellRangeByName ("E8:E18")
array1 = array("=Patnr","=PatKK","=Patanrede","=Patname","=Patvorname","=Patplz","=Patort","=Patstrasse","=Patgebdat","=Patversnr","=Patdatum")

For i = 0 To 10
   array2(i) = array(array1(i))
   
Next i
zielbereich.formulaArray =  array2()
beep
end sub
Ob aber alles verstanden habe ?????
Danke Euch !!

Re: Formeln mittels Array einfügen

von balu » Mi, 05.10.2016 11:24

Hallo Jörg,
wenn jemand noch mal drüber schaut.
Habe ich, und kann nur eins sagen. Befasse dich noch mal in Ruhe mit Arrays, und der zählweise. Gibt ja genügend Infoquellen dazu.

Aber um es vorweg zu nehmen,

Code: Alles auswählen

Dim Array(11)
Das ist in diesem Falle falsch.
Nicht weil Du nicht gesagt hast ob es sich um ein String-Array handelt, oder ähnliches, sondern weil die Größendimension nicht stimmt. Denn wenn Du ein Array so deklarierst, dann umfasst das Array 12 Elemente, und zwar von 0, in Worten NULL, bis 11.

Du kannst jetzt daher gehen und sagen: *Dimm Array (10)*, dann musst Du aber auch deine Schleife nicht bei 1 anfangen lassen, sondern bei 0 und sie muss bei 10 enden.

Oder aber Du machst das so rum

Code: Alles auswählen

Dim Array(1 to 11) as String
Dann hast Du deine 11 Elemente, und die Schleife kannst Du so lassen wie sie ist, also beginnend mit 1.


Ich seh das Stephan schneller war, aber trotzdem lasse ich meine Antwort so stehen.



Gruß
balu

Re: Formeln mittels Array einfügen

von Stephan » Mi, 05.10.2016 11:18

naja, Dein Array ist falsch dimensioniert, es hat nur eine 'Zeile' statt der notwendigen 11. Schau Dir den Code von Karolus an, oder wenn Du unsicher bist mache es so (nicht getestet):

Code: Alles auswählen

array1 = array("=Patnr","=PatKK","=Patanrede","=Patname","=Patvorname","=Patplz","=Patort","=Patstrasse","=Patgebdat","=Patversnr","=Patdatum")
Dim array2(10)

For i = 0 To 10
	array2(i) = array(array1(i))
Next i
array2 ist dann das Array das Du an den Zellbereich übergeben kannst


Gruß
Stephan

Re: Formeln mittels Array einfügen

von Jörg » Mi, 05.10.2016 11:07

Hallo Fachleute,
ich habe da noch einen Code, bei dem das Einfügen der Formeln im Bereich E8:E18 erfolgen soll.
Wenn ich das richtig verstanden habe, benötigt es hierzu ein
eindimensionales Array.
Meine Versuche ein solches zu erstellen, scheitern leider.
Mein Versuch sieht folgendermaßen aus.

Code: Alles auswählen

sub Formeln
 myDoc = thisComponent
  mySheet = myDoc.sheets(1)   
Dim Array(11)
zielbereich = mySheet.GetCellRangeByName ("E8:E18")
Array()=  array (array("=Patnr","=PatKK","=Patanrede","=Patname","=Patvorname","=Patplz","=Patort","=Patstrasse","=Patgebdat","=Patversnr","=Patdatum"))
for i = 1 to 11
zielbereich.FormulaArray=  Array ()
next i
 end sub
Die Fehlermeldung lautet:
Die Dimensionsangaben passen nicht zueinander!
Wär schön, wenn jemand noch mal drüber schaut. Danke.

Re: Formeln mittels Array einfügen

von Jörg » Sa, 24.09.2016 11:40

Hallo Karolus,
Vielen Dank, habs gleich auch zur "Aktivierung" der Alten Preisliste angewendet.
Wünsche ein schönes Wochenende. :D

Re: Formeln mittels Array einfügen

von Karolus » Sa, 24.09.2016 11:19

Hallo

Naja, du hast hier keinen Bereich in einer Zeile sondern einen in 2 Spalten * 5 Zeilen

Code: Alles auswählen

zielbereich = mySheet.getCellRangeByName("I16:J20")
zielbereich.FormulaArray = array( array("=neuein1", "=neuzu1"),_
                                  array("=neuein2", "=neuzu2"),_
                                  array("=neuein3", "=neuzu3"),_
                                  array("=neuein4", "=neuzu4"),_
                                  array("=neuein5", "=neuzu5"))
Nur zur Demonstration, in python könnte man da schon ein einiges an Geschreibsel einsparen:

Code: Alles auswählen

    zielbereich = mySheet.getCellRangeByName("I16:J20")
    ein, zu = "=neuein{}".format, "=neuzu{}".format
    zielbereich.FormulaArray = tuple((ein(i), zu(i)) for i in range(1,6))

Re: Formeln mittels Array einfügen

von Jörg » Sa, 24.09.2016 10:31

@Thomas-Danke für den Hinweis.
Hallo Fachleute, während die Anwendung des von Karolus vorgeschlagenen Codes bei anderen Codes problemslos klappte,
krieg ich beim folgenden Versuch eine Laufzeitfehlermeldung:
Hier der ursprüngliche Code:

Code: Alles auswählen

sub neue_Preisliste ' in Eingabemaske aktivieren

myDoc = thisComponent
mySheet = myDoc.sheets(2)

mycell = mysheet.getCellRangebyName("$I16")
mycell.formulalocal= "=neuein1"
mycell = mysheet.getCellRangebyName("$I17")
mycell.formulalocal= "=neuein2"
mycell = mysheet.getCellRangebyName("$I18")
mycell.formulalocal= "=neuein3"
mycell = mysheet.getCellRangebyName("$I19")
mycell.formulalocal= "=neuein4"
mycell = mysheet.getCellRangebyName("$I20")
mycell.formulalocal= "=neuein5"
mycell = mysheet.getCellRangebyName("$J16")
mycell.formulalocal= "=neuzu1"
mycell = mysheet.getCellRangebyName("$J17")
mycell.formulalocal= "=neuzu2"
mycell = mysheet.getCellRangebyName("$J18")
mycell.formulalocal= "=neuzu3"
mycell = mysheet.getCellRangebyName("$J19")
mycell.formulalocal= "=neuzu4"
mycell = mysheet.getCellRangebyName("$J20")
mycell.formulalocal= "=neuzu5"
mycell = mysheet.getCellRangebyName("$R$2")
mycell.string = "neu"
mycell = mysheet.getCellRangebyName("$I13")
mycell.string = "Achtung neue Preisliste aktiv !!"
beep

end sub 
Mein Versuch :

Code: Alles auswählen

sub neue_Preisliste ' in Eingabemaske aktivieren

myDoc = thisComponent
mySheet = myDoc.sheets(2)
zielbereich = mySheet.getCellRangeByName("I16:I20")
zielbereich.FormulaArray = array(array("=neuein1", "=neuein2","=neuein3","=neuein4","=neuein5"))
zielbereich2 = mySheet.getCellRangeByName ("J16:J20")
zielbereich2.FormulaArray = array(array( "=neuzu1","=neuzu2","=neuzu3","=neuzu4","=neuzu5"))
mycell = mysheet.getCellRangebyName("$R$2")
mycell.string = "neu"
mycell = mysheet.getCellRangebyName("$I13")
mycell.string = "Achtung neue Preisliste aktiv !!"
beep
end sub
Vielen Dank!

Re: Formeln mittels Array einfügen

von Thomas Mc Kie » Do, 22.09.2016 17:22

Jörg hat geschrieben:P.S. Ist zwar nicht das richtige Unterforum:
Aber in der Tagespresse las ich kürzlich, dass der Fortbestand von OpenOffice gefährdet sei, weil zu wenig Entwickler an der Sache arbeiten.
Ist da was dran?
Und daher auch nur der Verweis auf die Infos dazu hier im Forum. viewtopic.php?f=16&t=67388 Weitere Diskussion dazu möglichst in dem Thema oder in einem neuen.
Viele Grüße
Thomas

Re: Formeln mittels Array einfügen

von Jörg » Do, 22.09.2016 14:57

Hallo Karolus,
vielen Dank für Deine prompte Hilfe. Es funktioniert.
(Habe nur z.Bsp. aus zZiel ->Zziel bzw. aus mDat1 -> mdat1 gemacht, wie in meinem Ursprungscode)

Werd nun mal die anderen ihrer Art bearbeiten und hoffe, das die Performance besser wird.

Also vielen Dank und bis zum nächsten Mal.

P.S. Ist zwar nicht das richtige Unterforum:
Aber in der Tagespresse las ich kürzlich, dass der Fortbestand von OpenOffice gefährdet sei, weil zu wenig Entwickler an der Sache arbeiten.
Ist da was dran?

Re: Formeln mittels Array einfügen

von Karolus » Do, 22.09.2016 13:32

Hallo

Code: Alles auswählen

…

zielbereich = oStammSheet.getCellRangeByName("AI" & iLetzteZeile & ":AT" &iLetzteZeile)

zielbereich.FormulaArray = array(array("=zZiel", "=mDat1", … , "=Anrede"))

Formeln mittels Array einfügen

von Jörg » Do, 22.09.2016 11:42

Hallo Fachleute,
der u.g. Code funktioniert, nur ist leider die Performance nicht so toll.
Daher hoffe ich, dass das mit Array besser ginge, zumal dieser nicht der einzigste seiner Art ist :oops:
Vielleicht findet ja einer Zeit.
Vielen Dank.

Code: Alles auswählen

Sub fuellen_Rechnung

 odoc = ThisComponent
   oStammSheet = ThisComponent.sheets.getByName("Rechnungen")
      With oStammSheet ' Letzte Zeile der Spalte AI im 2. Tabellenblatt ermitteln
         x = .Columns("34:45").queryEmptyCells()
         iLetzteZeile = x(x.Count-1).RangeAddress.StartRow +1
      End With
'Zellbereich AI:AT
      mycell = oStammSheet.getCellRangeByName("AI" & iLetzteZeile )
      mycell.FormulaLocal  = "=Zziel"
	  mycell = oStammSheet.getCellRangeByName("AJ" & iLetzteZeile )
      mycell.FormulaLocal  = "=mdat1"
	  mycell = oStammSheet.getCellRangeByName("AK" & iLetzteZeile )
      mycell.FormulaLocal  = "=Maz1"
      mycell = oStammSheet.getCellRangeByName("AL" & iLetzteZeile )
      mycell.FormulaLocal  = "=mdat2"
      mycell = oStammSheet.getCellRangeByName("AM" & iLetzteZeile )
      mycell.FormulaLocal  = "=Maz2"
      mycell = oStammSheet.getCellRangeByName("AN" & iLetzteZeile )
      mycell.FormulaLocal  = "=mdat3"
      mycell = oStammSheet.getCellRangeByName("AO" & iLetzteZeile )
      mycell.FormulaLocal  = "=Maz3"
      mycell = oStammSheet.getCellRangeByName("AP" & iLetzteZeile )
      mycell.FormulaLocal  = "=Zinstage"
      mycell = oStammSheet.getCellRangeByName("AQ" & iLetzteZeile )
      mycell.FormulaLocal  = "=Zinssatz"
      mycell = oStammSheet.getCellRangeByName("AR" & iLetzteZeile )
      mycell.FormulaLocal  = "=Zinsen"
      mycell = oStammSheet.getCellRangeByName("AS" & iLetzteZeile )
      mycell.FormulaLocal  = "=Mahngebühr"
      mycell = oStammSheet.getCellRangeByName("AT" & iLetzteZeile )
      mycell.FormulaLocal  = "=Anrede"
     
End Sub

Nach oben