Anzeige
Archiv - Navigation
1268to1272
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

Unverständliche Laufzeitfehler

Unverständliche Laufzeitfehler
Markus
Hallo zusammen,
Kurz vorweg und zu meiner Entschuldigung: Programmieren ist nicht mein Kerngeschäft, meine VBA Kenntnisse sind Marke Eigenbau. Für kleinere Aufgabenstellungen konnte ich mir aber schon oft selbst helfen, ohne einen Programmierer einschalten zu müssen.
Ich verzweifle gerade an einem/ mehreren Laufzeitfehlern, die ich nicht nachvollziehen kann. Das Programm soll Werte auf einem "Quellblatt" auslesen und in einer bestimmten Form auf einem "Zielblatt" anordnen.
Wenn ich das Programm laufen lasse, im Editor, unterbricht die Verarbeitung an unterschiedlichen stellen mit der Meldung "Ausführung des Codes wurde unterbrochen" ohne Angabe eines Laufzeitfehlers. Wenn ich dann auf "Debuggen" klicke, springt der Zeiger in eine Code-Zeile in der dann kein Fehler zu erkennen ist. Wenn ich die Verarbeitung fortsetze (F5), läuft das Programm weiter. Das geht so bis zum Ende des Programms (mit bis zu vier solcher Unterbrechungen).
So ist das Programm natürlich nicht zu gebrauchen, auch wenn es am Ende das tut, was es soll. Ich kann den Fehler/ das Problem einfach nicht eingrenzen.
Hat jemand eine Idee, woran das liegen könnte?
Viele Grüße
Markus

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

Betreff
Benutzer
Anzeige
AW: Unverständliche Laufzeitfehler
27.06.2012 12:24:18
Rudi
Hallo,
Hat jemand eine Idee, woran das liegen könnte?
Ja, am Code in Zeile 13.
Gruß
Rudi
AW: Unverständliche Laufzeitfehler
27.06.2012 14:22:26
Markus
Hallo Rudi,
echt? Das ist Code-Zeile 13: "Dim intCount_3 As Integer" . Was stimmt damit nicht?
Spass beiseite: Ich verstehe deinen Kommentar so, dass dir der Code fehlt. Den reiche ich hiermit gerne nach.
Viele Grüße
Markus
Sub genValDocumentation()
Dim wb As Workbook
Dim wsTarget As Worksheet
Dim wsSource As Worksheet
Dim rngErg As Variant
Dim rngErg2 As Variant
Dim firstAddress As Variant
Dim rngValArea As Range
Dim intFirstRowOfVal As Integer
Dim intLastRowOfVal As Integer
Dim intTrgtRowCount As Integer
Dim intCount_3 As Integer
Dim strFrml As String
Const cstTrgtStartZeile = 3
'Spalten auf dem Zielblatt
Const strTrgtLvl = "A"
Const strTrgtTecName = "B"
Const strTrgtDscr = "C"
Const strTrgtFrml = "D"
Set wb = ThisWorkbook
Set wsTarget = wb.Worksheets("Target")
Set wsSource = wb.Worksheets("Source")
'Ermitteln der letzten gefüllten Zelle --> Zeile auf dem Quellblatt
wsSource.Activate
loLetzte = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
'Validierungen suchen
intTrgtRowCount = cstTrgtStartZeile
With wsSource.Range("A1:AZ" & loLetzte)
Set rngErg = .Find("Details", LookIn:=xlValues, lookat:=xlWhole)
If Not rngErg Is Nothing Then
firstAddress = rngErg.Row
Do
intFirstRowOfVal = rngErg.Row - 2
'Set rngErg = Nothing
'Ermittle letzte Zeile der Validierung
Set rngErg2 = wsSource.Range("A" & intFirstRowOfVal + 3 & ":AZ" & loLetzte).Find(" _
Details", LookIn:=xlValues, lookat:=xlWhole)
If Not rngErg2 Is Nothing Then
intLastRowOfVal = rngErg2.Row - 3
Else
intLastRowOfVal = loLetzte
End If
Set rngErg2 = Nothing
'Zuweisen der Range für die aktuelle Validierung
Set rngValArea = wsSource.Range("A" & intFirstRowOfVal & ":AZ" & intLastRowOfVal)
'Validierungsdetails auslesen
''Kopfzeile
wsTarget.Range(strTrgtTecName & intTrgtRowCount) = rngValArea.Cells(1, 1).End( _
xlToRight).Value
wsTarget.Range(strTrgtDscr & intTrgtRowCount) = rngValArea.Cells(1, rngValArea. _
Cells(1, 1).End(xlToRight).Column).End(xlToRight).Value
'''Formel ermitteln
Set rngErg2 = rngValArea.Find("Formula String", LookIn:=xlValues, lookat:=xlWhole)
If Not rngErg2 Is Nothing Then
intCount_3 = rngErg2.Row + 2
strSrcFrml = rngErg2.Column
End If
Set rngErg2 = Nothing
strFrml = ""
On Error Resume Next
Do While wsSource.Cells(intCount_3, strSrcFrml)  ""
strFrml = strFrml & " " & wsSource.Cells(intCount_3, strSrcFrml)
intCount_3 = intCount_3 + 1
Loop
On Error GoTo 0
wsTarget.Range(strTrgtFrml & intTrgtRowCount) = strFrml
intTrgtRowCount = intTrgtRowCount + 1
Set rngErg = .Find("Details", After:=rngErg, LookIn:=xlValues, _
lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
Loop While Not rngErg.Row = firstAddress
End If
End With
Set wb = Nothing
Set wsTarget = Nothing
Set wsSource = Nothing
Set rngErg = Nothing
Set rngErg2 = Nothing
End Sub

Anzeige
Und wo genau unterbricht der Code jetzt?
27.06.2012 17:05:06
{Boris}
Hi Markus,
das wäre hilfreich zu wissen. Und Du hast nicht zufällig Haltepunkte gesetzt...?!
VG, Boris
AW: Und wo genau unterbricht der Code jetzt?
28.06.2012 08:50:31
firmus
Hallo Markus,
habe es mir angesehen, aber nicht komplett getestet. Dafür wären Musterdaten sinnvoll.
Aufgefallen ist mir.
1. Option Explicit als erste Zeile fehlt.
Sollte gesetzt sein, damit werden Tippfehler in Feldnamen leichter gefunden.
2. loLetzte ist nicht definiert.
Laut Logik sollte diese Variable numerisch sein.
3. strSrcFrml ist nicht definiert.
Laut Logik sollte diese Variable numerisch sein.
4. die numerischen Definition sind alle mit Integer definiert
Mit DIM loLetzte as Long ergibt sein ein grösserer Wertebereich (für große Tabellen)
Wertebereich für Integer -32,768 to 32,767
5. On Error Resume Next ist gesetzt
FALLS in der nachfolgenden Schleife ein Fehler ist, wird er nicht bemerkt.
a) entweder über Variablenabfragen sicherstellen, dass keine falschen Werte enthalten sein können, oder
b) Mit On Error an eine Marke verzweigen und eine Fehlerbehandlung einbauen.
6. Möglicher Fehler: intCount_3
In der Do While Schleife (direkt nach On Error Resume Next) ist intCount_3 auf 0(null) (in meinem Test)
Da mit diesem Wert eine Zeile adressiert wird, entsteht hier ein Laufzeitfehler.
7. Syntaxerror ?
Set rngErg2 = wsSource.Range("A" & intFirstRowOfVal + 3 & ":AZ" & loLetzte).Find(" _
Details", LookIn:=xlValues, lookat:=xlWhole)
Das erzeugte bei mir einen Syntaxerror, vermutlich passte die Fortsetzungzeile nicht
So wurde es akzeptiert:
Set rngErg2 = wsSource.Range("A" & intFirstRowOfVal + 3 & ":AZ" & loLetzte).Find _
("Details ", LookIn:=xlValues, lookat:=xlWhole)
8. Test
Setze doch vor die On Error einen Haltepunkt und steppe mit F8 durch die Do While Schleife
Viel Erfolg
Gruss
Firmus
Anzeige
AW: Und wo genau unterbricht der Code jetzt?
28.06.2012 09:15:29
Markus
Hallo Firmus,
vielen Dank für die Hinweise! Ich werde den Code entsprechend umbauen und das mal testen.
Viele Grüße
Markus

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige