AW: Daten autom. in andere Tabellen ein- u. ausles
22.05.2008 13:23:05
fcs
Hallo M.H.,
machen kann man in Excel mit Daten vieles. Für so einen koplexen Ablauf, wie er dir vorschwebt, wirst du keine halbwegs fertige Lösung finden. Also Auflösen des Problems in Teilprobleme - das hast du ja schon weitestgehend gemacht - und Lösungen für die Einzelprobleme suchen. Das hast du versucht, aber merkwürdigerweise nichts gefunden.
1.: Ich habe ein mathematisches Optimierungsprogramm, was durch einen Button über Excel aktiviert wird und selbststandig Daten in eine externe xls Tabelle schreibt
Das funktioniert also schon?
Wie heißt die Datei, wie die Tabelle, Wo kann Excel diesr Datei finden?
2.: Woran soll Excel erkennen, dass das Optimierungsprogramm die Berechnung abgeschlossen und die Exceldatei erstellt hat? Wie lange dauert so ein Optimierungs-Rechengang?
Dies ist aus meiner Sicht das schwierigste Problem.
3.: die dann in eine Ausgangstabelle übertragen werden sollen.
Wie heist die Tabelle (pfad, Dateiname, Tabellenname? Jedesmal die gleiche oder jeweils eine neue? Welche Daten/Tabellenbereiche sollen von wo nach wo übertragen werden?
4.: Aus dieser Ausgangstabelle also sollen gezielt Werte aus anderen externen xls Tabellen eingelesen werden, wenn der Button gedrück wird.
Wie heißen diese tabellen, Pfad, Dateiname, Tabellennamen?
Welche Zellinhalte sollen wo gelesen und wohin geschrieben werden?
5.: Zuerst sollen beim "Klick" die Rechenwerte alle auf "null" gesetzt werden,
Workbooks("MappeXYZ.xls").Worksheets("tabelleABC").Range("B2:K100")=0
wenn das externe Optimierungsprogramm durchgelaufen ist und in die externe Exceltabelle alle Werte geschrieben wurden, sollen diese in die Ausgangstabelle übertragen werden.
6.:
Darüber hinaus sollen direkt nach dem "Klick" Werte aus der Ausgangstabelle in eine andere externe Exceltabelle geschrieben werden.
Wann soll das genau passieren? Vor oder nach dem Einlesen der neuen Optimierungsrechnungs-Daten?
Pfad, Datei-, Tabellennamen
7.:
Schließlich sollen auf Basis von entsprechenden Eingabewerten in der Ausgangstabelle entsprechende Zeilen oder Spalten automatisch erzeugt werden.
Wann werden die Werte eingegeben? Vor dem Start des Makros in eine Tabelle oder sollen Eingabewerte vom Makro abgefragt werden?
8.:
Wenn als z.B. im Tabellenblatt 1 in der Zelle B8 der Wert 10 steht, sollen im Tabellenblatt2 der Ausgangstabelle automatisch 10 Zellen mit definierten Formatierungen und/oder Formeln erstellt werden.
Gibt es das Tabellenblatt schon? Welcher Zellbereich bzw. wie erkennt Excel den? Welches Format soll es sein? Wie lauten die Formeln?
Das ganze würde ich gern über ein Makro (falls möglich) erzeugen. Ich habe schon viel geschaut, finde aber auf die vielzahl der Einzelprobleme keine brauchbare Lösung.
Außer zum Punkt 2 der ist ggf. schwierig, findest du zu jeder Fragestellung (Wie finde Ich etwas, wie übertrage ich Werte zwischen Tabellen, wie formatiere ich, wie schreibe ich Formeln in Zellen) viele Antworten. Evtl. auch zu viele und für einen VBA-Anfänger etwas unübersichtlich
Ich würde mich über Hilfestellungen oder evtl. den Verweis auf vorhande und leicht anpassbare Makros sehr freuen.
Sobald du deine Fragen auf Teillösunen konzentrierst, wirst du anpassbare Teillösungen finden.
Da der Punkt 2 ggf. schwierig zu bearbeiten ist würde ich an deiner Stelle 2 Buttons einsetzen. Dein bisherigen, der die Optinmierungs-Rechnung startet.
Ein 2. Button für den Rest, der Ergebnisse der Rechnung in die tichtigen Tabellen verteilt und sonstige Aktionen ausführt.
Da hier verschiedene Arbeitsmappen und Tabellenblätter in die Aktionen involviert sind solltest du unbedingt für jede Arbeitsmappe und jedes Tabellenblatt immer eine entsprechende Objekt-Variable deklarieren.
Dim objWbQuelle as Workbook, objWbZiel as Workbook
Dim objWksQuelle as Workbook, objWksZiel as Worksheet
oder auch andere aussagekräftige VariablenNamen.
An passender Position im Code werden dann diesen Variablen die entsprechenden Objekte zugewiesen.
Nachfolgend ein Beispielcode mit verschiedenen Funktionen.
Gruß
Franz
Sub aatest()
Dim objWbQuelle As Workbook, objWbZiel As Workbook
Dim objWksQuelle As Worksheet, objWksEin As Worksheet, objWksAus As Worksheet
Dim lngFarbIndex As Long, bolRahmen As Boolean
Dim objBereich As Range, lngZeile As Long
Set objWbZiel = Workbooks("DateiABC.xls") 'Datei muss geöffnet sein
Set objWksEin = objWbZiel.Worksheets("Eingabe")
Set objWksAus = objWbZiel.Worksheets("Ausgabe")
Set objWbQuelle = Workbooks.Open(FileName:="C:\Test\Berechnung20080522_01.xls")
Set objWksQuelle = objWbQuelle.Worksheets(1)
'werte in Ausgabe übertragen
With objWksAus
'Zellen auf 0 setzen
.Range(.Cells(1, 2), .Cells(1, 3)) = 0
.Range(.Cells(2, 2), .Cells(15, 12)) = 0
'Werte eintragen
.Cells(1, 2) = objWksQuelle.Cells(1, 1)
.Cells(1, 3) = objWksQuelle.Cells(2, 1)
Set objBereich = .Range(.Cells(2, 2), .Cells(15, 12))
With objWksQuelle
objBereich.Value = .Range(.Cells(3, 1), .Cells(16, 11)).Value
End With
End With
'Formatierungen im Ausgabeblatt abhängig Zellwerten im Eingabeblatt ausführen
Select Case objWksEin.Range("B10").Value
Case Is