Erwartet Datenfeld Fehler beim Kompilieren

knowledge

Mitglied
Hallo ihr alle,
Ich habe den folgenden Code aber der gibt einen Fehler aus und zwar "Fehler beim Kompilieren Erwartet Datenfeld".Kann jemand mir helfen,den Fehler zu beseitigen.Ich weiss nicht,warum der Fehler auftaucht.
Code:
Public Function checkarray(targets() As String, replaces() As String)
Dim i As Integer
Dim size As Integer
Dim results(UBound(targets))


size = UBound(targets)
If (UBound(targets) <> UBound(replaces)) Then
MsgBox "Arrays not equal in size"
Exit Function
End If

For i = 0 To size
results(i) = CheckSpacesInModules(targets(i), replaces(i))
Next i

checkarray = results
End Function


Public Function CheckSpacesInModules(target As String, replace As String)
On Error GoTo Err_CheckSpacesInModules
    Dim lngCounterA As Long, lngCounterB As Long
    Dim modModule As Module
    Dim zahl
    For lngCounterA = 0 To Modules.count - 1
        Set modModule = Modules.Item(lngCounterA)
        zahl = 0
        With modModule
            For lngCounterB = 1 To .CountOfLines
                If InStr(Trim(.Lines(lngCounterB, 1)), target) > 0 Then
                    Dim tempStr As String
                    tempStr = replace(.Lines(lngCounterB, 1), target, replace)
                    .ReplaceLine lngCounterB, tempStr
                    zahl = zahl + 1
                End If
            Next lngCounterB
        End With
        
        CheckSpacesInModules = zahl

        MsgBox "New York kam im Modul " & modModule & " " & zahl & " mal vor."

    Next lngCounterA
    
Exit_CheckSpacesInModules:
    Exit Function
Err_CheckSpacesInModules:
    MsgBox Err.Description, vbExclamation, "Error #" & Err.Number
    Resume Exit_CheckSpacesInModules
End Function
 
Ersetze mal deine Codestelle bei der Variablendeklaration folgendermaßen:

Code:
  Dim results(UBound(targets))

nicht so!

Sondern so:

Code:
  Dim results() as XYZ '<-- was du halt als Datentyp brauchst
  
  Redim Preserve results(Ubound(targets))

Der Fehler tritt Schätzungsweise deshalb auf weil das Array targets() zu dem Zeitpunkt noch keine Größe hat! Außerdem hast du den Datentyp des Arrays result() vergessen anzugeben!

Gruß Dignsag
 
Ich bin kein Profi in VBA. Ich habe notwendige Änderungen ge,acht aber das geht immer noch nicht. Kannst du bitte mir deinen kompletten Codevorschlag schicken.
 
In welcher der beiden Funktionen wird denn eine Zeile markiert wenn du auf Debuggen klickst?

Mir fallen außerdem wenn ich mir das näher anschaue noch mehr Fehler auf. Ich schau mir das mal ausführlich an wenn ich grad Zeit hab, versprechs ^^. Bekommst heut noch deine Antwort!
 
In funktion checkarray(targets() As String, replaces() As String) wird es markiert. Auf die zeile
Dim results(UBound(targets)) der Fehler besagt Konstanter Ausdruck erforderlich.
 
Noch ne Frage,

was sollen die Beiden Functionen machen?

also checkarray prüft ab ob die größe der Arrays gleich ist und dann kommt diese Schleife? Was soll die machen?

Ein Beispielfehler wäre noch, das du bei der Ausgabe checkarray kein Arrayelement angibst!

Code:
  checkarray = rusults '<-- hier müsste noch hin welches arrayelement du ausgeben
 'willst! Oder möchtest du dein Ergebnis aus der Function auch als Array ausgeben?

Was macht CheckSpaceInModules?

Hier mein Lösungsvorschlag, glaube aber nicht das es funktionieren wird. Konnte es nicht testen weil ich keine Ahnung hatte was das Ziel des ganzen ist!
Code:
    Public Function checkarray(targets() As String, replaces() As String) As Variant
    Dim i As Integer
    Dim size As Integer
    Dim results() As Variant
    
    ReDim Preserve results(UBound(targets))
    
    size = UBound(targets)
    If UBound(targets) <> UBound(replaces) Then
    MsgBox "Arrays not equal in size"
    Exit Function
    End If
    
    For i = 0 To size
    results(i) = CheckSpacesInModules(targets(i), replaces(i))
    Next i
    
    checkarray = results
    End Function
    
    
    Public Function CheckSpacesInModules(target As String, replace As String) As Variant
    On Error GoTo Err_CheckSpacesInModules
    	Dim lngCounterA As Long, lngCounterB As Long
    	Dim modModule As Module
    	Dim zahl As Long
    	For lngCounterA = 0 To Modules.Count - 1
    		Set modModule = Modules.Item(lngCounterA)
    		zahl = 0
    		With modModule
    			For lngCounterB = 1 To .CountOfLines
 			 If InStr(Trim(.Lines(lngCounterB, 1)), target) > 0 Then
    				    Dim tempStr As String
 				 tempStr = replace(.Lines(lngCounterB, 1), target, replace)
 				 .ReplaceLine lngCounterB, tempStr
    				    zahl = zahl + 1
    				End If
    			Next lngCounterB
    		End With
    		
    		CheckSpacesInModules = zahl
    
 		MsgBox "New York kam im Modul " & modModule & " " & zahl & " mal vor."
    
    	Next lngCounterA
    	
    Exit_CheckSpacesInModules:
    	Exit Function
    Err_CheckSpacesInModules:
    	MsgBox Err.Description, vbExclamation, "Error #" & Err.Number
    	Resume Exit_CheckSpacesInModules
    End Function

Hoffe aber dir damit schonmal ein bischen geholfen zu haben!
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück