Autor
|
Thema: Formeln klonen in Excel 2000 (1339 mal gelesen)
|
axis Mitglied Kaufmann
Beiträge: 6 Registriert: 24.04.2006
|
erstellt am: 24. Apr. 2006 10:02 <-- editieren / zitieren --> Unities abgeben:
Guten Tag Ich bin Excel-Laie (Ausbildung by trial and error) und habe eine Aufgabe, zu der ich in den Excel-Büchern und im Netz bisher keine Lösung gefunden habe: Eigentlich könnte man dem, was ich machen will "Formeln klonen" sagen: In einer Tabelle 1 habe ich eine Formel, z.B. in Zelle B2 "=A1+A2". Hat also A1 den Wert 1 und A2 den Wert 2, steht in B2 die 3. Ich weiss, dass ich nun die Formel in B2 in eine Tabelle 2 verknüpfen kann und dass dann B2 auf Tabelle 2 auch 3 anzeigt. Doch ich möchte die Formel so verknüpfen, dass die Formel in B2 auf Tabelle 1 zwar in B2 auf Tabelle 2 geklont wird, dass die Formel dort dann aber die Zellen A1 und A2 VON TABELLE 2 zusammenrechnet (oder subtrahiert, wenn ich später in der Quelltabelle 1 die Formel ändere). Soweit das Problem. Dass ich es mit einer Art von Klonen lösen will, hat damit zu tun, dass die Quelltabelle 1 sozusagen die Mastertabelle sein soll, auf der ich immer wieder Formeln versuchsweise verändern will (Im Sinn von was-wäre-wenn). So gibt es über 100 Zieltabellen (Tabelle 2 bis ...), die die verknüpften Formeln aus den Feldern der Mastertabelle übernehmen sollen, aber dann mit diesen Formeln die Daten, die in der EIGENEN Tabelle stehen, berechnen sollen. In den Excel-Handbüchern steht: dass verknüpfte Formeln in einer Zieltabelle immer die Zellen der Quelltabelle berechnen. Gibt es eine Lösung, dass die Veränderung einer Formel in einer Quelltabelle von der damit verknüpften Formel auf Zieltabellen übernommen wird, diese Formel dann aber die Berechnung mit den eigenen Daten auf der jeweiligen Zieltabelle durchführt? Herzlichen Dank, wenn jemand mir hier weiterhelfen kann. Er/Sie würde mir helfen, eine längere Suchaktion zu beenden. MfG Axis Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tunnelbauer Ehrenmitglied V.I.P. h.c. Bauingenieur
Beiträge: 7085 Registriert: 13.01.2004 ich hab eh keine Probleme damit...
|
erstellt am: 24. Apr. 2006 11:15 <-- editieren / zitieren --> Unities abgeben: Nur für axis
Hi und herzlich willkommen auf cad.de ! Zu deinem Problem: Was hältst du davon das Tabellenblatt zu kopieren ? Da steht dann in jeder neuen Tabelle dasselbe drinnen wie in der Master-Tabelle und jede Formel bezieht sich auf das eigene Blatt. ------------------ Grüsse Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
okl Mitglied Wirtsch-Ing (Maschbau)
Beiträge: 157 Registriert: 21.04.2006 3,6 GHz, 2 GB RAM, NVIDIA Quadro FX 1300, Delmia V5R16 SP1, Win XP Prof SP2, Office 2003, VS 2005, VB 6
|
erstellt am: 24. Apr. 2006 11:20 <-- editieren / zitieren --> Unities abgeben: Nur für axis
Tach auch! Also, wenn Du ein Makro benutzen darfst, dann sieht der Code so aus: Private Sub Worksheet_Activate() Sheets(2).Cells(2, 2) = Sheets(1).Cells(2, 2).Formula End Sub Füge diesen Text in Dein Tabellenblatt ein, in dem die Formeln übernommen werden sollen. Aber Achtung: jedesmal, wenn du das Blatt aufrufst, werden die Formeln übernommen. Kann also lange dauern (je nach Anzahl) und möglicherweise auch Formeln überschreiben, die nicht überschrieben werden sollen. Wenn Du das eleganter machen willst, dann versuch das über Buttons und Auswahlfelder zu gestalten. Mfg okl Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
axis Mitglied Kaufmann
Beiträge: 6 Registriert: 24.04.2006
|
erstellt am: 24. Apr. 2006 12:22 <-- editieren / zitieren --> Unities abgeben:
Herzlichen Dank für die Anleitungen, okl und Thomas Wahrscheinlich ist die Makro-Anleitung von okl der richtige Weg. (Beim reinen Kopieren des Tabellenblattes, wie von Thomas vorgeschlagen, ändert das ja später nichts mehr am kopierten Tabellenblatt, wenn ich in der OriginalTabelle1 eine Formel in einer Zelle ändere. Es ist aber die eigentliche Absicht, dass ich immer wieder am Original Formeln ändern kann und die Kopien berechnen dann mit den geänderten (und geklonten) Formeln IHRE eigenen Daten neu). Excel-Makro ist leider ein noch neues Feld für mich, aber ich werd mich reinknien. Einen ersten Versuch gemacht hab ich mit dem Code: Sub formelnklonenversuch3() ' formelnklonenversuch3 Makro ' Tastenkombination: Strg+m Sheets(Tabelle2).Cells(B2) = Sheets(Tabelle1).Cells(B2).Formula End Sub Zuerst gab ich den Code allerdings genau so ein, wie okl ihn aufgezeichnet hast, dann kam aber beim Ausführen die Fehlermeldung "Laufzeitfehler 13, Typen unverträglich". Dann habe ich den Code "intuitiv" abgeändert, weil ich die Zellennumerierungsform A1 habe. Aber es kommt immer noch die gleiche Fehlermeldung. Also werd ich weiter probieren. Schon mal herzlichen Dank für diese neue Fährte - sie könnte ja die Lösung bringen. Und wenn dem Profi mit einem Blick klar ist, was ich als Makro-Neuling am Code falsch notiert habe, bin ich für einen Hint dankbar. Gruss axis
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
okl Mitglied Wirtsch-Ing (Maschbau)
Beiträge: 157 Registriert: 21.04.2006 3,6 GHz, 2 GB RAM, NVIDIA Quadro FX 1300, Delmia V5R16 SP1, Win XP Prof SP2, Office 2003, VS 2005, VB 6
|
erstellt am: 24. Apr. 2006 12:48 <-- editieren / zitieren --> Unities abgeben: Nur für axis
Hallo! Sheets(x): x muss entweder der Name als String sein (zB "Tabelle1") oder der Index (zB 1; ohne "). Daher kommt der Laufzeitfehler. Dann die Notation der Zellen: cells(Rowindex, Columnindex) => Zelle A1 = cells(1,1), Zelle B1 = (1,2). Kannst auch über Range arbeiten, würde ich aber nicht unbedingt zum Einstieg empfehlen. In Deinem Fall zB. Sheets("Tabelle2").cells(2.2) = Sheets("Tabelle2").cells(2,2).Formula Bei Fragen : fragen!!!! Schüs Blödfug, sorry! Muss natürlich Sheets("Tabelle2").cells(2.2) = Sheets("Tabelle1").cells(2,2).Formula heißen
[Diese Nachricht wurde von okl am 24. Apr. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tjobe Mitglied Angestellter Konstruktion
Beiträge: 267 Registriert: 26.06.2002
|
erstellt am: 24. Apr. 2006 12:56 <-- editieren / zitieren --> Unities abgeben: Nur für axis
Hallo Axis, wir hatten das Problem auch einmal im Bereich Kalkulation. Im laufenden Kalkulationsprozess gab dann immer wieder Änderungen im Bereich der Material- und Lohnwerte,..., wodurch immer wieder alles durchgerechnet werden musste. Die Lösung war dann ein Übersichtsblatt, auf dem alle Artikel mit zugehörigen Werten (Bezeichnung, Material, Zeit,...) eingetragen wurden (übersichtlich, da auf einem Blatt beschränkt) und es gab das Kalkulationsblatt, auf dem die Werte einzusetzen waren, um den Endpreis zu berechnen. Das von einem Kollegen erstellte Makro ist dann durch jede Zeile des Übersichtsblattes gegangen, hat die Grundwerte in das Kalkulationsblatt kopiert, die Zwischen- und Endpreise wieder in das Übersichtsblatt kopiert und hat mit der nächsten Zeile (also dem nächsten Artikel) im Übersichtsblatt weitergemacht. Alternativ konnte dann ebenfalls für jeden Artikel ein fertig ausgefülltes Kalkulationsblatt ausgedruckt werden. Vorteilig ist, dass alle wesentlichen Werte auf einem Blatt stehen und nicht erst zusammengesucht werden mussten. Vielleicht ist das noch ein weiterer Lösungsansatz. Gruß Tjobe
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8075 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 24. Apr. 2006 13:37 <-- editieren / zitieren --> Unities abgeben: Nur für axis
Hallo axis, einfaches, übersichtliches Makro ohne die Allgemeingültigkeit mit Workbook, Sheet und Cells: wenn Du Dich nur in dieser mappe aufhälst, sollte das reichen für den Anfangals Modul einfügen:
Code: Public Sub Klonen() Set rangeQ_B1 = Tabelle1.Range("B1") Set rangeZ_B1 = Tabelle2.Range("B1") rangeZ_B1.Formula = rangeQ_B1.FormulaEnd Sub
Jetzt kannst Du wahlweise das Makro als Makro ausführen, oder Du fügst einen button ein, mit dem Du die Sub Klonen aufrufst. Diese Variante bewirkt, daß die Formeln erst bei Bedarf aktualisiert werden. Das Modul ist beliebig erweiterbar, mußt halt nur zusätzliche Bereiche (z.B. rangeQ_B17 und rangeZ_B17) definieren und die in der nächsten Zeile wieder zuweisen (rangeZ_B17.Formula = rangeQ_B17.Formula) Gruß, Nicole ------------------ Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas Harmening Moderator Arbeiter ツ
Beiträge: 2897 Registriert: 06.07.2001 Das Innerste geäussert und aufs Äusserste verinnerlicht
|
erstellt am: 24. Apr. 2006 16:12 <-- editieren / zitieren --> Unities abgeben: Nur für axis
ohne Verwendung von Macros; ein weitere Möglichkeit wäre, =Auswerten() zu verwenden, -only Bsp.- deine zu berechnenden Formeln stehen alle in Spalte A es wid ein relativer Bezug erstellt und als Name (einfügen/Name/definieren) definiert zb. Berechne =AUSWERTEN(Tabelle1!$A:$A) in Spalten B-G stehen deine festen Parameterwerte - in der Spalte H steht dann =Berechne Deine weiteren Blätter sind dann alle so aufgebaut das Spalte A sich auf dein 1 Blatt bezieht und in den Spalten B-G weiter deine verschiedenen festen Werte stehen. in der Spalte H steht dann wiederum =Berechne Funktion: es wird immer das ausgewertet, was relativbezogen in Spalte A des ersten Blatt steht, aber mit den jeweiligen Werten des aktiven Blattes... hmm,hmmm,hmmm, ich hänge mal eine sheet an aber siehe auch --> http://ww3.cad.de/foren/ubb/Forum226/HTML/000403.shtml#000003 beitrag von Rainberg!, dort wurde =AUSWERTEN() auch behandelt ------------------ Am Anfang war kein Licht - und Vater blickte Kalt Miss Brauch [Diese Nachricht wurde von Thomas Harmening am 24. Apr. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
axis Mitglied Kaufmann
Beiträge: 6 Registriert: 24.04.2006
|
erstellt am: 24. Apr. 2006 16:49 <-- editieren / zitieren --> Unities abgeben:
Kurzer Zwischenbericht, schon mal mit einem GROSSEN DANKESCHÖN an die diversen Profis, die mir so spontan Ideen gegeben haben. Die Beschreibung von Tjobe ist auch etwa das, wie ich es am Schluss brauchen möchte... Das Makro von okl hat zu meiner grossen Freude schon mal in einer rudimentären Versuchsanordnung funktioniert und die richtigen Zellen zusammengerechnet. Es geht allerdings nur, wenn man die Arbeitsmappe auf die Zellennotation z1s1 umschaltet. Das Makro von Nicole hätte mir sehr gefallen, v.a., weil ich dann bei der Zellennotation A1 hätte bleiben können, die ich mehr gewohnt bin. Doch obwohl ich das Makro genau so erstellt habe, passierte einfach nichts in der Tabelle2 in Zelle B1. (Kann gut sein, dass ich ausser dem Übernehmen des Makros noch etwas Anderes hätte tun sollen, was ich nicht weiss, was aber für Profis eine Selbstverständlichkeit ist, sodass sie gar nicht extra darauf hinweisen.) So werde ich im Moment versuchen, das okl-Makro weiter auszubauen. Und da Schüs geschrieben hat: bei Fragen: fragen!!! erlaube ich mich, hier noch drei Fragen zur Benennung eines Bereichs in der Makrosprache zu stellen: 1. Wie ist die korrekte Schreibweise, wenn ich (im okl-Makro) einen ganzen Zellenbereich benennen will; heisst es dann z.B. Sheets("Tabelle2").cells(2,2 : 3,3) = Sheets("Tabelle1").cells(2,2 : 3,3).Formula ? Werden mit diesem Makrobefehl alle Formeln zwischen z2s2 und z3s3 in Tabelle1 in die identischen Zellen in Tabelle2 geklont? 2. Da das Befehlswort "Sheets" sowieso schon in der Mehrzahl steht: Kann man im Makro auch gleich mehrere Sheets erfassen und von ihm abarbeiten lassen, z.B. (wenn ich die Sheets mit Zahlen versehe, statt ihnen Namen zu geben): Sheets(2 : 20).cells(2,2 : 3,3) = Sheets(1).cells(2,2 : 3,3).Formula ? Überträgt der Makro dann alle Formel zwischen z2s2 und z3s3 in Sheet1 in die identischen Zellen in den Sheets 2 bis 20 ? 3. Kann ich diese Methode der Bereichsumschreibung auch verwenden, wenn es sich sogar um eine andere Excel-Datei handelt, wenn ich also die Quell-Tabellealso in einer separaten Datei ablege und für jede Zieldatei (mit den geklonten Formeln drin aus der Quelldatei) eine eigene Datei mache ? z.B. DateiB.Sheets("Tabelle1").cells(2.2) = DateiA.Sheets("Tabelle1").cells(2,2).Formula ? Falls das überhaupt geht, wie würde die korrekte Parameterschreibweise lauten? Herzlichen Dank für die bisherige Hilfe und allfällige Antworten auf meinen Fragen.
Axis Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
okl Mitglied Wirtsch-Ing (Maschbau)
Beiträge: 157 Registriert: 21.04.2006 3,6 GHz, 2 GB RAM, NVIDIA Quadro FX 1300, Delmia V5R16 SP1, Win XP Prof SP2, Office 2003, VS 2005, VB 6
|
erstellt am: 24. Apr. 2006 17:39 <-- editieren / zitieren --> Unities abgeben: Nur für axis
Zitat: Und da Schüs geschrieben hat: bei Fragen: fragen!!!
Niedlich! "Schüs" war, wie man oben links sehen kann, nur der Abschluss meiner Antwort. Aber ich werde über eine Namensänderung nachdenken... Zitat: 1. Wie ist die korrekte Schreibweise, wenn ich (im okl-Makro) einen ganzen Zellenbereich benennen will; heisst es dann z.B. Sheets("Tabelle2").cells(2,2 : 3,3) = Sheets("Tabelle1").cells(2,2 : 3,3).Formula ?
Gibt zwar schönere Varianten, aber Du sollst ja was lernen... Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim i As Integer 'Spalten Dim j As Integer 'Zeilen Dim k As Integer 'Anzahl der Tabellblätter Dim sh As Sheets For k = 2 To Sheets.Count 'oder bis zu welchem Sheet auch immer For i = 1 To 100 'oder bis zu welcher Spalte auch immer For i = 1 To 100 'oder bis zu welcher Zeile auch immer Workbooks(AName).Sheets(k).Cells(j, i) = Workbooks(Dname).Sheets(1).Cells(j, i).Formula Next Next Next End Sub Zitat: Werden mit diesem Makrobefehl alle Formeln zwischen z2s2 und z3s3 in Tabelle1 in die identischen Zellen in Tabelle2 geklont?
Ja. Zitat: 2. Da das Befehlswort "Sheets" sowieso schon in der Mehrzahl steht: Kann man im Makro auch gleich mehrere Sheets erfassen und von ihm abarbeiten lassen, z.B. (wenn ich die Sheets mit Zahlen versehe, statt ihnen Namen zu geben): Sheets(2 : 20).cells(2,2 : 3,3) = Sheets(1).cells(2,2 : 3,3).Formula ?
Nicht ganz, siehe oben. Zitat: Überträgt der Makro dann alle Formel zwischen z2s2 und z3s3 in Sheet1 in die identischen Zellen in den Sheets 2 bis 20 ?
Freilich. Zitat: 3. Kann ich diese Methode der Bereichsumschreibung auch verwenden, wenn es sich sogar um eine andere Excel-Datei handelt, wenn ich also die Quell-Tabellealso in einer separaten Datei ablege und für jede Zieldatei (mit den geklonten Formeln drin aus der Quelldatei) eine eigene Datei mache ? z.B. DateiB.Sheets("Tabelle1").cells(2.2) = DateiA.Sheets("Tabelle1").cells(2,2).Formula ? Falls das überhaupt geht, wie würde die korrekte Parameterschreibweise lauten?
der Rest bleibt gleich. Viel Spaß, schüs, okl Bei weiteren Fragen: fragen!!!! Wieder die Hälfte vergessen: AName und DName stehen für Deine Dateien. Wenn die geöffnet sind, einfach nur den Dateinamen nehmen (zB. meineDatei.xls), wenn sie nicht geöffnet sind : c:\meinPfad\meineDatei.xls). Ich würde dir vorschlagen, dass du die vorher öffnest. Wenn Du die per Code öffnen möchtest: bitte nicht mehr heute, stell die Frage und Du kriegst morgen Deine Antwort
[Diese Nachricht wurde von okl am 24. Apr. 2006 editiert.] [Diese Nachricht wurde von okl am 24. Apr. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
axis Mitglied Kaufmann
Beiträge: 6 Registriert: 24.04.2006
|
erstellt am: 25. Apr. 2006 00:56 <-- editieren / zitieren --> Unities abgeben:
Lieber okl Danke für Deine unermüdliche Unterstützung. Aber ich fürchte, ich hab mich zu weit vorgewagt (it's maybe too ambicious for my level of knowledge). Oder klappt das Ding nicht, weil ich noch mit Excel 2000 arbeite? Es ist 0.50 Uhr und ich bin auf keinen grünen Zweig gekommen. Ich erwarte auch keine weitere Unterstützung, möchte Dir aber fairerweise noch erzählen, wo ich stecke, da ich Deine Hilfe heute sehr schätzte. Ich habe den Makro zuerst wie von den Excel-Handbüchern empfohlen, in die versteckte persönliche Makro-Arbeitsmappe geschrieben. Hat nicht geklappt. Darum alles wieder gelöscht und neu aufgesetzt und diesmal für das Makro-Platzieren "neue Arbeitsmappe" ausgewählt. Klappte auch nicht. Wieder alles gelöscht und neu aufgesetzt. Beim xten Versuch habe ich für die Platzierung des Makro "Diese Arbeitsmappe" (versuchcopy8) ausgewählt und bin jetzt dabei geblieben. (Hat laut Handbuch den Vorteil, dass der Makro automatisch ausgeführt wird, wenn man die Arbeitsmappe öffnet). Wenn ich jedoch das Makro-Dialogfenster aufrufe (unter Extras / Makro / Makros...), ist es immer leer. Erst wenn ich "run8" in die Kopfzeile des Dialogfensters eingebe, kann man den Makro ausführen oder bearbeiten etc. Keine Ahnung, wieso er nicht aufgelistet wird.(Weil ich ihn immer wieder eingeben musste, um ihn ausführen oder bearbeiten zu können habe ich irgendwann mal Deinen längeren Makro-Namen "Worksheet_SelectionChange" durch einen kürzeren, eben "run8" ersetzt.) Eigentlich meine ich, dass ich nachvollziehen und im Grossen Ganzen verstehen kann, wie Dein Code die Aufgaben abarbeitet. Da aber immer Fehlermeldungen kamen, habe ich nach und nach alle Bereichserweiterungen, die Du mir aufgelistet hast, als Remarks markiert, bis am Schluss nur noch die eine Zeile mit der Aufgabe des Klonens EINER Zelle übrigblieb. Im versuchcopy8.xls siehst Du den Endzustand. Aber immer noch kommt eine Fehlermeldung. Sie heisst: "das Argument ist nicht optional". Ich weiss nicht, was damit gemeint ist und der Debugger meldet auch keine Fehler, wenn ich ihn den Code untersuchen lasse, oder einen Kompilierungsversuch mache. An diesem Punkt ist nun mein Latein definitiv zu Ende. Wie gesagt, wahrscheinlich ist diese Aufgabe doch zu anspruchsvoll für meinen (Un)Kenntnisstand. Nochmals Danke für Deine Hilfe heute und einen schönen Gruss. axis PS: Ich hatte immer alle beteiligten Dateien offen, wie Du es vorgeschlagen hast. PS2: Ich habe gerade die Mitteilung erhalten, dass man keine Excel-Dateien als Anhang mitsenden kann (Filetype not allowed). Somit also ohne Anhang.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
axis Mitglied Kaufmann
Beiträge: 6 Registriert: 24.04.2006
|
erstellt am: 25. Apr. 2006 01:05 <-- editieren / zitieren --> Unities abgeben:
Nachtrag zu meiner Antwort an okl von vorhin: Da ich eben die Excel-Datei "versuchcopy8.xls" nicht anhängen konnte, kannst Du ja auch den Code nicht einsehen, wie er nun am Schluss meiner Odyssee ist. Diesen somit hier noch rasch dazukopiert: Private Sub run8(ByVal Target As Range) 'Dim i As Integer 'Spalten 'Dim j As Integer 'Zeilen 'Dim k As Integer 'Anzahl der Tabellblätter 'Dim sh As Sheets 'For k = 2 To Sheets.Count 'oder bis zu welchem Sheet auch immer 'For i = 2 To 3 'oder bis zu welcher Spalte auch immer 'For j = 3 To 4 'oder bis zu welcher Zeile auch immer Workbooks(versuchcopy8.xls).Sheets("Tabelle1").Cells(3, 2) = Workbooks(versuchmaster9.xls).Sheets("Tabelle1").Cells(3, 2).Formula 'Next 'Next 'Next End Sub Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
okl Mitglied Wirtsch-Ing (Maschbau)
Beiträge: 157 Registriert: 21.04.2006 3,6 GHz, 2 GB RAM, NVIDIA Quadro FX 1300, Delmia V5R16 SP1, Win XP Prof SP2, Office 2003, VS 2005, VB 6
|
erstellt am: 25. Apr. 2006 09:39 <-- editieren / zitieren --> Unities abgeben: Nur für axis
Hallo! Tut mir echt leid, dass es beio Dir nicht geklappt hat. Weiß auch nicht so richtig, warum. Hab Dir mal als Anhang ein einfaches Beispiel angehängt, welches Dir vielleicht doch noch helfen könnte und Du nicht komplett den Spaß am Programmieren verlierst! Und Du weißt ja: bei Fragen: fragen!!! Wiederschaun Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8075 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 25. Apr. 2006 09:41 <-- editieren / zitieren --> Unities abgeben: Nur für axis
Hallo Axis, Zitat: Wenn ich jedoch das Makro-Dialogfenster aufrufe (unter Extras / Makro / Makros...), ist es immer leer
Du mußt Makros als "Modul" schreiben, d.h. im Projektexplorer ein Modul einfügen und den Code da rein. Dann sollte mein Code auch auf dem 2. Tabellenblatt funktionieren. (Voraussetzung ist natürlich, das das Blatt auch Tabelle2 heißt) Der Ansatz von okl ist natürlich toll, da da auch Erklärungen drin stecken. Meine Sache war nur eine schnell-Lösung für kleine Hände und deshalb ziehe ich mich jetzt auch dezent zurück weiterhin viel Erfolg!! Gruß, Nicole noch was: Zitat: Weil ich ihn immer wieder eingeben musste, um ihn ausführen oder bearbeiten zu können habe ich irgendwann mal Deinen längeren Makro-Namen "Worksheet_SelectionChange" durch einen kürzeren, eben "run8" ersetzt.
Ich meine, daß das nicht nur ein freier Name ist, sondern ein festgelegter, der sich auf ein Ereignis bezieht, nämlich daß die Auswahl (Selection) wechselt. Deshalb darf man diese vorgegebenen Namen nicht ändern. Die verschiedenen Ereignisse die passieren können siehst Du im VBA-Editor: guckst Du Bild: das sind Gerüste, in die man ebenfalls einen Code eingeben kann, der dann ausgeführt wird, wenn dieses Ereignis stattfindet. ------------------ Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
okl Mitglied Wirtsch-Ing (Maschbau)
Beiträge: 157 Registriert: 21.04.2006 3,6 GHz, 2 GB RAM, NVIDIA Quadro FX 1300, Delmia V5R16 SP1, Win XP Prof SP2, Office 2003, VS 2005, VB 6
|
erstellt am: 25. Apr. 2006 09:47 <-- editieren / zitieren --> Unities abgeben: Nur für axis
Hab den Fehler doch noch gefunden: Übergabe der Variablen bzw. Werte. Musst Du Dir unbedingt mal anschauen. Es gibt eine sehr wichtige Konvention: Strings (=sind Texte, die der Compi nicht anders lesen kann als eine Folge von Zeichen ohne tieferen Sinn; zB. der Name eines Tabellenblattes) müssen in "" (Gänsefüßchen) geschrieben werden. Also: Workbooks("meineDatei.xls"). Sonst rallt unser Freund der Binärmeister das nicht. Nur Zahlformlate, Booleanwerte oder Variablennamen werden ohne "" übergeben (zB Sheets(2) oder cells(2, Spalte), wenn Du vorher Dim Spalte as Integer deklariert hast, sonst gibt's auch dabei Probleme. Viel Spaß, okl Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas Harmening Moderator Arbeiter ツ
Beiträge: 2897 Registriert: 06.07.2001 Das Innerste geäussert und aufs Äusserste verinnerlicht
|
erstellt am: 25. Apr. 2006 13:24 <-- editieren / zitieren --> Unities abgeben: Nur für axis
hmm,hmm, klingt alles ein wenig abenteuerlich ;-) vielleicht stellst du ja mal eine kleine Bsp-Mappe hoch. Auf deinem Dateisystem an dein *xls-File ein .txt dranhängen, schon ist die Überprüfung der file extension beim upload gültig. so richtig schlau bin ich nicht wirklich geworden aus dem vielem Text, der hier schon steht. unter Umständen brauchst du ja keine 'geklonten' Formeln ;-) Erstelle eine saubere Excelmappe mit Formeln. Benenne in deinem Referenzblatt deine Zellen logisch. zb. A1 kann auch Guthaben / B2 MWST /B3 SKONTO heissen und Excel kann auch mit = GUTHABEN*MWST-SKONTO rechnen Auf dem Berechnungsblatt (das aus einer Vorlage erstellt wird) werden Werte aus der Refsheet übernommen und wenn man Werte ändern will - die mit einer weiteren Spalte realisieren. Man fragt eine weitere Zelle ab (in der der User eigene Werte eingeben kann) ala
Code: =wenn(neuerwertMSTW<>"";Guthaben*neuerwertMSTW;Guthaben*MSTW)
Eine Weitere Möglichkeit wäre das Betrachen von Extras/Szenarien?Die Refsheet sollte Refsheet (die sich auch als Externe Mappe ansprechen lässt) bleiben ;-) - ich befürchte, dass das Ganze ziemlich schnell crashen kann, gerade wenn man nicht fit in den Sheets und dem Macros dazu ist - Stichwort: Weiss man noch was man vor 3 Monaten mit dem Macros bewirkt hat... & ich weiss nicht ob das so eine gute Idee, ist die gesamten Formeln aus dem Refsheet nachher über 100 Sheets laufen zu lassen... unterumständen will man ja Sheet49 und Sheet74 nicht ändern und in Sheet 80 nur A12,,, etc - i don't know - klingt ein wenig abenteuerlich ;-) - Sind ein wenige meine Bedenken... Das Einzige was ich mit Makros machen würde - Automation - ein Export des 'Endresultates' save as new Sheet with value only. - und das Duplizieren der Eingabevorlage - und wenn wirklich Formeln aus dem Refsheet auf alle Sheets übertragen werden sollen, dann mit Auswahl bestimmter Zellen und der Auswahl alle oder Einzelner Sheets Mappe enthält Macros: kopiere Vorlage -> vorlage(xxx) und sicherne Aktuelles Blatt unter neuem Namen nur mit Werten und ohne Commandbutton gruss Thomas ------------------ Am Anfang war kein Licht - und Vater blickte Kalt Miss Brauch Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
axis Mitglied Kaufmann
Beiträge: 6 Registriert: 24.04.2006
|
erstellt am: 26. Apr. 2006 08:11 <-- editieren / zitieren --> Unities abgeben:
HERZLICHEN DANK Das ist das erste Mal, dass ich Rat in einem solchen Forum suchte und das überwältigende Echo hat mich schlichtweg erschlagen. Ich möchte allen, die mir mit ihren Rat- und Vorschlägen antworteten wirklich herzlich danken. Nun muss ich aber erst mal alles für mich aussortieren und dazu lernen (ausserdem bin in nun auch erst mal einen Monat weg). Denn als Excel-Laie habe ich ca gut die Hälfte der Infos in Euren Tipps verstanden, bei einem weiteren Drittel erahne ich, was gemeint ist, und ein paar Begriffe und Zusammenhänge sind mir schlicht noch fremd, da ich mich nie mit Makros und VBA beschäftigt habe (z.B. keine Ahnung, wie man einen Button herstellt, oder wie Module im Zusammenhang mit Excel-Tabellen zu verstehen sind und wie man da vorgehen muss.) Also muss ich erst mal die Schulbank drücken. Ein bisschen weiss ich jetzt wie sich der Zauberlehrling gefühlt haben muss, als er die Geister rief. Herzlichen Dank nochmals an Alle, die dem Zauberlehrling weitergeholfen haben. Ich habe auch viel gelernt bei diesem Abenteuer. Axis PS: Sicher werde ich erst mal mit den Codes weiterversuchen, die mir okl zuerst gesandt hatten, die haben, mindestens in dieser rudimentären Form bei mir funktioniert, also müssen die sich auch ausbauen lassen. (Für okl: der Tipp mit den "Anführungszeichen" für die Dateinamen hat übrigens die Fehlermeldung wegen dem nicht optionalen Argument nicht beeindrucht).
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|