Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1700to1704
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

VBA-Excel hängt sich auf

VBA-Excel hängt sich auf
04.07.2019 11:34:39
Tobias
Hallo zusammen,
mein Excel-Programm hängt sich nach einigen Minuten auf.
Die Commandbuttons stürzen ab und der Taskmanager zeigt, dass die Prozessorauslastung extrem hoch ist(45%).
Userbild
Kann mir jemand einen Ansatzpunkt geben, wie so ein Problem entsteht?
Viele Grüße
Tobi

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Schlagzeile: Excel begeht Selbstmord!!!
04.07.2019 11:37:18
Torsten
Scherz...
Hallo,
schwer nachzuvollziehen, ohne Code und Datei zu kennen.
Gruss
Ohne Code auch kein Ansatzpunkt! (owT)
04.07.2019 11:37:54
EtoPHG

AW: VBA-Excel hängt sich auf
04.07.2019 11:55:33
Daniel
HI
auf Basis der von dir gegeben Informationen zu deiner Datei fällt mir nur folgender Ansatzpunkt ein:
du hast zu viele Commandbuttons in der Datei.
wie viele sind es denn?
ggf kann man über das BeforeDoubleClick-Event die Funktionalität mit einfachen Excelzellen nachbilden.
Gruß Daniel
AW: VBA-Excel hängt sich auf
04.07.2019 12:33:50
Tobias
Hallo Daniel,
es sind ca. 50 Knöpfe. Bereiten diese VBA solche Probleme?
Viele Grüße
Tobias Aichele
AW: VBA-Excel hängt sich auf
04.07.2019 13:59:08
Daniel
Hi
schwer zu sagen, kommt u.U. noch darauf an, was noch dahintersteckt.
ActiveX-Steuerelemente sind schon aufwendig.
ggf wären einfache Grafikelemente hier passender (auch über diese kann man bei Bedarf ein Makro starten)
und wie gesagt, die Informationen, die du bisher über deine Datei geliefert hast, sind wirklich seeeeeeeeehr spärlich.
Gruß Daniel
Anzeige
AW: VBA-Excel hängt sich auf
05.07.2019 09:34:17
Tobias
Hallo,
Public Sub HighPrioSQL() 'Priorisierungsroutine--> Auswahl des nächsten Produktes
Dim Prio As Integer
Dim Auftagsnummer As Integer
Dim Lagernummer As Variant
Dim SQL_String As String
On Error GoTo ErrH:
Call LagerPrüfen
SQL_String = "UPDATE Wabenregal SET PrioWert = PrioWert -999 WHERE PrioWert > 999 AND Lagerzeit  _
 0 AND Auftrag > 0;"
Prio = SQL_RFID_Abfrage(SQL_String)
SQL_String = "SELECT Auftrag FROM Wabenregal WHERE PrioWert = '" & Prio & "';"
Auftragsnummer = SQL_RFID_Abfrage(SQL_String)
SQL_String = "select TOP 3 * from Wabenregal WHERE PrioWert > 0 order by PrioWert ASC ;"
Lagernummer = SQL_RFID_Abfrage_Array(SQL_String)
Call Interface_setBack
If Not IsNull(Lagernummer) Then
Fill_Buttons (Lagernummer)
End If
Application.OnTime Now + TimeValue("0:00:30"), "HighPrioSQL"
Exit Sub
ErrH:
If Err.Number  0 Then
Msg = "Error # " & Str(Err.Number) & " was generated by " & Err.Source & Chr(13) & "Error Line:  _
" & Erl & Chr(13) & Err.Description
MsgBox Msg, , "Error", Err.HelpFile, Err.HelpContext
End If
Resume Next
End Sub
so sieht mein Code aus wo ich den Fehler vermute.
Alle das Programm läuft stabil, nur wenn ich es mit Application.OnTime nochmals aufrufe stürzt es nach einer Weile ab.
Die Aufgerufenen Prozeduren sind auch dazu da SQL Abfragen zu machen.
Wo könnte das Problem liegen? Erzeuge ich mir einen Überlauf durch das Ständige Aufrufen dieser Prozedur?
Anzeige
AW: VBA-Excel hängt sich auf
05.07.2019 10:10:34
Daniel
Hi
sorry, das übersteigt meine Fähigkeiten.
da müsste jemand anders ran.
Gruß Daniel
AW: VBA-Excel hängt sich auf
05.07.2019 10:26:28
EtoPHG
Hallo Tobias,
Aufgrund einer reinen Vermutung, muss ich ebensolche anstellen:
Ich kann keine logischen Fehler in geposteten Code entdecken (ausser einer undefinierten Variablen Msg). Die Fehlerquelle müsste also eher in einer deraufgerufenen Prozeduren liegen.
Z.B. könnte es sein, dass fehlende Commit auf die DB Transaktionen fehlen, die zu einem DB-Lock führen.
Gruess Hansueli
AW: VBA-Excel hängt sich auf
05.07.2019 10:53:01
Tobias
Hallo Hansueli,
hier die anderen Prozeduren
Public Sub LagerPrüfen()
Dim i As Integer
Dim Lagername As String
Dim Knopf As String
Dim SQL_String As String
Dim Lagerzeit As Date
On Error GoTo ErrH:
For i = 1 To 43
Knopf = "LagerButton" & i
Lagername = "Lager" & i
SQL_String = "SELECT Auftrag FROM Wabenregal WHERE PlatzNr = '" & i & "';"
Auftragsnummer = SQL_RFID_Abfrage(SQL_String)
SQL_String = "SELECT Lagerzeit FROM Wabenregal WHERE PlatzNr = '" & i & "';"
If Not IsNull(Auftragsnummer) Then
Lagerzeit = SQL_RFID_Abfrage(SQL_String)
End If
If IsNull(Auftragsnummer) Then
Worksheets("Interface").OLEObjects(Knopf).Object.BackColor = vbCyan
ElseIf Lagerzeit  0 Then
Msg = "Error # " & Str(Err.Number) & " was generated by " & Err.Source & Chr(13) & "Error Line:  _
" & Erl & Chr(13) & Err.Description
MsgBox Msg, , "Error", Err.HelpFile, Err.HelpContext
End If
Resume Next
End Sub

Sub Interface_setBack()
Dim i As Byte
For i = 2 To 7
Dim ButtonName As String
Dim Feldname As String
ButtonName = "Button_Dokument" & i
Feldname = "Status_Dokument" & i
Worksheets("Interface").OLEObjects(ButtonName).Object.Caption = ""
Worksheets("Interface").OLEObjects(ButtonName).Visible = False
Worksheets("Interface").OLEObjects(Feldname).Object.text = ""
Worksheets("Interface").OLEObjects(Feldname).Visible = False
Next
End Sub

Public Function Fill_Buttons(Lagernummer As Variant)
On Error GoTo ErrH:
Worksheets("Interface").Button_Dokument1.Visible = True
Worksheets("Interface").Button_Dokument1.Caption = "Lager " & Lagernummer(0)
Worksheets("Interface").CommandButton2.Visible = True
Worksheets("Interface").CommandButton2.Caption = "Lager " & Lagernummer(1)
Worksheets("Interface").CommandButton3.Visible = True
Worksheets("Interface").CommandButton3.Caption = "Lager " & Lagernummer(2)
Exit Function
ErrH:
If Err.Number  0 Then
Msg = "Error # " & Str(Err.Number) & " was generated by " & Err.Source & Chr(13) & "Error Line:  _
" & Erl & Chr(13) & Err.Description
MsgBox Msg, , "Error", Err.HelpFile, Err.HelpContext
End If
Resume Next
End Function
Vielleicht findest du hier was.
Was ist mit Commit gemeint? Bisher haben alle Datenbankaktionen funktioniert.
Alles funktioniert einwandfrei. Wenn ich aber die Prozeduren in Dauerschleife laufen lasse stürzt es nach einer Weile ab.
Danke schonmal für deine Hilfe.
Grüße
Tobi
Anzeige
Fehlendes Commit
05.07.2019 11:15:41
EtoPHG
Hallo Tobias,
Im ersten von Dir geposteten Codeschnipsel führst du ein UPDATE auf bestimmte Rows einer Table aus.
Ich kann nicht erraten, was die Prozedur SQL_Execute macht. Wenn aber in dieser kein COMMIT nach dem UPDATE erfolgt, bleiben die Rows gesperrt. Man sollte nicht mit SQL (ausser SELECT ohne Locking) hantieren, wenn man grundsätzliche DB SQL Manipulation bzw. -Konzepte versteht. Just my 5Cents.
Gruess Hansueli
AW: Fehlendes Commit
05.07.2019 11:24:35
Tobias
Hallo Hansueli,
hier die SQL_Execute.
Diese baut die Verbindung zum SQL-Server auf und führt die Query die mit SQL_String übergeben wird aus.
Hast du mir einen Code-Schnipsel an dem ich die Verwendung von Commit einmal beispielhaft sehen kann?
Public Function SQL_Execute(SQL_String As String) '(Auftragsnummer As String)
Dim Connection
Dim Recordset
Dim SQL
Dim arrDaten As Variant
Dim AbfrageFortsetzen As Variant
Set Connection = CreateObject("ADODB.Connection")
Set Recordset = CreateObject("ADODB.Recordset")
'--------------SQL Abfrage: Datiname mit Endung-------------
'declare the SQL statement that will query the database
SQL = "INSERT INTO Auftrag (AuftragsNr) VALUES (" & Auftragsnummer & ")"
'open the connection to the database
If Connection.State  1 Then
Connection.Open "Driver={SQL Server};Server=***;Database=***;"
End If
'Open the recordset object executing the SQL statement and return records
Set Recordset.ActiveConnection = Connection
Connection.Execute SQL_String
Set Recordset = Nothing
Connection.Close
Set Connection = Nothing
End Function
Gruß
Tobi
Anzeige
Hallo, was ist das für eine Horror-Code?
05.07.2019 11:43:37
EtoPHG
Tobias,
Du brauchst mir nicht ein Code-Brocken um den Anderen hinzuwerfen.
Dein letzter ist komplett ungeniesbar! Schau dir nur mal die Definitionen von Variablen an und ob sie überhaupt im Code gebraucht werden? Oder die Kontrolle ob die Ausführung eines Befehls überhaupt funktioniert hat. Oder die Auswertung der zurückgelieferten Resultate des DB-Befehls. Sorry aber ich muss hier aussteigen. Offensichtlich hat hier jemand Code geschrieben, der mehr oder weniger unwissend ist, was den die Befehle auf der DB auslösen.
Schlag doch einfach mal unter der MS-ADO Online-Hilfe nach, was eine Transaktion, ein Commit, ein Execute etc. ist!
Gruess Hansueli
Anzeige

112 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige