VBA
Hallo ich habe ein großes Probelm. Leider finde ich den Fehler nicht.
Ich habe Bilder die so heißten IR_(5 oder 4 Stellige Zahl).Jpg
Diese Bilder sozusagen einlesen von einem Verzeichnis und nach sessions unterteilen dass heißt, wenn eine Zahl die eingelesen worden ist größer als 1 ist dann beginnt eine neue Session und ein stop soll in das Programm gemacht werden.
Wenn also die Zahl 2987 und die nächste zahl 2989 dann neue Session.
Bei mir bringt er an dieser Stelle ein Fehler :
test_mod_num(Z) = CInt(test_mod(Z))
Warum?
hier zur übersicht das ganze Programm:
Option Explicit
Dim sess As Object
Dim row As Integer
Dim col As Integer
Dim var1(50) As Double
Dim i As Integer
Dim VarMax As Double
Dim Var2 As Double
Dim Pfad As String
Dim Inputtext As String
Dim Zeile As String
Dim Filename As String
Dim J As String
Dim d As String
Dim AnzDateien As Integer
Dim test(200) As String
Dim test_mod(200) As String
Dim test_mod_num(200) As Integer
Dim laenge As Double
Dim beginn As Integer
Dim num As Integer
Dim session_num As Integer
Dim Z As Double
Dim x As Double
Dim datei(200) As String
Private Sub CommandButton1_Click()
Call PlaySequence_Click
End Sub
Private Sub TextBox1_Change()
Pfad = TextBox1
Pfad = Pfad + "\*.*"
End Sub
Sub PlaySequence_Click()
Dim resultat As String
row = 1
col = 1
i = 0
VarMax = 0
'Lesen des Inhaltsverzeichnisses
d = Dir(Pfad)
AnzDateien = 1
Do While d > ""
'MsgBox d
' MsgBox AnzDateien
test(AnzDateien) = d
DoEvents
d = Dir
AnzDateien = AnzDateien + 1
Loop
MsgBox ("Hier die Anzahl der Dateien " & AnzDateien)
'Ausgabe Array
For Z = 1 To AnzDateien
'MsgBox test(Z)
Z = Z + 1
Next
'Aus wieviel Zeichen besteht der Dateiname ?
laenge = Len(test(1))
MsgBox ("Der Dateiname ist " & laenge & " lang")
'vierstellige Bildnummer
If laenge = 11 Then
beginn = 4
num = 4
End If
'fuenfstellige Bildnummer
If laenge = 12 Then
beginn = 4
num = 5
End If
'sechsstellige Bildnummer
If laenge = 13 Then
beginn = 4
num = 6
End If
' Stop
'Zahlen aus dem Dateinamen herauslesen
For Z = 1 To AnzDateien
test_mod(Z) = Mid(test(Z), beginn, num)
MsgBox test_mod(Z)
test_mod_num(Z) = CInt(test_mod(Z))
Z = Z + 1
Next
'Bilder einlesen
'session_num = 1
'test_mod2(Z,session_num)=test_mod(z),session_num
For Z = 1 To AnzDateien
x = Z + 1
If test_mod_num(x) > test_mod_num(Z) Then
session_num = session_num + 1
MsgBox ("erfuellt !")
End If
MsgBox (session_num & " " & test_mod(Z) & " " & test_mod(x))
'Z = Z + 1
Next
' Get a reference to the ThermaCAM™ Researcher object
Set sess = _
Worksheets("Tabelle1").OLEObjects("Objekt 1").Object
session_num = 1
Do While True
' Store IR image time and spotmeter temperatures
' in the cells
Worksheets(1).Cells(row, col).Value = _
sess.GetNamedValue("Ar01.max")
var1(i) = sess.GetNamedValue("Ar01.max")
i = i + 1
Exit Do
'End If
sess.StepForward
row = row + 1
col = 1
Loop
End Sub
Private Sub UserForm_Click()
End Sub
Bitte helft mir.
Danke
Gruß Marina
Antwort schreiben
Antwort 1 von son_quatsch vom 11.08.2021, 07:40 Options
Ganz klar: AnzDateien wird größer als 200 und test_mod_num ist ein Feld von 200 Elementen - jeder Zugriff auf ein höheres Feld bringt einen Fehler.
Antwort 2 von inaaa vom 11.08.2021, 08:02 Options
Hii Danke für deine Antwort.
Also erhöhre ich einfach test_mod_num auf sagen wir so 500 dann müsste es gehn . Aber trotzdem geht es nicht.
kommt immer noch die Fehlermeldung Typen unverträglich?
Lg Marina
Antwort 3 von son_quatsch vom 11.08.2021, 08:15 Options
MsgBox ("Hier die Anzahl der Dateien " & AnzDateien)
Welchen Text liefert dir denn dieser Dialog? Unter 500?
Lautet die Fehlermeldung hingegen "Typen unverträglich", so ist
test_mod(Z) zu dem Zeitpunkt einfach keine Zahl (also mindestens ein Zeichen innerhalb des Textes ist keine Ziffer). Aber auch dafür hast du ja bereits in der Zeile darüber einen Dialog, der jede "Zahl" ausgibt. Leider nicht eindeutig, denn so siehst du nicht, ob vielleicht ein Leerzeichen vorne und hinten mit dranklebt.
Überprüf das mal (und ändere den Dialog in z.B.
MsgBox ">" & test_mod(Z) & "<" )