Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1592to1596
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

Programm läuft nur im Einzelschritt

Programm läuft nur im Einzelschritt
04.12.2017 16:23:15
M.
Hallo,
ich bin neu hier und hoffe keine schlimmen Fehler im umgang mit den Forumregeln zu machen.
Ich habe ein Problem: Ich habe ein Programm in VBA geschrieben, das prinzipell läuft - wenn ich es mittels F8 in Einzelschritten ausführe.
Sinn und Zweck des Programms: Mittels des (in Excel) eingebauten Solvers werden in einer for-schleife Lösungen von Extremwertproblemen* in ein Array geschrieben. Das funktioniert auch.
* Für die Interessierten: Es Handelt sich um ein Programm zur Berechnung einer Kupferspule unter Berücksichtigung der Temperatur. Der Knackpunkt ist, das der Widerstand des Kupfers größer wird, je heißer er wird. Dazu kommt die Problematik, dass dünner Draht zwar mehr Windungen zu lässt aber bei gleichem Strom heißer wird ...
Nun zurück zum Problem:
Also die Arrays "Plot" und "d" sind garantiert richtig berechnet. Ich konnte das Problem im Teil des Programms, welches zur Erstellung der Diagramme zuständig ist lokalisieren. Das komplette Programm ist leider zu umfangreich um es hier zu Posten, deshalb habe ich hier nur den kritischen Teil eingefügt.
'=============================================================
'==================== Plot 1: Drahtdurchmesser d =============
'Application.Wait (Now + TimeSerial(0, 0, tWait))
m = 1 'für Positionierung des Diagramms
Set MyChart = ActiveSheet.Shapes.AddChart(xlXYScatterLines).Chart
Sleep tWaitMs
ActiveSheet.ChartObjects(m).Left = Range("E23").Left
Sleep tWaitMs
ActiveSheet.ChartObjects(m).Top = Range("E23").Top + (m - 1) * 0.5 * Application.Height
Sleep tWaitMs
ActiveSheet.ChartObjects(m).Height = 0.5 * Application.Height
Sleep tWaitMs
ActiveSheet.ChartObjects(m).Width = 0.5 * Application.Width
Sleep tWaitMs
'Alle Datenreihen löschen
While MyChart.SeriesCollection.Count > 0
MyChart.SeriesCollection(m).Delete
Sleep tWaitMs
Wend
With MyChart
Sleep tWaitMs
.PlotArea.Width = Round(0.5 * Application.Width - Legendenbreite - 1, 0)
Sleep tWaitMs
'.Legend.Font.Bold = True
.HasTitle = True
Sleep tWaitMs
'.ChartTitle.Text = "Verlauf der Kenngrößen einer Spule für alle Grenztemperaturen"
.Axes(xlCategory).MinimumScale = Plot(0)
Sleep tWaitMs
.Axes(xlCategory).MaximumScale = Plot(n)
Sleep tWaitMs
'Drahtdurchmesser
.SeriesCollection.NewSeries
Sleep tWaitMs
.SeriesCollection(m).Name = "Drahtdruchmesser [mm]"
Sleep tWaitMs
.SeriesCollection(m).XValues = Plot
Sleep tWaitMs
.SeriesCollection(m).Values = d
Sleep tWaitMs
.PlotArea.Width = Round(0.5 * Application.Width - Legendenbreite - 1, 0)
Sleep tWaitMs
End With
Sleep tWait

Der zugehörige Fehler:
Laufzeitfehler '-2147467259 (80004005)':
Automatisierungsfehler
Nicht spezifizierter Fehler
Googlen hat ergeben:
"Um dieses Problem zu umgehen, heben Sie die Schutz für das Arbeitsblatt auf, um die Ausführung des Makros zu erlauben. Das Arbeitsblatt kann manuell aufgehoben oder mit der Unprotect - Methode im Makro."
Nun, das Arbeitsblatt hat sicher keinen Schutz - ich habe die Unprotect - Methode im Makro dennnoch getestet - ohne Erfolg.
Und wie gesagt: Mit F8 (Einzelschritt) funktioniert das Ganze!
Ich habe die Vermutung das das Programm etwas zu schnell für Excel ausgeführt wird - Aus diesem Grund habe ich die Sleep-befehle (je 0.1 s) eingefügt. Ohne Erfolg.
Ich habe auch Application.ScreenUpdating = False und ähnliche Späße getestet.
So allmählich bin ich mit meinem Latain am Ende!
Hat jemand eine Idee wie ich VBA mitteilen kann, dass es das Programm bitteschön "Zeile für Zeile" abzuarbeiten hat, notfalls mit warten?
Eine Anmerkung am Ende: Es gibt diese Plotsektion - Stand jetzt - 8 mal. Diese sind abgesehen von den zu plottenden Werten identisch. Der Abbruch kommt nicht immer in der ersten Sektion, manchmal auch in der 2. und ganz selten auch erst in der 3. Je nach dem wie gut die CPU aus dem Wochenende kommt -.-' . Im Übrigen können wir "zu langsame Hardware" wohl ausschließen. Es ist eine Workstation mit Dual CPU und 24 physischen Kernen die nicht ganz schwach auf der Brust ist.

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Programm läuft nur im Einzelschritt
04.12.2017 17:24:55
onur
Deaktiviere mal Multithreadberechnung bei Optionen/Erweitert.
AW: Programm läuft nur im Einzelschritt
04.12.2017 17:44:21
M.
Zunächst einmal vielen Dank für die schnelle Rückmeldung.
Eine vortreffliche Idee!
Leider war die Umsetzung nicht von Erfolg gekrönt. Das Problem besteht weiterhin.
AW: Programm läuft nur im Einzelschritt
04.12.2017 17:45:38
onur
Poste mal die Datei.
AW: Programm läuft nur im Einzelschritt
05.12.2017 07:33:22
M.
Guten Morgen,
die Datei ist im hier:
https://www.herber.de/bbs/user/118097.xlsm
Die fraglichen Makros sind im Tabellenblatt "Hauptseite" hinterlegt.
Anmerkung: Es ist wahrscheinlich nicht notwendig die komplette Berechnung der Werte auf der "Hauptseite" nachzuvollziehen. Ich erwähne dies, weil es etwas Zeitraubend sein könnte :D.
Vielen Dank schonmal.
Anzeige
[Solved] Programm läuft nur im Einzelschritt
05.12.2017 13:49:44
M.
Ich habe mittlerweile selbst weiter an dem Problem gearbeitet und es isolieren und lösen können.
Ich hinterlasse die Lösung hier, in der Hoffnung, dass es in Zukunft jemandem nutzt!
Nun ich konnte die Zeile isolieren die Probleme bereitet:
.PlotArea.Width = Round(0.5 * Application.Width - Legendenbreite - 1, 0)
Die Lösung:
    With .PlotArea
Application.ScreenUpdating = False
.Select
With Selection
.Width = Round(0.5 * Application.Width - Legendenbreite - 1, 0)
.Height = 0.5 * Application.Height - Titelhoehe
.Left = 0
.Top = Titelhoehe
End With
Application.ScreenUpdating = True
End With

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige