Seite 1 von 1
Per Makro Wert in Formel einfüllen
Verfasst: Sa, 30.04.2005 18:26
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
Per Makro Wert in Formel einfüllen
Verfasst: So, 01.05.2005 11:53
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
Verfasst: Di, 03.05.2005 23:38
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
Verfasst: Sa, 07.05.2005 19:23
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).
Per Makro Wert in Formel einfüllen
Verfasst: So, 08.05.2005 11:44
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:
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]
Re: Per Makro Wert in Formel einfüllen
Verfasst: So, 08.05.2005 14:26
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