Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1472to1476
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Excel Makro brauche Hilfe bitte

Excel Makro brauche Hilfe bitte
14.02.2016 12:53:14
Stefan
Hallo jungs,
ich habe ein Problem und bitte euch um Hilfe.
Ich habe 4 Spalten in einer Excel Datei 1 mit Namen "Auswertung" auf Tabellenblatt "Teil1"
In den ersten beiden Zeilen steht jeweils die Überschrift und die Einheit.
Spalte 1 ist der Loadcase, Spalte 2 der Werkstofftyp, Spalte 3 die Dicke und Spalte 4 die Temperatur. Es sind immer unterschiedlich viele Zeilen, je nach Loadcase. Einmal nur 10 einmal aber 125.
Nun habe ich folgendes Problem.
In der zweiten Excel Datei mit Namen"Berechnung" muss ich für jeden der Loadcases jeweils eine Berechnung durchführen und das Ergebnis in die 5. Spalte zuweisen.
Beispiel:
Loadcase 1 in "Auswertung" auf Arbeitsblatt "Teil1": Werkstofftyp "X" Dicke "10" Temperatur "200"
Das Makro soll nun den Werkstofftyp die Dicke und Temperatur in Die Excel Datei "Berechnung" Arbeitsblatt "Übersicht" schreiben. Den Werkstofftyp in A1 die Dicke in A2 und die Temperatur A3.
Anshcließend gibt das Excel File den jeweiligen Wert aus (in A4). Dieser soll anschließend in 5. Spalte die Excel Datei 1 mit Namen "Auswertung" auf Tabellenblatt "Teil1" geschrieben werden (als Zahl und nicht verlinkt).
Das soll für alle Loadcases durchgeführt werden.
Ich habe sozusagen eine Auswerte Excel Datei und eine Berechnungs Excel Datei (diese ist für mich die Werkstoffdatenbank wo ich die Werte in Abhängigkeit von Werkstofftyp Dicke und Temperatur ermittle.
Bitte um Hilfe wär ich dankbar.
lg
Stefan

26
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel Makro brauche Hilfe bitte
14.02.2016 13:22:29
Stefan
achja ein dropdown menü in der database wär noch toll welches sich auf die Werkstoffdatenbank bezieht.

VBA-Teillösung erl., - Formelprofis gefragt
14.02.2016 19:08:44
Michael
Hi Stefan,
programmieren kann man "alles", aber je nach zu erwartender Anzahl von Werkstofftypen sollte man sich zuvor mal intensive Gedanken über eine "schöne" Datenstruktur machen.
Dazu zwei Fragen...
Wie viele Werkstoffe möchtest Du in der Datenbank haben?
Ist die Größe der jeweiligen Matrix bei unterschiedlichen Werkstoffen unterschiedlich?
... und zwei Anmerkungen:
Daß in 103534 in Tabelle2 und 3 jeweils der Bereich von D10:E16 weiß auf weiß dargestellt ist, ist zum Testen eher weniger hilfreich
Die Formeln lassen sich deutlich effizienter schreiben - kannst Du bitte mal in Worten mitteilen, was da rauskommen soll? Ich kann bei Eingabe von Dicke=20 und Temp=25 die Werte X4=140 und v.a. C45=1040 nicht recht logisch nachvollziehen.
Ich habe mal an Deiner Datei gebastelt:
1. Mit dem Button "Werkstoffe einlesen" wird A1 aus allen Tabellenblättern außer "Zentrale" ausgelesen und Hyperlinks erzeugt. Es bietet sich an, die Tabellenblätter kürzer zu benennen, z.B. W1, W2 usw.
Übrigens habe ich den Zellverbund von A1:B1 aufgehoben, der ist völlig überflüssig.
2. Die Berechnungen werden nur EINMAL ausgeführt, und zwar direkt im Blatt "Zentrale"
Sobald Du im Dropdown-Feld den Werkstoff änderst, wird die Matrix (und nur diese, ohne die Formeln) hereinkopiert; Änderungen von Dicke & Temperatur sind sofort sichtbar.
Diese Vorgehensweise sorgt dafür, daß die Formeln nur EINMAL in der Datei vorhanden sind, so daß mögliche Performance-Probleme bei sehr vielen Werkstoffen von vornherein ausgeschlossen sind.
Aber: falls die Größe der Matrix variabel ist, bietet es sich an, die Formeln ÜBER anstatt unter der Matrix anzubringen. Das sorgt dafür, daß insbesondere das Ergebnis immer in der gleichen Zelle steht und dort abgegriffen werden kann.
Das habe ich jetzt noch nicht gemacht, weil nähere Informationen fehlen.
Das Ansteuern dieser Datei durch die erste ist keine große Sache; das verfolgen wir weiter, wenn diese Datei so weit ist, daß es paßt: https://www.herber.de/bbs/user/103537.xlsm
Schöne Grüße,
Michael

Anzeige
AW: VBA-Teillösung erl., - Nachtrag
14.02.2016 20:26:25
Michael
Hi Stefan,
übrigens gibt es hier auch schlaue Mädels!
Ich habe Dir mal in I14, I15 und I16 ein paar Formeln reingeschrieben, die Dir evtl. bei der Vereinfachung Deiner Formeln auf die Sprünge helfen.
Außerdem kann ich - wie gesagt - Deine Rechenergebnisse nicht unbedingt nachvollziehen.
In H19 bis Q24 habe ich mal herumgerechnet, wie ich das Problem interpretiere - falls das paßt, kann man es natürlich auch deutlich komprimierter darstellen.
Ach so, in J4:N8 ist ne bedingte Formatierung, die die gefundene Zelle hervorhebt.
Die Datei: https://www.herber.de/bbs/user/103541.xlsm
Schöne Grüße,
Michael

Anzeige
AW: VBA-Teillösung erl., - Nachtrag
14.02.2016 21:27:15
Stefan
Hey, saustark vielen Dank für die Verbesserungen. Leider reichen meine excel Kenntnisse für vba programmieren nicht aus :-(. Schaut echt super aus. Ich kann nun beliebig viele Werkstoffe generieren und einlesen und sehe die jeweiligen Werte gleich auf der Übersicht. Genial =). Ich habe noch die Norm dazugefügt. Dazu kopierte ich einfach deine erste Zeile im Makro wo die Zellangaben sind.
Wäre es auch möglich, sollte sich die Norm ändern und ich muss die Werte im gelben feld ändern das ich einen zweiten Button habe, um die geänderten Werte zurück ins jeweilige Tabellenblatt zu kopieren?
Danke das ist ein guter Tipp die Berechnungsvorschriften oberhalb zu machen damit ich wenn nötig die Matrix erweitern kann.
Also die Berechnung ist so:
zuerst wird abhängig von der jeweiligen Dicke die entsprechende Zeile in der Matrix ausgegeben.
0 kleiner als x kleiner als 20
20 kleiner gleich x kleiner als 30
usw
dann wird abhängig der Temperatur die jeweiligen Nachbarpunkte angezeigt.
Anschließend erfolgt eine lineare Interpolation in der Matrix und dem zuvor ermittelten Zellbereich (ist ja abhängig von der Dicke).
Das Problem ist die lineare Interpolation, die Temperatur und Dickenabhängigkeit. Deshalb auch so kompliziert. IM Prinzip nur eine lineare Interpolation mit den benachbarten Stützpunkten im jeweiligen Bereich für die Dicke.
Naja ich denke net mehr als 30 - 40 Werkstoffe.
Aber mal sehen was Excel hergibt.
Es kann vorkommen das ich mehrere Zeilen bei einem Werkstoff habe (Matrix) aber dann muss ich einfach nur die Formel anpassen oder?
Vielleicht kann man den Wert auch einfacher ermitteln. Ich habe leider nur diesen. Aber er scheint zu funktionieren. Habe die Felder weiss gemacht weil ich die Werte nicht sehen wollte.
Habe es ja nicht ohne die HIlfswerte hinbekommen. Wichtig ist nur das interpolierte Ergebnis.

Anzeige
AW: VBA-Teillösung erl., - Nachtrag
14.02.2016 21:31:37
Stefan
anscheinend muss ich die Formel bearbeiten. Da scheinen noch Fehler enthalten zu sein :-(

polynomisch statt linear?
15.02.2016 15:54:43
Michael
Hi Stefan,
und was ist mit meiner Berechnung? Stimmt die?
Abgesehen davon: das ist mir die ganze Nacht nicht aus dem Kopf gegangen: wie kommst Du zu den Werten in der Matrix? Sind die jeweils gemessen? Liegt Dir da eine feinere Matrix vor? Oder gar Formeln je Zeile/Spalte?
Diese Wertematrix ist ja gedanklich als 3D-Diagramm so was wie ein Gebirge... Wenn man pro Zeile & Spalte von bekannten Werten ein Polynom n-ter Ordnung ermittelt, kann man mit ein bißchen Rechnerei nämlich eine Interpolation anhand der Polynome machen, die deutlich zutreffender sein sollte als eine lineare.
Würde mich direkt interessieren, das mal durchzurechnen.
Schöne Grüße erst mal,
Michael

Anzeige
AW: polynomisch statt linear?
15.02.2016 19:47:50
Stefan
Hey,
so sorry ich habe jetzt 3 mal das gleiche geschrieben :D aber jetzt habe ich das Feld gefunden wie ich genau auf deine Nachricht antworten kann :D
Hey,
ja also ich darf leider wegen Geheimhaltung nicht soviel sagen. Also die Werte sind alle gemessen. Das Problem: Ich darf kein Polynom nter Ordnung nehmen. An das habe ich e gedacht. Dann wäre es ja e leichter. Laut Vorschrift muss ich zwischen 2 benachbarten Werten linear interpolieren. Das macht die Sache ja so kompliziert. Aber schaue mal bitte meine neue excel Datei an. So sollte es jetzt passen.
Könntest du mir bitte noch einen Button reingeben sodass ich neue Werte einfach von der Übersicht in das jeweilige Tabellenblatt lesen kann?
ALso die lineare interpolation abhängig von der Wanddicke und Temperatur müsste jetzt stimmen. Habe die Datei vorhin gepostet.
Vielen Vielen Dank =)
So sollte es passen:
https://www.herber.de/bbs/user/103545.xlsm

Anzeige
AW: polynomisch statt linear?
15.02.2016 19:50:15
Stefan
ich verstehe nicht ganz wie du gerechnet hast :-(
Aber also ich komm leider nicht umhin eine lineare interpolation zu machen.
Da sist ein echter "sch...." weil komplizierter zu bewerkstelligen. Habe meine Formel überprüft und sie müsste jetzt stimmen. Er sucht halt je nach Dicke die entsprechende Zeile und interpoliert abhängig der Temperatur linear zwischen den Nachbarwerten.

im Prinzip ja
15.02.2016 20:40:05
Michael
Hi Stefan,
das mit der Übernahme der Werte kann ich machen, aber erst morgen- habe heute keine Zeit mehr.
Ob die Berechnung allerdings richtig ist, mag ich nicht überprüfen, dafür sind mir die Formeln zu lang.
Vorab nur der Hinweis: wenn Du den Button "Werkstoffe" drückst, holt sich das Makro die Namen der Werkstoffe aus dem jeweiligen Tabellenblatt in A1 - und überschreibt alle Werte in der "Zentrale".
Es hilft Dir also nicht viel, wenn in den *Blättern* in A1 nur Test1 usw. steht, damit werden die (von Dir händisch eingegebenen) Werte für die Listbox überschrieben...
Bis denn,
Michael

Anzeige
AW: im Prinzip ja
15.02.2016 21:10:34
Stefan
ok vielen Dank. Ja Klar kann ich verstehen Danke =)
Aber habe ich das richtig erklärt mit den Interpolierten Werten? Bzw. weist du was ich meine?
Wie ist deine Formel zu verstehen?
Hast du vielleicht eine Idee wie ich den interpolierten Wert einfacher ermitteln kann?
:-(
Eine schöne gute Nacht wünsch ich dir und vielen Dank nochmals für die tolle Hilfe!

AW: im Prinzip ja
15.02.2016 21:21:37
Stefan
Hier nochmal die Datei wo die Werte stehen sollen.
Ist es viel Mehraufwand wenn ich zb für 2 oder 3 oder 4 Temperaturen die Streckgrenzenwerte auslesen will? Es kann vorkommen da sich 3 oder 4 verschiedene Temperaturen ermitteln muss.
Wäre toll wenn das dann auch für mehrere loadcases gehen würde. Irgendwie also alle Streckgrenzen ermitteln bis Ende Loadcase.
Könnte ich dann selber das Makro ändern, wenn ich zb für 3 Temperaturspalten die STreckgrenzen auslesen will.?
Vielleicht ist es besser Temperatur 1,2,3 nacheinander in der Spalte zu schreiben und dann Streckgrenze 1 2 und 3
https://www.herber.de/bbs/user/103573.xlsx

Anzeige
Berechnung
16.02.2016 17:43:43
Michael
Hallo Stefan,
um Dich zu zitieren: "Hast du vielleicht eine Idee wie ich den interpolierten Wert einfacher ermitteln kann?"
Vielleicht, sobald ich genau weiß, was Du Dir vorstellst - siehe Datei mit der Erklärung meiner Formel und einem zweiten Tabellenblatt mit einer Kritik der Berechnungen: https://www.herber.de/bbs/user/103597.xlsx
Alles weitere, wenn Du Dich damit befaßt hast...
Schöne Grüße,
Michael

AW: Berechnung
16.02.2016 21:31:01
Stefan
Hey,
also vielen Dank für die ausführliche Beschreibung. Sorry ich habe es vielleicht unklar geschrieben. Die Angabe der Wanddicke wie du geschrieben hast dient nur zur Klassierung der Reihe in der Matrix J4 bis N8. Innerhalb einer Klassierung zb Dicke 0 bis 10mm muss ich dann nur mehr eine lineare Interpolation durchführen wie du gemacht hast.
Beispiel: Dicke 5mm / 15° Zwischen 10 und 20° entsprechend 100 und 90 in der Matrix.
Es ist deshalb zum Glück etwas einfacher.
Es stimmt auch das die zweite Spalte Überflüssig ist. Zwecks Übersicht habe ich sie dazugeschrieben. Soll einfach heißen von bis.
In der DIN Norm stehen die Werte auch so drinnen. Also 0 kleiner als x kleiner als Wert1 Wert1 kleiner gleich x kleiner als Wert2
Es stimmt auch das die 50 überflüssig sind. Naja die Norm ist e nur definiert bis zu einem gewissen maximalen Wert.
Meine entwickelte Formel ist ja recht umständlich berechnet aber die Werte richtig. Naja deine ist viel besser!!!!! Ich kann auch sehr einfach die Felder erweitern und ich brauche nur eine Zelle zum Berechnen.
Es ist also genau so wie du mir erklärt hast nur eben nicht mit der 3dimensionalen Abhängigkeit. Brauchte nur L22 aus dem Rennen nehmen. und folgendes in I15 schrieben sodass ich auch für die jeweils maximalen Temperaturen die Werte bekomme (Zelle I15)
Habe anschließend die Bombenlegerformel entwickelt, sodass ich nur mehr eine Zelle brauche.
Werde nur mehr die Eingabe und Ausgabe Zellen anders positionieren und die gelbe Matrix vergrößern.
VIELEN DANK! Ich wäre alleine nicht auf die Möglichkeit gekommen mit Index und Vergleich zu arbeiten. Ist viel besser und schöner. Hier anbei die leicht veränderte Version.
JA es sind alles Streckgrenzenwerte in Abhängigkeit von Temperatur für verschiedene Bauteildicken.
Gemessen laut DIN Norm.
Diese Werkstoffdatenbank dient als Grundlage und in der "INPUT Excel Datei soll eben für alle LOadcases die entsprechenden INterpolierten Werte reingespielt werden. HAbe untershciedliche Werkstoffe Dicken und Temperaturen.
Nachdem ich die interpolierten Streckgrenzen (sind die Basis zur Festigkeitsberechnung.... deshalb sehr wichtig). Gehe ich ins Mathcad und führe Berechnungsroutinen durch. (Hier werden eben die zuvor initialisierten Streckgrenzen Dicken Temperaturen und viele andere Parameter zur Berechnung herangezogen.
Ergebnisse werden dann ins gleiche Input File rückinitialisiert.
=)
Bin noch ziemlich am Anfang mit dem ganzen aber es hilft mir schon sehr viel wenn die Streckgrenzenwerte reingespielt werden. Zuvor interpolierte ich immer manuell was auch leider zu sehr vielen ärgerlichen Tippfehlern führte (suchen der entsprechenden zwei Nachbarpunkte usw)
https://www.herber.de/bbs/user/103601.xlsx
Hier die neue Datei mit Bombenlegerformel.
Die Befehle Index, Vergleich etc kannte ich nicht.
Suuuupi wieder etwas weitergekommen =)
Danke!
Jetzt würde nur mehr das Initialisieren in die Input Datei fehlen =)
LG
Stefan

Anzeige
AW: Berechnung
16.02.2016 21:35:57
Stefan
hmmm wobei so falsch ist meine Formel e nicht oder?
Wohl nur 1000x umständlicher.
Hehe

AW: Berechnung
16.02.2016 21:45:50
Stefan
a wie geht den das mit der bedingten Formatierung das sieht echt supa aus?
Danke

Schau mal
17.02.2016 03:45:17
Michael
Hi Stefan,
also, dann schau mal hier: https://www.herber.de/bbs/user/103609.zip
Die Datein sind deshalb gezipt, weil man dabei die Dateinamen ohne Gefummel transportieren kann (ohne daß das Forum Nummern vergibt).
Ich hoffe, es ist kein Hund drin, aber es ist spät und ich mag nimmer.
Schöne Grüße,
Michael

Anzeige
AW: Schau mal
17.02.2016 19:39:23
Stefan
Hey das nenn ich mal saugeil yea.
Vielen vielen Dank für deine Bemühungen.
Habe das Makro etwas modifiziert, sodass ich nun gleich die Werte bei einer Dicke und 2 verschiedenen Temperaturen ermitteln kann. Die Werte schauen dann so aus in Spalten:
Werkstoff/Dicke/Temperatur1/Temperatur2/Gemittelt1/Gemittelt2/
und erweitert auf mehrere Tabellenblätter. Kann nun auf jedem Tabellenblatt unabhängig die Werte einlesen (Button auf allen Blättern). Das ist echt super. Kann nun mit den Werten in meine Mathcad Routine gehen.
Eine Frage hätte ich noch:
Wie kann ich dem Excel den Pfad mitteilen wo er die Werkstoffdatenbank findet. Die liegt wahrscheinlich zentral am Server und nicht dort wo ich die Dateien reinkopiere? Probierte es damit:
Set dieses = ActiveWorkbook
Set dies = Sheets("WerteLaden 2")
zmax = dies.Range("B" & dies.Rows.Count).End(xlUp).Row
pfad = ActiveWorkbook.Path & "C:\Users\soletto\Desktop"
datei = "103601_Werkstoffe_DB.xlsm"
Irgendwie bin ich wohl zu blöd dafür
Schaut ja echt logisch aus das Makro. Aber ohne VB Kenntnisse fast unlösbar für mich ;-(
Danke Danke! Hast mir echt sehr geholfen!
Liebe Grüße,
Stefan

AW: Schau mal
17.02.2016 20:22:32
Michael
Hi Stefan,
freut mich, wenn Du Dich freust!
Netzwerk-Pfade können etwas tricky sein, aber das lese ich nur immer am Rande, ich habe kein Netz...
Abhilfe, wenn es biestig sein sollte, schafft nur die Suchmaschine: excel vba pfad netzwerk
oder so.
Aber langsam:
Set dieses = ActiveWorkbook
Set dies = Sheets("WerteLaden 2")
zmax = dies.Range("B" & dies.Rows.Count).End(xlUp).Row
' ***** das kann nicht gehen:
pfad = ActiveWorkbook.Path & "C:\Users\soletto\Desktop"
datei = "103601_Werkstoffe_DB.xlsm"
Laß Dir zum Verständnis einfach mal ausgeben:
MsgBox ActiveWorkbook.Path
da kommt in meinem Herber-Verzeichnis (mit A vornedran, damit's immer gleich oben ist) so was raus:
C:\A_Herber
Was fehlt, ist der Slash zwischen Pfad und Datei, den muß man händisch anhängen, also ergibt
MsgBox ActiveWorkbook.Path & "\" nämlich C:\A_Herber\ - hier kommt der Dateiname dran, beim Öffnen mit .Open pfad & datei
pfad = ActiveWorkbook.Path & "C:\Users\soletto\Desktop"
ist natürlich Quatsch, das wäre dann C:\Users\soletto\DesktopC:\Users\soletto\Desktop oder so, gib's einfach mal aus: msgbox ActiveWorkbook.Path & "C:\Users\soletto\Desktop"
Also gut, wenn das Netzlaufwerk als H gemapt ist, dann halt z.B. pfad = "H:\Daten\Bla\" MIT Slash.
Schöne Grüße,
Michael

AW: Schau mal
19.02.2016 17:36:02
Stefan
Vielen Dank.
Es funktioniert. Wär fast dran verzweifelt hehe!!!!!!
Kann sie nun auch erweitern mit mehreren Temperaturen.
Verstehe nun den VB Code einigermaßen :-)

AW: Schau mal
19.02.2016 21:04:29
Stefan
Danke eine bitte noch =)
Wie kann ich die #NV löschen, wenn ich mal keine Temperatur habe in allen Spalten?
Option Explicit
Sub DateiOeffnen()
Dim pfad$, datei$
Dim dieses As Workbook, dasandere As Workbook
Dim dies As Worksheet, das As Worksheet
Dim z&, zmax&
Dim a As Variant
Set dieses = ActiveWorkbook
Set dies = Sheets("Jacket Pipe")
zmax = dies.Range("A" & dies.Rows.Count).End(xlUp).Row
pfad = ActiveWorkbook.Path & "\"
datei = "103601_Werkstoffe_DB.xlsm"
Workbooks.Open Filename:=pfad & datei
Set dasandere = ActiveWorkbook
Set das = dasandere.Sheets("Zentrale")
a = dies.Range("D1:AB" & zmax)
' Yield Strenth @ Tmin for checking duktility
For z = 3 To zmax
das.Range("I3") = a(z, 15)
das.Range("I4") = a(z, 14)
Application.Run datei & "!WerkstoffLaden", a(z, 1)
dies.Range("AD" & z) = das.Range("I1")
Next
' Yield Strenth @ T1
For z = 3 To zmax
das.Range("I3") = a(z, 15)
das.Range("I4") = a(z, 17)
Application.Run datei & "!WerkstoffLaden", a(z, 1)
dies.Range("AE" & z) = das.Range("I1")
Next
' Yield Strenth @ T2
For z = 3 To zmax
das.Range("I3") = a(z, 15)
das.Range("I4") = a(z, 19)
Application.Run datei & "!WerkstoffLaden", a(z, 1)
dies.Range("AF" & z) = das.Range("I1")
Next
' Yield Strenth @ T3
For z = 3 To zmax
das.Range("I3") = a(z, 15)
das.Range("I4") = a(z, 21)
Application.Run datei & "!WerkstoffLaden", a(z, 1)
dies.Range("AG" & z) = das.Range("I1")
Next
' Yield Strenth @ T4
For z = 3 To zmax
das.Range("I3") = a(z, 15)
das.Range("I4") = a(z, 23)
Application.Run datei & "!WerkstoffLaden", a(z, 1)
dies.Range("AH" & z) = das.Range("I1")
Next
' Yield Strenth @ T5
For z = 3 To zmax
das.Range("I3") = a(z, 15)
das.Range("I4") = a(z, 25)
Application.Run datei & "!WerkstoffLaden", a(z, 1)
dies.Range("AI" & z) = das.Range("I1")
Next
dasandere.Close savechanges:=False
End Sub
Also Spaltwe AE .... AI wo die gemittelten Werte eingetragen werden. Hättest vielleicht eine VB Zeile die ich im Anschluss einbauen kann sodass er die Zelle dann leer lässt?
Danke

tja, die Geheimhaltung...
20.02.2016 16:24:18
Michael
Hi Stefan,
... führt dazu, daß die Antworten auch relativ geheim sind und hier nicht gepostet werden können.
Aber im Ernst: ich wollte eh schon mal darauf anspringen, daß die Formeln nicht recht funktionieren, wenn komplette Spalten oder auch einzelne Werte fehlen.
Die #NV finde ich im Prinzip auch gar nicht schlecht, denn Du mußt doch wissen, ob die Geschichte geklappt hat oder nicht!
Aber egal, das Ergebnis steht ja immer in das.Range("I1"), und wenn Du im Ergebnisblatt kein #NV stehen haben willst, kannst Du bei der Zuweisung eine Abfrage auf Fehler einbauen:
If IsError(das.Range("I1")) Then
dies.Range("AI" & z) = ""
Else
dies.Range("AI" & z) = das.Range("I1")
End If
Schöne Grüße,
Michael

AW: tja, die Geheimhaltung...
23.02.2016 19:43:48
Stefan
Hey Vielen Dank,
ja ich weiss ich will irgendwie keine Probleme bekommen mit der Firma bin mir da so unsicher was ich posten darf (bin ja erst 3 wochen da). Tut mir leid. Möchte dir ja gerne zeigen für was ich alles brauche :-(.
Mein Problem ist das ich die so ermittelten Werte in ein Berechnungsprogramm laden muss. Und das gibt einen Fehler aus wenn #NV steht. Wenn die Zelle ler ist dann steht im Berechnungsprogramm zumindest "NaN".
Ich kapier irgendwie überhaupt nicht wo ich die Schleife einbauen kann :-(
Wo kann ich das einbauen? WIe meinst du das?

AW: tja, die Geheimhaltung...
23.02.2016 19:51:00
Stefan
Hmm ich kann es ja beschreiben für was ich alles brauche.
Also die Werkstoffdatenbank beinhaltet die Streckgrenze eben in Abhängigkeit der Temperatur und eben der Wanddicke. Dank deiner tollen Hilfe kann ich jetzt die Werte super linear interpolieren und ins excel File eintragen lassen. (Immer relativ viel Aufwand bei vielen Loadcases). Lineare INterpolation schreibt Gesetz vor. Anschließend gehe ich mit den so ermittelten Werten + vielen anderen in Mathcad und Berechne mir zulässige Werte. Diese sind natürlich für alle weiteren Untersuchungen relevant.
Bin jetzt gerade eben dabei das NV automatisch durch eine leere Zelle ersetzen zu lassen und die Mathcad Berechnungsroutine aufzubauen.
Dauert halt alles, da ich ein absoluter VB Programmier Anfänger bin. Aber ich bin ja echt schon viel weiter gekommen.
HAbe noch massive Probleme mit der Mathcad Excel Koppelung und Dezimalstellen die vershcluckt werden und mir an den Rand des Wahnsinns treiben.
Die Werkstoffdaten sind leider streng geheim deshalb die Phantasiewerte :-(
Aber die Interpolation funktioniert jetzt ja und ich kann die Datenbank befüllen =)

AW: tja, die Geheimhaltung...
23.02.2016 19:55:38
Stefan
Geil es funzt:
Option Explicit
Sub DateiOeffnen()
Dim pfad$, datei$
Dim dieses As Workbook, dasandere As Workbook
Dim dies As Worksheet, das As Worksheet
Dim z&, zmax&
Dim a As Variant
Set dieses = ActiveWorkbook
Set dies = Sheets("HPPipe")
zmax = dies.Range("A" & dies.Rows.Count).End(xlUp).Row
pfad = ActiveWorkbook.Path & "\"
datei = "103601_Werkstoffe_DB.xlsm"
Workbooks.Open Filename:=pfad & datei
Set dasandere = ActiveWorkbook
Set das = dasandere.Sheets("Zentrale")
a = dies.Range("D1:AK" & zmax)
' Yield Strenth @ Tmin for checking duktility
For z = 3 To zmax
das.Range("I3") = a(z, 14)
das.Range("I4") = a(z, 15)
Application.Run datei & "!WerkstoffLaden", a(z, 1)
If IsError(das.Range("I1")) Then
dies.Range("AE" & z) = ""
Else
dies.Range("AE" & z) = das.Range("I1")
End If
Next
' Yield Strenth @ TAmb for
For z = 3 To zmax
das.Range("I3") = a(z, 14)
das.Range("I4") = a(z, 16)
Application.Run datei & "!WerkstoffLaden", a(z, 1)
If IsError(das.Range("I1")) Then
dies.Range("AF" & z) = ""
Else
dies.Range("AF" & z) = das.Range("I1")
End If
Next
' Yield Strenth @ T1
For z = 3 To zmax
das.Range("I3") = a(z, 14)
das.Range("I4") = a(z, 18)
Application.Run datei & "!WerkstoffLaden", a(z, 1)
If IsError(das.Range("I1")) Then
dies.Range("AG" & z) = ""
Else
dies.Range("AG" & z) = das.Range("I1")
End If
Next
' Yield Strenth @ T2
For z = 3 To zmax
das.Range("I3") = a(z, 14)
das.Range("I4") = a(z, 20)
Application.Run datei & "!WerkstoffLaden", a(z, 1)
If IsError(das.Range("I1")) Then
dies.Range("AH" & z) = ""
Else
dies.Range("AH" & z) = das.Range("I1")
End If
Next
' Yield Strenth @ T3
For z = 3 To zmax
das.Range("I3") = a(z, 14)
das.Range("I4") = a(z, 22)
Application.Run datei & "!WerkstoffLaden", a(z, 1)
If IsError(das.Range("I1")) Then
dies.Range("AI" & z) = ""
Else
dies.Range("AI" & z) = das.Range("I1")
End If
Next
' Yield Strenth @ T4
For z = 3 To zmax
das.Range("I3") = a(z, 14)
das.Range("I4") = a(z, 24)
Application.Run datei & "!WerkstoffLaden", a(z, 1)
If IsError(das.Range("I1")) Then
dies.Range("AJ" & z) = ""
Else
dies.Range("AJ" & z) = das.Range("I1")
End If
Next
' Yield Strenth @ T5
For z = 3 To zmax
das.Range("I3") = a(z, 14)
das.Range("I4") = a(z, 26)
Application.Run datei & "!WerkstoffLaden", a(z, 1)
If IsError(das.Range("I1")) Then
dies.Range("AK" & z) = ""
Else
dies.Range("AK" & z) = das.Range("I1")
End If
Next
dasandere.Close savechanges:=False
End Sub

Daaaaaaaaaaaaaaaaaaaaaaaaaaaaanke =)

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige