Autor
|
Thema: Zielwertsuche mit VBA (6539 mal gelesen)
|
Masterofsleepon Mitglied Entwicklungsingenieur
Beiträge: 7 Registriert: 21.08.2014 Windows 7 Enterprise Intel Xeon CPU E5-2665 @2,4 GHz 128 Gb RAM 256 Gb SSD 2 TB im LSI RAID 5/6 _________________ NX - 8.5 Ansys 15.0
|
erstellt am: 06. Okt. 2014 13:56 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich würde gerne eine automatische Zielwertsuche mit Excel 2010 für einen bestimmten Bereich erzeugen. Ziel ist es, in einer Liste automatisch in z.B. Spalte "D" Reihe 1-5 über Spalte "E" Reihe 1-5 eine Zielwertsuche zu starten. Dazu habe ich bereits ein Makro geschrieben. Es kommt allerdings immer ein Laufzeitfehler 1004 mit "Bezug ist ungültig". Das Makro habe ich euch mal angehängt. Die Daten werden über eine InputBox eingeholt. Ich freue mich auf eure Antworten, MfG Masterofsleepon Sub Zielwertsuche() Dim verSpalte, zielSpalte, oben, unten As String Dim zielwert As Integer verSpalte = InputBox("Bitte veränderbare Spalte als String eingeben", "veränderbare Spalte", "D") zielSpalte = InputBox("Bitte Zielspalte als String eingeben", "Zielspalte", "E") zielwert = InputBox("Bitte Zielwert als Int eingeben", "Zielwert", 10) unten = InputBox("Bitte unteren Zeilenwert als Int eingeben", "Unterer Wert", 6) oben = InputBox("Bitte obereren Zeilenwert als Int eingeben", "Oberer Wert", 21) For i = unten To oben Tabelle1.Range(zielSpalte & i).GoalSeek Goal:=zielwert, _ChangingCell:=Tabelle1.Range(verSpalte & i) Next
End Sub
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: 06. Okt. 2014 15:53 <-- editieren / zitieren --> Unities abgeben: Nur für Masterofsleepon
Moin, Variablendeklaration: Geht SO nicht, entweder, Du verwendest verSpalte$, zielSpalte$, oben$, unten$ ODER Du deklarierst einzeln: verSpalte as string, zielSpalte as string usw. Schau Dir dazu die Kurzbezeichnungen an: ( http://msdn.microsoft.com/de-de/library/s9cz43ek.aspx ) So, wie Du es stehen hast, hast Du NUR unten as String deklariert, den Rest als Variant und i überhaupt nicht. Setz die Option Explicit, um so etwas schnell zu sehen. Aber das nur am Rande. Zum Makro: Vorab: Ich hab keinerlei Schimmer von diesen Zielwertsuchen, hab mir das nur kurz via F1 reingezogen und komme damit auf folgende Überlegungen: Hast Du in jeder Zeile, die Du durchläufst, auch ein Polynom stehen? Bei mir kommt 'Dein' Fehler immer dann, wenn das eben nicht der Fall ist (Polynom nur in D1 und nicht mehr in D2, es sollen aber in E1 & E2 die Zielwerte berechnet werden) Wenn ich hergehe und den NAMEN "X" innerhalb der Schleife bei jedem i neu vergebe, läuft das Makro (auf den ersten Blick auch mit sinnvollen Ergebnissen) durch. Schau mal, ob Dir das jetzt schon irgendwie weiter hilft. Wenn nicht, sorry! Das war all mein Gold, ich hoffe, ich blamier mich damit jetzt nicht völlig
Code: Option ExplicitSub Zielwertsuche() Dim verSpalte$, zielSpalte$, oben$, unten$, i% 'As String Dim zielwert As Integer verSpalte = InputBox("Bitte veränderbare Spalte als String eingeben", "veränderbare Spalte", "D") zielSpalte = InputBox("Bitte Zielspalte als String eingeben", "Zielspalte", "E") zielwert = InputBox("Bitte Zielwert als Int eingeben", "Zielwert", 10) unten = InputBox("Bitte unteren Zeilenwert als Int eingeben", "Unterer Wert", 6) oben = InputBox("Bitte obereren Zeilenwert als Int eingeben", "Oberer Wert", 21) For i = unten To oben ActiveWorkbook.Names.Add Name:="X", RefersTo:=Tabelle1.Range(verSpalte & i) Tabelle1.Range(zielSpalte & i).GoalSeek Goal:=zielwert, ChangingCell:="X" 'Tabelle1.Range(verSpalte & i) Next ActiveWorkbook.Names("X").Delete End Sub
------------------ Gruß, runkelruebe 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: 06. Okt. 2014 18:46 <-- editieren / zitieren --> Unities abgeben: Nur für Masterofsleepon
hmm, was macht denn der "_" vor ChangingCell - Tippfehler?;-) <Laufzeitfehler 1004 mit "Bezug ist ungültig> erzwinge ich, wenn in der Zielzelle E keine Formel vorliegt. Code: Option ExplicitSub Zielwertsuche() Dim verSpalte$, zielSpalte$, zielwert%, oben%, unten%, i% '$ = String / % = Integer verSpalte = InputBox("Bitte veränderbare Spalte als String eingeben", "veränderbare Spalte", "D") zielSpalte = InputBox("Bitte Zielspalte als String eingeben", "Zielspalte", "E") zielwert = InputBox("Bitte Zielwert als Int eingeben", "Zielwert", 10) unten = InputBox("Bitte unteren Zeilenwert als Int eingeben", "Unterer Wert", 6) oben = InputBox("Bitte obereren Zeilenwert als Int eingeben", "Oberer Wert", 21) For i = unten To oben Tabelle1.Range(zielSpalte & i).GoalSeek Goal:=zielwert, ChangingCell:=Tabelle1.Range(verSpalte & i) Next End Sub
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: 06. Okt. 2014 19:22 <-- editieren / zitieren --> Unities abgeben: Nur für Masterofsleepon
|
Thomas Harmening Moderator Arbeiter ツ
Beiträge: 2897 Registriert: 06.07.2001 Das Innerste geäussert und aufs Äusserste verinnerlicht
|
erstellt am: 06. Okt. 2014 21:31 <-- editieren / zitieren --> Unities abgeben: Nur für Masterofsleepon
|
| Praktikant / Werkstudent (m/w/d) als Assistenz der Bauleitung | GOLDBECK?realisiert zukunftsweisende Immobilien in Europa. Wir verstehen Gebäude als Produkte und bieten alle Leistungen aus einer Hand: vom Design über den Bau bis zu Services im Betrieb. Aktuell beschäftigt unser Familienunternehmen mehr als 12.000 Mitarbeitende an über 100 Standorten bei einer?Gesamtleistung von über 6 Mrd. Euro. Unser Anspruch ?building?excellence? steht dabei für Spitzenleistungen ... | Anzeige ansehen | Assistenz, Sekretariat |
|
Masterofsleepon Mitglied Entwicklungsingenieur
Beiträge: 7 Registriert: 21.08.2014 Windows 7 Enterprise Intel Xeon CPU E5-2665 @2,4 GHz 128 Gb RAM 256 Gb SSD 2 TB im LSI RAID 5/6 _________________ NX - 8.5 Ansys 15.0
|
erstellt am: 07. Okt. 2014 08:45 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen zusammen, erstmal herzlichen Dank für die vielen Antworten. Zunächst das Problem mit dem "Unterstrich" Das ist hier mein erster Post im Excel-Bereich. In meiner Antwort war beim Code-Kopieren ein Zeilensprung entstanden. Da ich dachte, dass dieser dann nachher beim Copy-Paste Probleme bereitet, wollte ich mit dem Unterstrich die Zeile fortführen. War wohl nicht so clever von mir An Runkelruebe: Danke zunächst für den Hinweis mit der Variablendeklaration. Bin nur gelegentlich mit VBA unterwegs und hab mir nur ein gefährliches Halbwissen angeeignet. Da bin ich um solche Hinweise sehr dankbar. Wenn ich deinen Code einfüge, erhalte ich leider den gleichen Fehler. Nun zum eigentlichen Problem. Habe ein bisschen mit euren Hinweisen herumprobiert, bin aber so zunächst nicht zu einer Lösung gekommen. Habe dann die Sub noch einmal neu aufgebaut, und eigentlich das gleiche nochmal gemacht. Auf einmal läuft alles. (???) Kann mir grad nicht erklären, wieso, aber hier findet ihr den funktionierenden Code. Code:
Option Explicit Sub Zielwertsuche()Dim verSpalte$, zielSpalte$, oben%, unten%, i%, zielwert% ' verSpalte = InputBox("Bitte veränderbare Spalte als String eingeben", "veränderbare Spalte", "E") zielSpalte = InputBox("Bitte Zielspalte als String eingeben", "Zielspalte", "D") zielwert = InputBox("Bitte Zielwert als Int eingeben", "Zielwert", 10) unten = InputBox("Bitte unteren Zeilenwert als Int eingeben", "Unterer Wert", 6) oben = InputBox("Bitte obereren Zeilenwert als Int eingeben", "Oberer Wert", 19) For i = unten To oben Range(zielSpalte & i).GoalSeek Goal:=zielwert, ChangingCell:=Range(verSpalte & i) Next End Sub
Vielen Dank nochmals für eure Mithilfe,
Gruß Masterofsleepon [Diese Nachricht wurde von Masterofsleepon am 07. Okt. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|