wake-up-neo.com

Excel VBA-Laufzeitfehler "13" Typenkonflikt

Ich habe ein Makro für eine Datei erstellt. Zuerst funktionierte es einwandfrei, aber heute habe ich die Datei und das Makro hunderte Male geöffnet und neu gestartet. Ich erhalte immer die folgende Fehlermeldung: Excel VBA-Laufzeitfehler "13" Nichtübereinstimmung

Ich habe nichts am Makro geändert und weiß nicht, warum ich den Fehler bekomme. Darüber hinaus dauert es jedes Mal eine lange Zeit, das Makro zu aktualisieren, wenn es ausgeführt wird (das Makro muss etwa 9000 Zeilen ausführen).

Der Fehler liegt in der Mitte ** **.

VBA:

Sub k()

Dim x As Integer, i As Integer, a As Integer
Dim name As String
name = InputBox("Please insert the name of the sheet")
i = 1
Sheets(name).Cells(4, 58) = Sheets(name).Cells(4, 57)
x = Sheets(name).Cells(4, 57).Value
Do While Not IsEmpty(Sheets(name).Cells(i + 4, 57))
    a = 0
    If Sheets(name).Cells(4 + i, 57) <> x Then
        If Sheets(name).Cells(4 + i, 57) <> 0 Then
            If Sheets(name).Cells(4 + i, 57) = 3 Then
                a = x
                Sheets(name).Cells(4 + i, 58) = Sheets(name).Cells(4 + i, 57) - x
                x = Cells(4 + i, 57) - x
            End If
            **Sheets(name).Cells(4 + i, 58) = Sheets(name).Cells(4 + i, 57) - a**
            x = Sheets(name).Cells(4 + i, 57) - a
        Else
        Cells(4 + i, 58) = ""
        End If
    Else
    Cells(4 + i, 58) = ""
    End If

i = i + 1
Loop

End Sub

Glaubst du, du kannst mir helfen? Ich verwende Excel 2010 unter Windows 7. Vielen Dank

9
Diogo

Sie würden eine Typübereinstimmung erhalten, wenn Sheets(name).Cells(4 + i, 57) einen nicht numerischen Wert enthält. Sie sollten die Felder bestätigen, bevor Sie annehmen, dass es sich um Zahlen handelt, und versuchen, von ihnen abzuziehen.

Sie sollten auch Option Strict aktivieren, damit Sie Ihre Variablen explizit konvertieren müssen, bevor Sie typabhängige Vorgänge wie Subtraktion ausführen. So können Sie auch in Zukunft Probleme erkennen und beheben. Leider ist Option Strict nur für VB.NET. Sie sollten jedoch nach bewährten Methoden für explizite Datentypkonvertierungen in VBA suchen.


Update:

Wenn Sie sich für die schnelle Korrektur Ihres Codes entscheiden, wickeln Sie die **-Zeile und die folgende Zeile in der folgenden Bedingung ein:

If IsNumeric(Sheets(name).Cells(4 + i, 57))
    Sheets(name).Cells(4 + i, 58) = Sheets(name).Cells(4 + i, 57) - a
    x = Sheets(name).Cells(4 + i, 57) - a
End If

Beachten Sie, dass Ihr x-Wert jedoch möglicherweise nicht den erwarteten Wert in der nächsten Iteration enthält.

9
Devin Burke

Danke euch allen für eure Hilfe! Endlich konnte ich es dank eines Freundes und auch Ihnen perfekt funktionieren lassen. Hier ist der endgültige Code, so dass Sie auch sehen können, wie wir es lösen.

Danke noch einmal! 

Option Explicit

Sub k()

Dim x As Integer, i As Integer, a As Integer
Dim name As String
'name = InputBox("Please insert the name of the sheet")
i = 1
name = "Reserva"
Sheets(name).Cells(4, 57) = Sheets(name).Cells(4, 56)

On Error GoTo fim
x = Sheets(name).Cells(4, 56).Value
Application.Calculation = xlCalculationManual
Do While Not IsEmpty(Sheets(name).Cells(i + 4, 56))
    a = 0
    If Sheets(name).Cells(4 + i, 56) <> x Then
        If Sheets(name).Cells(4 + i, 56) <> 0 Then
            If Sheets(name).Cells(4 + i, 56) = 3 Then
                a = x
                Sheets(name).Cells(4 + i, 57) = Sheets(name).Cells(4 + i, 56) - x
                x = Cells(4 + i, 56) - x
            End If
            Sheets(name).Cells(4 + i, 57) = Sheets(name).Cells(4 + i, 56) - a
            x = Sheets(name).Cells(4 + i, 56) - a
        Else
        Cells(4 + i, 57) = ""
        End If
    Else
    Cells(4 + i, 57) = ""
    End If

i = i + 1
Loop
Application.Calculation = xlCalculationAutomatic
Exit Sub
fim:
MsgBox Err.Description
Application.Calculation = xlCalculationAutomatic
End Sub
4
Diogo

Diogo

Justin hat dir ein paar sehr gute Tipps gegeben :)

Sie erhalten diesen Fehler auch, wenn die Zelle, in der Sie die Berechnung durchführen, einen Fehler aufgrund einer Formel aufweist.

Zum Beispiel, wenn Zelle A1 # DIV/0 hat! Wenn Sie diesen Code ausführen, erhalten Sie "Excel VBA-Laufzeitfehler" 13 "Typenkonflikt"

Sheets("Sheet1").Range("A1").Value - 1

Ich habe einige geringfügige Änderungen an Ihrem Code vorgenommen. Könnten Sie es bitte für mich testen? Kopieren Sie den Code mit den Zeilennummern, da ich sie absichtlich dort abgelegt habe.

Option Explicit

Sub Sample()
  Dim ws As Worksheet
  Dim x As Integer, i As Integer, a As Integer, y As Integer
  Dim name As String
  Dim lastRow As Long
10        On Error GoTo Whoa

20        Application.ScreenUpdating = False

30        name = InputBox("Please insert the name of the sheet")

40        If Len(Trim(name)) = 0 Then Exit Sub

50        Set ws = Sheets(name)

60        With ws
70            If Not IsError(.Range("BE4").Value) Then
80                x = Val(.Range("BE4").Value)
90            Else
100               MsgBox "Please check the value of cell BE4. It seems to have an error"
110               GoTo LetsContinue
120           End If

130           .Range("BF4").Value = x

140           lastRow = .Range("BE" & Rows.Count).End(xlUp).Row

150           For i = 5 To lastRow
160               If IsError(.Range("BE" & i)) Then
170                   MsgBox "Please check the value of cell BE" & i & ". It seems to have an error"
180                   GoTo LetsContinue
190               End If

200               a = 0: y = Val(.Range("BE" & i))
210               If y <> x Then
220                   If y <> 0 Then
230                       If y = 3 Then
240                           a = x
250                           .Range("BF" & i) = Val(.Range("BE" & i)) - x

260                           x = Val(.Range("BE" & i)) - x
270                       End If
280                       .Range("BF" & i) = Val(.Range("BE" & i)) - a
290                       x = Val(.Range("BE" & i)) - a
300                   Else
310                       .Range("BF" & i).ClearContents
320                   End If
330               Else
340                   .Range("BF" & i).ClearContents
350               End If
360           Next i
370       End With

LetsContinue:
380       Application.ScreenUpdating = True
390       Exit Sub
Whoa:
400       MsgBox "Error Description :" & Err.Description & vbNewLine & _
         "Error at line     : " & Erl
410       Resume LetsContinue
End Sub
1
Siddharth Rout
Sub HighlightSpecificValue()

'PURPOSE: Highlight all cells containing a specified values


Dim fnd As String, FirstFound As String
Dim FoundCell As Range, rng As Range
Dim myRange As Range, LastCell As Range

'What value do you want to find?
  fnd = InputBox("I want to hightlight cells containing...", "Highlight")

    'End Macro if Cancel Button is Clicked or no Text is Entered
      If fnd = vbNullString Then Exit Sub

Set myRange = ActiveSheet.UsedRange
Set LastCell = myRange.Cells(myRange.Cells.Count)

enter code here
Set FoundCell = myRange.Find(what:=fnd, after:=LastCell)

'Test to see if anything was found
  If Not FoundCell Is Nothing Then
    FirstFound = FoundCell.Address

  Else
    GoTo NothingFound
  End If

Set rng = FoundCell

'Loop until cycled through all unique finds
  Do Until FoundCell Is Nothing
    'Find next cell with fnd value
      Set FoundCell = myRange.FindNext(after:=FoundCell)







    'Add found cell to rng range variable
      Set rng = Union(rng, FoundCell)

    'Test to see if cycled through to first found cell
      If FoundCell.Address = FirstFound Then Exit Do


  Loop

'Highlight Found cells yellow

  rng.Interior.Color = RGB(255, 255, 0)

  Dim fnd1 As String
  fnd1 = "Rah"
  'Condition highlighting

  Set FoundCell = myRange.FindNext(after:=FoundCell)



  If FoundCell.Value("rah") Then
      rng.Interior.Color = RGB(255, 0, 0)

  ElseIf FoundCell.Value("Nav") Then

    rng.Interior.Color = RGB(0, 0, 255)



    End If





'Report Out Message
  MsgBox rng.Cells.Count & " cell(s) were found containing: " & fnd

Exit Sub

'Error Handler
NothingFound:
  MsgBox "No cells containing: " & fnd & " were found in this worksheet"

End Sub
0
chetan dubey

Dieser Fehler tritt auf, wenn der Eingabevariablentyp falsch ist. Sie haben wahrscheinlich eine Formel in Cells(4 + i, 57) geschrieben, die anstelle von =0 die Formel = "" verwendet hat. Beim Ausführen wird dieser Fehler angezeigt. Weil leere Zeichenfolge nicht gleich Null ist.

 enter image description here

0
gadolf

Ich hatte das gleiche Problem, das Sie oben erwähnt haben, und mein Code lief gestern den ganzen Tag gut.

Heute Morgen habe ich weiter programmiert und als ich meine Anwendung (meine Datei mit einem Auto_Open-Sub) geöffnet habe, bekam ich den Laufzeitfehler '13'. Typenkonflikt, ich ging im Web nach Antworten, ich versuchte eine Menge Dinge, Modifikationen und irgendwann fiel mir ein, dass ich irgendwo über "Ghost" -Daten gelesen habe, die in einer Zelle bleiben, auch wenn wir sie nicht sehen.

Mein Code überträgt nur Daten von einer zuvor geöffneten Datei in eine andere und summiert sie. Mein Code wurde am dritten SheetTab angehalten (also ging es für das vorige SheetTab 2, bei dem derselbe Code ohne Stopp war) mit der Typenkonfliktnachricht richtig. Und das jedes Mal im selben SheetTab, wenn ich meinen Code neu starte.

Also wählte ich die Zelle aus, in der sie angehalten wurde, gab manuell den Wert 0,00 ein (weil der Typkonflikt von Summation-Variablen stammt, die in einem DIM als Double deklariert sind) und kopierte diese Zelle in alle nachfolgenden Zellen, in denen das gleiche Problem auftrat. Es hat das Problem gelöst. Ich hatte die Nachricht nie wieder. Nichts mit meinem Code zu tun, außer dem "Ghost" oder Daten aus der Vergangenheit. Es ist wie wenn Sie Control + End verwenden möchten und Excel Sie dorthin bringt, wo Sie einmal Daten hatten, und löschte sie. Müssen Sie "Speichern" und die Datei schließen, wenn Sie Strg + End verwenden wollten, um sicherzustellen, dass Excel auf die richtige Zelle verweist.

0
Youbi

Für zukünftige Leser:

Diese Funktion wurde in Run-time error '13': Type mismatch abgebrochen.

Function fnIsNumber(Value) As Boolean
  fnIsNumber = Evaluate("ISNUMBER(0+""" & Value & """)")
End Function

In meinem Fall schlug die Funktion fehl, wenn ein #DIV/0!- oder N/A-Wert erreicht wurde.

Um es zu lösen, musste ich folgendes tun:

Function fnIsNumber(Value) As Boolean
   If CStr(Value) = "Error 2007" Then '<===== This is the important line
      fnIsNumber = False
   Else
      fnIsNumber = Evaluate("ISNUMBER(0+""" & Value & """)")
   End If
End Function
0
gibberish