Per Makro Wert in Formel einfüllen

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

Moderator: Moderatoren

Mr.Ioes
******
Beiträge: 524
Registriert: Fr, 12.03.2004 10:02

Per Makro Wert in Formel einfüllen

Beitrag von Mr.Ioes »

Hallo,

dank der Hilfestellung von Stephan habe ich ein Makro, dass von einer Tabellenvorlage Kopien erstellt und dabei in bestimmte Zellen bestimmte Werte einer anderen Tabelle einfügt. Etwa so:

Code: Alles auswählen

Sub Main
dim myDoc as object
myDoc = ThisComponent			
Dim Datensatz%
For Datensatz = 2 To 22	
	Name01 = myDoc.getSheets().getByName("Tabelle03").getCellByPosition(0,Datensatz-1)
	ohne = LTRIM(Name01.string)
	If myDoc.Sheets.hasByName(ohne) Then 
	mydoc.Sheets.removebyname(ohne) 
	end if
	myDoc.Sheets.CopyByName("Tabelle01",ohne,myDoc.Sheets.count-1)
	Formel_B3 = "=$Tabelle03.A" & Datensatz 
   Formel_C3 = ...

	myDoc.getSheets().getByName(ohne).getCellRangeByName("$B$3").Formula = Formel_B3
   ...

   Next Datensatz
Meldung = ...
End if									
End Sub
Nun will ich einen Wert (Ganzzahl) aus der anderen Tabelle in eine Zelle der kopierten Tabelle schreiben, in der schon eine Formel steht. Sagen wir mal in den Datensätzen der anderen Tabelle kommen wild gemischt die Zahlen 1, 2 und 3 vor und diese Zahlen sollen in die Formeln der Zelle der Ausgangstabelle eingesetzt werden Einfaches Bsp. mit X für die einzusetzenden Werte: X*($F$6/$Tabelle03.G27).

Geht das und wenn ja wie oder muss ich die Formelberechnung bereits in der anderen Tabelle vornehmen und zwingend nur das Ergebnis einfügen lassen?

Gruß - Mr.Ioes
ykcim
*****
Beiträge: 324
Registriert: Di, 29.07.2003 15:22
Wohnort: Neu-Isenburg
Kontaktdaten:

Per Makro Wert in Formel einfüllen

Beitrag von ykcim »

Hi,

dazu musst Du die Formel als Formula übergeben und den String zusammensetzten.

Code: Alles auswählen

myDoc = thiscomponent
mySheet = myDoc.sheets(0)

mycell = mysheet.getCellByPosition(0,0)
wert=mycell.string
mycell = mysheet.getCellByPosition(1,1)
mycell.Formula = "="+wert+"*A1*B1"
mfg
Michael
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
Mr.Ioes
******
Beiträge: 524
Registriert: Fr, 12.03.2004 10:02

Beitrag von Mr.Ioes »

Hallo ykcim,

leider verstehe ich nur Bahnhof (ich habe mir das obige Makro von Stephan schreiben lassen und dann nur bezüglich der Zellen jeweils angepasst).

Meine Aufgabenstellung:

Ich muss mehre Einheiten abrechnen, sagen wir einfach mal 10. Dazu habe eine schön formatierte Ausgangstabelle erstellt, bei der allerdings noch die für die 10 Einheiten individuellen Angaben fehlen. Diese Angaben stehen in einer anderen Tabelle in einer Liste (Quasi ein Datensatz pro Einheit). Die Ausgangstabelle (die erste der Calc-Datei) wird nun 10 mal kopiert und dabei bestimmte Zellinhalte aus der Listen-, bzw. Datenatz-Tabelle in bestimmte Zellen der jeweiligen neu (am Ende der Datei) erstellten Tabelle geschrieben.

Ich verstehe nun nicht, wie ich Deinen Code in mein bestehendes Makro einbauen kann.

Gruß - Mr.Ioes
Tim1202
**
Beiträge: 30
Registriert: Sa, 07.05.2005 18:57
Wohnort: Utting

Beitrag von Tim1202 »

Hallo,

ich bin zwar selbst kein OO-Basic Profi, aber wenn ich das richtig verstehe, dann hast du in z.B. Zelle A3 in Tabelle01 die Formel
=X*($F$6/$Tabelle03.G27)
wobei X die Zahl der Zelle A3 in Tabelle03 sein soll, also letztendlich die Formel
= 15 * ($F$6/$Tabelle03.G27)
wenn die Zelle A3 den Wert 15 hat.

Somit müsstest du also die Variable mit der Formel also z.B. Formel_B3 folgendermaßen belegen:

Code: Alles auswählen

Formel_B3 = "=" & myDoc.Sheets.getByName("Tabelle03").getCellRangeByName("A3").value & "*($F$6/$Tabelle03.G27)"
Falls dies nicht die von dir gesuchte Lösung ist müsstest du vielleicht nochmal ganz! genau beschreiben wie du dir das vorstellst (Welche Zellen aus welchen Tabellen mit welchen Formeln).
ykcim
*****
Beiträge: 324
Registriert: Di, 29.07.2003 15:22
Wohnort: Neu-Isenburg
Kontaktdaten:

Per Makro Wert in Formel einfüllen

Beitrag von ykcim »

Hi,

leider verstehe ich nicht was Du jetzt in die Formel haben willst:
Einen festen Wert aus einer Tabelle oder einen Verweis auf eine Tabelle?
Oder in eine vorhanden Formel den festen Wert ändern.

Für ersteres musst du den Wert aus einen Zelle auslesen und in eine Formel einsetzen, dazu benötigst du:

Code: Alles auswählen

mycell = firstsheet.getCellByPosition(0,0)
wert=mycell.string
mycell = secondsheet.getCellByPosition(1,1)
mycell.Formula = "="+wert+"*A1*B1"
Wenn dann in der ersten Zelle "3" steht, kommt als Formel "=3*A1*B1" raus.

Für zweiteres musst Du den Verweis in die Formel eintragen:

Code: Alles auswählen

mycell.Formula = "=$Tabelle2.A1*A1*B1"
Bei drittens musst Du die Formel auslesen und ändern.

Code: Alles auswählen

 mycell = firstsheet.getCellByPosition(0,0) 
 wert=mycell.string   rem 5
 mycell = secondsheet.getCellByPosition(1,1) 
 oldFormel=myCell.formula  rem   "=3*A1*B1"
 mid(oldformel,1,1,Wert)  rem gibt  "=5*A1*B1")
 myCell.formula=oldformel
Wenn Du denn Verweis ändern willst geht es genauso

Code: Alles auswählen

 oldFormel=myCell.formula  rem   "=$Tabelle2.A1*A1*B1"
 mid(oldformel,12,2,"A3")  rem  "=$Tabelle2.A3*A1*B1"
 myCell.formula=oldformel

mfg
Michael[/code]
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
Mr.Ioes
******
Beiträge: 524
Registriert: Fr, 12.03.2004 10:02

Re: Per Makro Wert in Formel einfüllen

Beitrag von Mr.Ioes »

Hallo,

zunächst will ich Euch für Eure Hinweise danken! Da ich mich im Moment nicht so richtig konzentrieren kann, bzw. anderweitig beschäftigt bin komme ich erst später dazu Eure Tipps auszuprobieren (und vor allem zumindest ansatzweise nachzuvollziehen, bzw. zu vertehen).

Ich will nur noch mal erklären, was ich erreichen will: Ich habe zunächst (in einer Datei) zwei Tabellen, von denen die erste als schön formatierte Vorlage für eine Betriebskostenabrechnung dient. Darin sind bereits alle Daten enthalten, die auf alle Einheiten (Wohnung/Laden etc) einheitlich zutreffen. Die zweite Tabelle ist wie eine Datenbaktabelle aufgebaut (jede Zeile ein Datensatz mit der ersten Spalte als pk), in der die individuellen Daten zur jeweiligen Einheit aufgenommmen werden (z.Bsp. EinheitenNr. = pk, qm-Größe, Einzug/Auszug, Mietername etc.).

Mit dem Eingangs ansatzweise mitgeteilten Makro, wird nun für jede Einheit eine Kopie der ersten Tabelle erstellt, diese an´s Ende angefügt und dabei die Daten der Datensatztabelle in die neue Kopie geschrieben, um so die Einzelabrechnungen zu erhalten.

Mein "Problemchen" tauchte auf, als ich nach Einheiten abzurechndene, nicht aber bei allen Einheiten gleichermaßen auftauchende Unkosten auch noch Zeit nach anteilig aufteilen musste (z.Bsp. handelte es sich um die Abschreibung für einen Waschküchen-Wasserzähler, die nur diejenigen Mieter zu tragen haben, die auch Waschen dürfen/können). Nun kann man diese komplett in der Datetensatztabelle ausrechnen lassen und das Rechenergebnis übernehmen so dass mein "Problemchen" gelöst ist.

Ich hatte mich nur gefragt, ob ich die Zeitanteilige Nutzung über eine einfache Zellenformel in der ersten Vorlagentabelle ausrechen lassen kann, in die ich dann nur Werte (wie z.Bsp. 1 oder 0 für die Eiheit darf/kann Waschen oder nicht) einfüge, ohne dabei die vorhandene Formel zu überscheiben (weil dieser Weg für die Mitarbeiter besser nachzuvollziehen ist).

Gruß - Mr.Ioes
Antworten