Как исправить ошибку type mismatch в excel

На чтение 8 мин. Просмотров 27.2k.

Mismatch Error

Содержание

  1. Объяснение Type Mismatch Error
  2. Использование отладчика
  3. Присвоение строки числу
  4. Недействительная дата
  5. Ошибка ячейки
  6. Неверные данные ячейки
  7. Имя модуля
  8. Различные типы объектов
  9. Коллекция Sheets
  10. Массивы и диапазоны
  11. Заключение

Объяснение Type Mismatch Error

Type Mismatch Error VBA возникает при попытке назначить значение между двумя различными типами переменных.

Ошибка отображается как:
run-time error 13 – Type mismatch

VBA Type Mismatch Error 13

Например, если вы пытаетесь поместить текст в целочисленную переменную Long или пытаетесь поместить число в переменную Date.

Давайте посмотрим на конкретный пример. Представьте, что у нас есть переменная с именем Total, которая является длинным целым числом Long.

Если мы попытаемся поместить текст в переменную, мы получим Type Mismatch Error VBA (т.е. VBA Error 13).

Sub TypeMismatchStroka()

    ' Объявите переменную типа long integer
    Dim total As Long
    
    ' Назначение строки приведет к Type Mismatch Error
    total = "Иван"
    
End Sub

Давайте посмотрим на другой пример. На этот раз у нас есть переменная ReportDate типа Date.

Если мы попытаемся поместить в эту переменную не дату, мы получим Type Mismatch Error VBA.

Sub TypeMismatchData()

    ' Объявите переменную типа Date
    Dim ReportDate As Date
    
    ' Назначение числа вызывает Type Mismatch Error
    ReportDate = "21-22"
    
End Sub

В целом, VBA часто прощает, когда вы назначаете неправильный тип значения переменной, например:

Dim x As Long

' VBA преобразует в целое число 100
x = 99.66

' VBA преобразует в целое число 66
x = "66"

Тем не менее, есть некоторые преобразования, которые VBA не может сделать:

Dim x As Long

' Type Mismatch Error
x = "66a"

Простой способ объяснить Type Mismatch Error VBA состоит в том, что элементы по обе стороны от равных оценивают другой тип.

При возникновении Type Mismatch Error это часто не так просто, как в этих примерах. В этих более сложных случаях мы можем использовать средства отладки, чтобы помочь нам устранить ошибку.

Использование отладчика

В VBA есть несколько очень мощных инструментов для поиска ошибок. Инструменты отладки позволяют приостановить выполнение кода и проверить значения в текущих переменных.

Вы можете использовать следующие шаги, чтобы помочь вам устранить любую Type Mismatch Error VBA.

  1. Запустите код, чтобы появилась ошибка.
  2. Нажмите Debug в диалоговом окне ошибки. Это выделит строку с ошибкой.
  3. Выберите View-> Watch из меню, если окно просмотра не видно.
  4. Выделите переменную слева от equals и перетащите ее в окно Watch.
  5. Выделите все справа от равных и перетащите его в окно Watch.
  6. Проверьте значения и типы каждого.
  7. Вы можете сузить ошибку, изучив отдельные части правой стороны.

Следующее видео показывает, как это сделать.

На скриншоте ниже вы можете увидеть типы в окне просмотра.

VBA Type Mismatch Watch

Используя окно просмотра, вы можете проверить различные части строки кода с ошибкой. Затем вы можете легко увидеть, что это за типы переменных.

В следующих разделах показаны различные способы возникновения Type Mismatch Error VBA.

Присвоение строки числу

Как мы уже видели, попытка поместить текст в числовую переменную может привести к Type Mismatch Error VBA.

Ниже приведены некоторые примеры, которые могут вызвать ошибку:

Sub TextErrors()

    ' Long - длинное целое число
    Dim l As Long
    l = "a"
    
    ' Double - десятичное число
    Dim d As Double
    d = "a"
    
   ' Валюта - 4-х значное число
    Dim c As Currency
    c = "a"
    
    Dim d As Double
    ' Несоответствие типов, если ячейка содержит текст
    d = Range("A1").Value
    
End Sub

Недействительная дата

VBA очень гибок в назначении даты переменной даты. Если вы поставите месяц в неправильном порядке или пропустите день, VBA все равно сделает все возможное, чтобы удовлетворить вас.

В следующих примерах кода показаны все допустимые способы назначения даты, за которыми следуют случаи, которые могут привести к Type Mismatch Error VBA.

Sub DateMismatch()

    Dim curDate As Date
    
    ' VBA сделает все возможное для вас
    ' - Все они действительны
    curDate = "12/12/2016"
    curDate = "12-12-2016"
    curDate = #12/12/2016#
    curDate = "11/Aug/2016"
    curDate = "11/Augu/2016"
    curDate = "11/Augus/2016"
    curDate = "11/August/2016"
    curDate = "19/11/2016"
    curDate = "11/19/2016"
    curDate = "1/1"
    curDate = "1/2016"
   
    ' Type Mismatch Error
    curDate = "19/19/2016"
    curDate = "19/Au/2016"
    curDate = "19/Augusta/2016"
    curDate = "August"
    curDate = "Какой-то случайный текст"

End Sub

Ошибка ячейки

Тонкая причина Type Mismatch Error VBA — это когда вы читаете из ячейки с ошибкой, например:

VBA Runtime Error

Если вы попытаетесь прочитать из этой ячейки, вы получите Type Mismatch Error.

Dim sText As String

' Type Mismatch Error, если ячейка содержит ошибку
sText = Sheet1.Range("A1").Value

Чтобы устранить эту ошибку, вы можете проверить ячейку с помощью IsError следующим образом.

Dim sText As String
If IsError(Sheet1.Range("A1").Value) = False Then
    sText = Sheet1.Range("A1").Value
End If

Однако проверка всех ячеек на наличие ошибок невозможна и сделает ваш код громоздким. Лучший способ — сначала проверить лист на наличие ошибок, а если ошибки найдены, сообщить об этом пользователю.

Вы можете использовать следующую функцию, чтобы сделать это:

Function CheckForErrors(rg As Range) As Long

    On Error Resume Next
    CheckForErrors = rg.SpecialCells(xlCellTypeFormulas, xlErrors).Count

End Function

Ниже приведен пример использования этого кода.

Sub DoStuff()

    If CheckForErrors(Sheet1.Range("A1:Z1000")) > 0 Then
        MsgBox "На листе есть ошибки. Пожалуйста, исправьте и запустите макрос снова."
        Exit Sub
    End If
    
    ' Продолжайте здесь, если нет ошибок

End Sub

Неверные данные ячейки

Как мы видели, размещение неверного типа значения в переменной вызывает Type Mismatch Error VBA. Очень распространенная причина — это когда значение в ячейке имеет неправильный тип.

Пользователь может поместить текст, такой как «Нет», в числовое поле, не осознавая, что это приведет к Type Mismatch Error в коде.

VBA Error 13

Если мы прочитаем эти данные в числовую переменную, то получим
Type Mismatch Error VBA.

Dim rg As Range
Set rg = Sheet1.Range("B2:B5")

Dim cell As Range, Amount As Long
For Each cell In rg
    ' Ошибка при достижении ячейки с текстом «Нет»
    Amount = cell.Value
Next rg

Вы можете использовать следующую функцию, чтобы проверить наличие нечисловых ячеек, прежде чем использовать данные.

Function CheckForTextCells(rg As Range) As Long

    ' Подсчет числовых ячеек
    If rg.Count = rg.SpecialCells(xlCellTypeConstants, xlNumbers).Count Then
        CheckForTextCells = True
    End If
    
End Function

Вы можете использовать это так:

Sub IspolzovanieCells()

    If CheckForTextCells(Sheet1.Range("B2:B6").Value) = False Then
        MsgBox "Одна из ячеек не числовая. Пожалуйста, исправьте перед запуском макроса"
        Exit Sub
    End If
    
    ' Продолжайте здесь, если нет ошибок

End Sub

Имя модуля

Если вы используете имя модуля в своем коде, это может привести к
Type Mismatch Error VBA. Однако в этом случае причина может быть не очевидной.

Например, допустим, у вас есть модуль с именем «Module1». Выполнение следующего кода приведет к о
Type Mismatch Error VBA.

Sub IspolzovanieImeniModulya()
    
    ' Type Mismatch Error
    Debug.Print module1

End Sub

VBA Type Mismatch Module Name

Различные типы объектов

До сих пор мы рассматривали в основном переменные. Мы обычно называем переменные основными типами данных.

Они используются для хранения одного значения в памяти.

В VBA у нас также есть объекты, которые являются более сложными. Примерами являются объекты Workbook, Worksheet, Range и Chart.

Если мы назначаем один из этих типов, мы должны убедиться, что назначаемый элемент является объектом того же типа. Например:

Sub IspolzovanieWorksheet()

    Dim wk As Worksheet
    
    ' действительный
    Set wk = ThisWorkbook.Worksheets(1)
    
    ' Type Mismatch Error
    ' Левая сторона - это worksheet - правая сторона - это workbook
    Set wk = Workbooks(1)

End Sub

Коллекция Sheets

В VBA объект рабочей книги имеет две коллекции — Sheets и Worksheets. Есть очень тонкая разница.

  1. Worksheets — сборник рабочих листов в Workbook
  2. Sheets — сборник рабочих листов и диаграммных листов в Workbook
  3.  

Лист диаграммы создается, когда вы перемещаете диаграмму на собственный лист, щелкая правой кнопкой мыши на диаграмме и выбирая «Переместить».

Если вы читаете коллекцию Sheets с помощью переменной Worksheet, она будет работать нормально, если у вас нет рабочей таблицы.

Если у вас есть лист диаграммы, вы получите
Type Mismatch Error VBA.

В следующем коде Type Mismatch Error появится в строке «Next sh», если рабочая книга содержит лист с диаграммой.

Sub SheetsError()

    Dim sh As Worksheet
    
    For Each sh In ThisWorkbook.Sheets
        Debug.Print sh.Name
    Next sh

End Sub

Массивы и диапазоны

Вы можете назначить диапазон массиву и наоборот. На самом деле это очень быстрый способ чтения данных.

Sub IspolzovanieMassiva()

    Dim arr As Variant
    
    ' Присвойте диапазон массиву
    arr = Sheet1.Range("A1:B2").Value
    
    ' Выведите значение в строку 1, столбец 1
    Debug.Print arr(1, 1)

End Sub

Проблема возникает, если ваш диапазон имеет только одну ячейку. В этом случае VBA не преобразует arr в массив.

Если вы попытаетесь использовать его как массив, вы получите
Type Mismatch Error .

Sub OshibkaIspolzovanieMassiva()

    Dim arr As Variant
    
    ' Присвойте диапазон массиву
    arr = Sheet1.Range("A1").Value
    
    ' Здесь будет происходить Type Mismatch Error
    Debug.Print arr(1, 1)

End Sub

В этом сценарии вы можете использовать функцию IsArray, чтобы проверить, является ли arr массивом.

Sub IspolzovanieMassivaIf()

    Dim arr As Variant
    
    ' Присвойте диапазон массиву
    arr = Sheet1.Range("A1").Value
    
    ' Здесь будет происходить Type Mismatch Error
    If IsArray(arr) Then
        Debug.Print arr(1, 1)
    Else
        Debug.Print arr
    End If

End Sub

Заключение

На этом мы завершаем статью об Type Mismatch Error VBA. Если у вас есть ошибка несоответствия, которая не раскрыта, пожалуйста, дайте мне знать в комментариях.

maksdemon

0 / 0 / 0

Регистрация: 13.07.2014

Сообщений: 16

1

13.07.2014, 14:07. Показов 20765. Ответов 29

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Доброе время суток.. При наладку 1с предприятия столкнулся с макросом который выводит бак код на весы.. В нем следуящая ошибка

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
Private Sub CommandButton1_Click()
  Dim rc1 As Recordset
    Dim db As Database
    
    
    Dim PathBase As String:     PathBase = "c:torg_base_char"
    Dim User As String:         User = "Aaieieno?aoi?"
    Dim Password As String:     Password = "chok"
    Dim v77 As Object, result As Variant
    Set v77 = CreateObject("V77.Application")
    result = v77.Initialize(v77.RMTrade, " /D" + PathBase + " /N" + User + " /P" + Password, "")
    If result = 0 Then
        Set v77 = Nothing
        MsgBox "ia oaaeinu onoaiiaeou niaaeiaiea n 1N"
        Exit Sub
    End If
    Set Towar = v77.EvalExpr("NicaaouIauaeo(""Ni?aai?iee.Oiaa?"")")
    x = Towar.Aua?aouYeaiaiouIi?aeaeceoo("Aaniaie", 1, 0, 0)
    Dim i:  i = 0
    Stri = ""
    
    Set db = OpenDatabase("C:Program Filesdhscale_En_56DuoDianMing.mdb")
    Set rs1 = db.OpenRecordset("Select * from PLU@")
    
    rs1.MoveFirst
    
    Do While Towar.Iieo?eouYeaiaio > 0
        rs1.MoveFirst
        Stri = Towar.Oo?eoEia
        StrNew = ""
        For q = 2 To 6
            w = Mid(Stri, q, 1)
            If w <> 0 Then
                StrNew = Mid(Stri, q, 7 - q)
                Exit For
            End If
        Next q
            For e = 2 To StrNew
            rs1.MoveNext
        Next e
        cen = Towar.OaiaCaAa.Iieo?eou(OaeouayAaoa)
        cen = cen * 100
 
        rs1.Edit
        rs1("DAIMA") = LTrim(RTrim(Towar.Oo?eoEia))
        rs1("PRICE") = cen
        rs1("NAME") = Towar.Iaeiaiiaaiea
        rs1.Update
        
        
    Loop
    
                
    v77.ExecuteBatch ("Caaa?oeou?aaiooNenoaiu((0);")
    Set v77 = Nothing
    MsgBox "END"
 
End Sub

Сам я в макросах не очень.. Подскажите в чем тут проблема



0



6878 / 2810 / 534

Регистрация: 19.10.2012

Сообщений: 8,571

13.07.2014, 14:39

2

На какой строке ошибка?
Может cen не число?



0



0 / 0 / 0

Регистрация: 13.07.2014

Сообщений: 16

13.07.2014, 14:54

 [ТС]

3

строка 38



0



призрак

3261 / 889 / 119

Регистрация: 11.05.2012

Сообщений: 1,702

Записей в блоге: 2

13.07.2014, 15:19

4

StrNew не число.
попробуйте заменить на Val(StrNew) или CLng(StrNew)



0



0 / 0 / 0

Регистрация: 13.07.2014

Сообщений: 16

13.07.2014, 15:24

 [ТС]

5

Если меняю значение на Val выдается ашибка Argument not optional. Усли на CLng то ошибка в синкасизе



0



призрак

3261 / 889 / 119

Регистрация: 11.05.2012

Сообщений: 1,702

Записей в блоге: 2

13.07.2014, 16:19

6

у val всего один аргумент
если вы написали именно так, как я предложил – ошибки быть не может
какую ошибку синтаксиса можно умудриться допустить в CLng – я тоже не представляю.

в принципе – в зависимости от ваших данных, StrNew может вообще остаться неинициализированной (пустой)
но это будет ошибка времени выполнения.

Цитата
Сообщение от maksdemon
Посмотреть сообщение

ашибка

Цитата
Сообщение от maksdemon
Посмотреть сообщение

Усли

Цитата
Сообщение от maksdemon
Посмотреть сообщение

синкасизе

Цитата
Сообщение от maksdemon
Посмотреть сообщение

следуящая

завязывайте вы с этим, а?
неприятно общаться с человеком, столь наплевательски относящимся к языку.



0



0 / 0 / 0

Регистрация: 13.07.2014

Сообщений: 16

13.07.2014, 16:32

 [ТС]

7

Я дико извиняюсь. Пишу в торопях. И все же какой выход в этой ситуации? 1с с этого макроса не запускается. Причины по которым произошел сбой мне неизвестны.



0



Антихакер32

Заблокирован

13.07.2014, 17:34

8

Цитата
Сообщение от ikki
Посмотреть сообщение

Val(StrNew) или CLng(StrNew)

Val может вернуть число, но сделать может так… я пишу Debug.Print Val(“9,1”)
Ответ: 9, тоесть все остальное в расчет не берется, если число указанно неверно



0



0 / 0 / 0

Регистрация: 13.07.2014

Сообщений: 16

13.07.2014, 17:38

 [ТС]

9

Цитата
Сообщение от Антихакер32
Посмотреть сообщение

Val может вернуть число, но сделать может так… я пишу Debug.Print Val(“9,1”)
Ответ: 9, тоесть все остальное в расчет не берется, если число указанно неверно

Т.е что в данном конкретном случае можете порекомендовать Вы?



0



Антихакер32

Заблокирован

13.07.2014, 17:48

10

Цитата
Сообщение от maksdemon
Посмотреть сообщение

ашибка Argument not optional


эта ошибка обычно выдается, если аргументы не указанны или не все указанны
как вы это писали ?

Добавлено через 8 минут
Скорее всего StrNew пустой, я код не запускал, так догадался,
тогда исправьте чтоб цикл не запускался
Например: в 38 строке

Visual Basic
1
 if len(StrNew) then  msgbox "StrNew не пустой !" else msgbox "StrNew пустой !"



0



0 / 0 / 0

Регистрация: 13.07.2014

Сообщений: 16

13.07.2014, 17:53

 [ТС]

11

Цитата
Сообщение от Антихакер32
Посмотреть сообщение

Скорее всего StrNew пустой, я код не запускал, так догадался,
тогда исправьте чтоб цикл не запускался
Например: if len(StrNew) then …StrNew не пустой !

Прошу прощения.. Я в VBA мягко говоря плаваю.
For e = 2 To StrNew вот строка с ошибкой.. как она должна выглядеть?



0



Антихакер32

Заблокирован

13.07.2014, 18:01

12

Кстате это расспространенная ошибка, дело в том, что тип <String>
может иметь числовые значения, но при этом может так-же быть с нулевой величиной “”

Добавлено через 3 минуты

Цитата
Сообщение от maksdemon
Посмотреть сообщение

как она должна выглядеть?

Visual Basic
1
if len(StrNew) then  For e = 2 To StrNew: rs1.MoveNext Next

Добавлено через 3 минуты

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Private Sub CommandButton1_Click()
    Dim rc1 As Recordset
    Dim db As Database
    Dim PathBase As String: PathBase = "c:torg_base_char"
    Dim User As String: User = "Aaieieno?aoi?"
    Dim Password As String: Password = "chok"
    Dim v77 As Object, result As Variant
    Set v77 = CreateObject("V77.Application")
    result = v77.Initialize(v77.RMTrade, " /D" + PathBase + " /N" + User + " /P" + Password, "")
    If result = 0 Then
        Set v77 = Nothing
        MsgBox "ia oaaeinu onoaiiaeou niaaeiaiea n 1N"
        Exit Sub
    End If
    Set Towar = v77.EvalExpr("NicaaouIauaeo(""Ni?aai?iee.Oiaa?"")")
    x = Towar.Aua?aouYeaiaiouIi?aeaeceoo("Aaniaie", 1, 0, 0)
    Dim i: i = 0
    Stri = ""
    Set db = OpenDatabase("C:Program Filesdhscale_En_56DuoDianMing.mdb")
    Set rs1 = db.OpenRecordset("Select * from PLU@")
    rs1.MoveFirst
    Do While Towar.Iieo?eouYeaiaio > 0
        rs1.MoveFirst
        Stri = Towar.Oo?eoEia
        StrNew = ""
        For q = 2 To 6
            w = Mid(Stri, q, 1)
            If w <> 0 Then
                StrNew = Mid(Stri, q, 7 - q)
                Exit For
            End If
        Next q
        if len(StrNew) then  For e = 2 To StrNew: rs1.MoveNext Next
        cen = Towar.OaiaCaAa.Iieo?eou(OaeouayAaoa)
        cen = cen * 100
        rs1.Edit
        rs1("DAIMA") = LTrim(RTrim(Towar.Oo?eoEia))
        rs1("PRICE") = cen
        rs1("NAME") = Towar.Iaeiaiiaaiea
        rs1.Update
    Loop
    v77.ExecuteBatch ("Caaa?oeou?aaiooNenoaiu((0);")
    Set v77 = Nothing
    MsgBox "END"
End Sub



0



0 / 0 / 0

Регистрация: 13.07.2014

Сообщений: 16

13.07.2014, 18:01

 [ТС]

13

compile error
End If without block If



0



Антихакер32

Заблокирован

13.07.2014, 18:07

14

Без разницы, можно и так написать

Visual Basic
1
2
3
if len(StrNew) then 
     For e = 2 To StrNew: rs1.MoveNext Next
end if

странно что вызвало ошибку, там тоже был допустимый синтакс

Добавлено через 2 минуты

Цитата
Сообщение от maksdemon
Посмотреть сообщение

x = Towar.Aua?aouYeaiaiouIi?aeaeceoo(“Aaniaie”, 1, 0, 0

вообще если разобраться, там еще и ошибки расскладки символов ..
судя по этим ироглифам, тоесть у меня бы не запустилось такое ни вжисть



0



0 / 0 / 0

Регистрация: 13.07.2014

Сообщений: 16

13.07.2014, 18:09

 [ТС]

15

теперь Syntax error
кодировку не признает
может мне выслать вам фаил на мыло?



0



Антихакер32

Заблокирован

13.07.2014, 18:17

16

Скорее всего движком форума, ваша кодировка символов расспозналась неверно
давайте так, вышлите мне сообщения ВКонтакт



0



0 / 0 / 0

Регистрация: 13.07.2014

Сообщений: 16

13.07.2014, 18:18

 [ТС]

17

Нет дело в том что и при копировании в блокнот из дебага он русский шрифт переворачивает



0



Антихакер32

Заблокирован

13.07.2014, 18:24

18

..Ладно, исправляйте кодировку, у меня тоже был одно время такой глюк..



0



maksdemon

0 / 0 / 0

Регистрация: 13.07.2014

Сообщений: 16

13.07.2014, 18:25

 [ТС]

19

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
Private Sub CommandButton1_Click()
  Dim rc1 As Recordset
    Dim db As Database
    
    
    Dim PathBase As String:     PathBase = "D:torg_base_char"
    Dim User As String:         User = "Администратор"
    Dim Password As String:     Password = "chok"
    Dim v77 As Object, result As Variant
    Set v77 = CreateObject("V77.Application")
    result = v77.Initialize(v77.RMTrade, " /D" + PathBase + " /N" + User + " /P" + Password, "")
    If result = 0 Then
        Set v77 = Nothing
        MsgBox "не удалось установить соединение с 1С"
        Exit Sub
    End If
    Set Towar = v77.EvalExpr("СоздатьОбъект(""Справочник.Товар"")")
    x = Towar.ВыбратьЭлементыПоРеквизиту("Весовой", 1, 0, 0)
    Dim i:  i = 0
    Stri = ""
    
    Set db = OpenDatabase("C:Program Filesdhscale_En_56DuoDianMing.mdb")
    Set rs1 = db.OpenRecordset("Select * from PLU@")
    
    rs1.MoveFirst
    
    Do While Towar.ПолучитьЭлемент > 0
        rs1.MoveFirst
        Stri = Towar.ШтрихКод
        StrNew = ""
        For q = 2 To 6
            w = Mid(Stri, q, 1)
            If w <> 0 Then
                StrNew = Mid(Stri, q, 7 - q)
                Exit For
            End If
        Next q
        For e = 2 To StrNew
            rs1.MoveNext
        Next e
        cen = Towar.ЦенаЗаЕд.Получить(ТекущаяДата)
        cen = cen * 100
 
        rs1.Edit
        rs1("DAIMA") = LTrim(RTrim(Towar.ШтрихКод))
        rs1("PRICE") = cen
        rs1("NAME") = Towar.Наименование
        rs1.Update
        
        
    Loop
    
                
    v77.ExecuteBatch ("ЗавершитьРаботуСистемы((0);")
    Set v77 = Nothing
    MsgBox "END"
 
End Sub

Вот так это выглядет



0



Антихакер32

Заблокирован

13.07.2014, 18:31

20

попробуй теперь, будут ошибки ?

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Private Sub CommandButton1_Click()
    Dim rc1 As Recordset
    Dim db As Database
    Dim PathBase As String: PathBase = "D:torg_base_char"
    Dim User As String: User = "Администратор"
    Dim Password As String: Password = "chok"
    Dim v77 As Object, result As Variant
    Set v77 = CreateObject("V77.Application")
    result = v77.Initialize(v77.RMTrade, " /D" + PathBase + " /N" + User + " /P" + Password, "")
    If result = 0 Then
        Set v77 = Nothing
        MsgBox "не удалось установить соединение с 1С"
        Exit Sub
    End If
    Set Towar = v77.EvalExpr("СоздатьОбъект(""Справочник.Товар"")")
    x = Towar.ВыбратьЭлементыПоРеквизиту("Весовой", 1, 0, 0)
    Dim i: i = 0
    Stri = ""
    Set db = OpenDatabase("C:Program Filesdhscale_En_56DuoDianMing.mdb")
    Set rs1 = db.OpenRecordset("Select * from PLU@")
    rs1.MoveFirst
    Do While Towar.ПолучитьЭлемент > 0
        rs1.MoveFirst
        Stri = Towar.ШтрихКод
        StrNew = ""
        For q = 2 To 6
            w = Mid(Stri, q, 1)
            If w <> 0 Then
                StrNew = Mid(Stri, q, 7 - q)
                Exit For
            End If
        Next q
        If Len(StrNew) Then
            For e = 2 To StrNew
                rs1.MoveNext
            Next e
        End If
        cen = Towar.ЦенаЗаЕд.Получить(ТекущаяДата)
        cen = cen * 100
        rs1.Edit
        rs1("DAIMA") = LTrim(RTrim(Towar.ШтрихКод))
        rs1("PRICE") = cen
        rs1("NAME") = Towar.Наименование
        rs1.Update
    Loop
    v77.ExecuteBatch ("ЗавершитьРаботуСистемы((0);")
    Set v77 = Nothing
    MsgBox "END"
End Sub



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

13.07.2014, 18:31

Помогаю со студенческими работами здесь

Если str довольно длинная,то выскакивает ошибка “type mismatch”
Делаю ODBC запрос,пишу .commandtext=array(str),где str=&quot;……..&quot;.Если str довольно длинная,то…

Почему вдруг начали появляться сообщения “ByRef argument type mismatch”?
Работал достаточно долго с программой. Проверял элементы по отдельности. Делаю сборку программы – и…

Ошибка при запуске программы “run time error 13 type mismatch”
сама задача:
Определить количество элементов массива, принадлежащих промежутку отa до b (значения…

Run-Time Error “13”. Type mismatch
Всем доброго времени суток! Писал макрос на перенесение данных из таблиц в сводный лист, и, вроде…

Ошибка “argument type mismatch”
Me.Controls(&quot;Label&quot; &amp; zahod + 1).Caption = num_cows(s, s1)

Function num_cows(s, s1)
k = 0
For…

Ошибка: “Type mismatch”
При запуске скрипта, возникает ошибка: &quot;Type mismatch&quot;.
Код цикла:
For Z = sm + 3 To sm + 17

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

20

Contents

  • 1 VBA Type Mismatch Explained
  • 2 VBA Type Mismatch YouTube Video
  • 3 How to Locate the Type Mismatch Error
  • 4 Assigning a string to a numeric
  • 5 Invalid date
  • 6 Cell Error
  • 7 Invalid Cell Data
  • 8 Module Name
  • 9 Different Object Types
  • 10 Sheets Collection
  • 11 Array and Range
  • 12 Conclusion
  • 13 What’s Next?

VBA Type Mismatch Explained

A VBA Type Mismatch Error occurs when you try to assign a value between two different variable types.

The error appears as “run-time error 13 – Type mismatch”.

VBA Type Mismatch Error 13

For example, if you try to place text in a Long integer variable or you try to place text in a Date variable.

Let’s look at a concrete example. Imagine we have a variable called Total which is a Long integer.

If we try to place text in the variable we will get the VBA Type mismatch error(i.e. VBA Error 13).

' https://excelmacromastery.com/
Sub TypeMismatchString()

    ' Declare a variable of type long integer
    Dim total As Long
    
    ' Assigning a string will cause a type mismatch error
    total = "John"
    
End Sub

Let’s look at another example. This time we have a variable ReportDate of type Date.

If we try to place a non-date in this variable we will get a VBA Type mismatch error

' https://excelmacromastery.com/
Sub TypeMismatchDate()

    ' Declare a variable of type Date
    Dim ReportDate As Date
    
    ' Assigning a number causes a type mismatch error
    ReportDate = "21-22"
    
End Sub

In general, VBA is very forgiving when you assign the wrong value type to a variable e.g.

Dim x As Long

' VBA will convert to integer 100
x = 99.66

' VBA will convert to integer 66
x = "66"

However, there are some conversions that VBA cannot do

Dim x As Long

' Type mismatch error
x = "66a"

A simple way to explain a VBA Type mismatch error, is that the items on either side of the equals evaluate to a different type.

When a Type mismatch error occurs it is often not as simple as these examples. For these more complex cases we can use the Debugging tools to help us resolve the error.

VBA Type Mismatch YouTube Video

Don’t forget to check out my YouTube video on the Type Mismatch Error here:

How to Locate the Type Mismatch Error

The most important thing to do when solving the Type Mismatch error is to, first of all, locate the line with the error and then locate the part of the line that is causing the error.

If your code has Error Handling then it may not be obvious which line has the error.

If the line of code is complex then it may not be obvious which part is causing the error.

The following video will show you how to find the exact piece of code that causes a VBA Error in under a minute:

The following sections show the different ways that the VBA Type Mismatch error can occur.

Assigning a string to a numeric

As we have seen, trying to place text in a numeric variable can lead to the VBA Type mismatch error.

Below are some examples that will cause the error

' https://excelmacromastery.com/
Sub TextErrors()

    ' Long is a long integer
    Dim l As Long
    l = "a"
    
    ' Double is a decimal number
    Dim d As Double
    d = "a"
    
    ' Currency is a 4 decimal place number
    Dim c As Currency
    c = "a"
    
    Dim d As Double
    ' Type mismatch if the cell contains text
    d = Range("A1").Value
    
End Sub

Invalid date

VBA is very flexible when it comes to assigning a date to a date variable. If you put the month in the wrong order or leave out the day, VBA will still do it’s best to accommodate you.

The following code examples show all the valid ways to assign a date followed by the cases that will cause a VBA Type mismatch error.

' https://excelmacromastery.com/
Sub DateMismatch()

    Dim curDate As Date
    
    ' VBA will do it's best for you
    ' - These are all valid
    curDate = "12/12/2016"
    curDate = "12-12-2016"
    curDate = #12/12/2016#
    curDate = "11/Aug/2016"
    curDate = "11/Augu/2016"
    curDate = "11/Augus/2016"
    curDate = "11/August/2016"
    curDate = "19/11/2016"
    curDate = "11/19/2016"
    curDate = "1/1"
    curDate = "1/2016"
   
    ' Type Mismatch
    curDate = "19/19/2016"
    curDate = "19/Au/2016"
    curDate = "19/Augusta/2016"
    curDate = "August"
    curDate = "Some Random Text"

End Sub

Cell Error

A subtle cause of the VBA Type Mismatch error is when you read from a cell that has an error e.g.

VBA Runtime Error

If you try to read from this cell you will get a type mismatch error

Dim sText As String

' Type Mismatch if the cell contains an error
sText = Sheet1.Range("A1").Value

To resolve this error you can check the cell using IsError as follows.

Dim sText As String
If IsError(Sheet1.Range("A1").Value) = False Then
    sText = Sheet1.Range("A1").Value
End If

However, checking all the cells for errors is not feasible and would make your code unwieldy. A better way is to check the sheet for errors first and if errors are found then inform the user.

You can use the following function to do this

Function CheckForErrors(rg As Range) As Long

    On Error Resume Next
    CheckForErrors = rg.SpecialCells(xlCellTypeFormulas, xlErrors).Count

End Function

The following is an example of using this code

' https://excelmacromastery.com/
Sub DoStuff()

    If CheckForErrors(Sheet1.Range("A1:Z1000")) > 0 Then
        MsgBox "There are errors on the worksheet. Please fix and run macro again."
        Exit Sub
    End If
    
    ' Continue here if no error

End Sub

Invalid Cell Data

As we saw, placing an incorrect value type in a variable causes the ‘VBA Type Mismatch’ error. A very common cause is when the value in a cell is not of the correct type.

A user could place text like ‘None’ in a number field not realizing that this will cause a Type mismatch error in the code.

VBA Error 13

If we read this data into a number variable then we will get a ‘VBA Type Mismatch’ error error.

Dim rg As Range
Set rg = Sheet1.Range("B2:B5")

Dim cell As Range, Amount As Long
For Each cell In rg
    ' Error when reaches cell with 'None' text
    Amount = cell.Value
Next rg

You can use the following function to check for non numeric cells before you use the data

Function CheckForTextCells(rg As Range) As Long

    ' Count numeric cells
    If rg.Count = rg.SpecialCells(xlCellTypeConstants, xlNumbers).Count Then
        CheckForTextCells = True
    End If
    
End Function

You can use it like this

' https://excelmacromastery.com/
Sub UseCells()

    If CheckForTextCells(Sheet1.Range("B2:B6").Value) = False Then
        MsgBox "One of the cells is not numeric. Please fix before running macro"
        Exit Sub
    End If
    
    ' Continue here if no error

End Sub

Module Name

If you use the Module name in your code this can cause the VBA Type mismatch to occur. However in this case the cause may not be obvious.

For example let’s say you have a Module called ‘Module1’. Running the following code would result in the VBA Type mismatch error.

' https://excelmacromastery.com/
Sub UseModuleName()
    
    ' Type Mismatch
    Debug.Print module1

End Sub

VBA Type Mismatch Module Name

Different Object Types

So far we have been looking mainly at variables. We normally refer to variables as basic data types.

They are used to store a single value in memory.

In VBA we also have objects which are more complex. Examples are the Workbook, Worksheet, Range and Chart objects.

If we are assigning one of these types we must ensure the item being assigned is the same kind of object. For Example

' https://excelmacromastery.com/
Sub UsingWorksheet()

    Dim wk As Worksheet
    
    ' Valid
    Set wk = ThisWorkbook.Worksheets(1)
    
    ' Type Mismatch error
    ' Left side is a worksheet - right side is a workbook
    Set wk = Workbooks(1)

End Sub

Sheets Collection

In VBA, the workbook object has two collections – Sheets and Worksheets. There is a very subtle difference

  1. Worksheets – the collection of worksheets in the Workbook
  2. Sheets – the collection of worksheets and chart sheets in the Workbook

A chart sheet is created when you move a chart to it’s own sheet by right-clicking on the chart and selecting Move.

If you read the Sheets collection using a Worksheet variable it will work fine if you don’t have a chart sheet in your workbook.

If you do have a chart sheet then you will get the VBA Type mismatch error.

In the following code, a Type mismatch error will appear on the Next sh line if the workbook contains a chart sheet.

' https://excelmacromastery.com/
Sub SheetsError()

    Dim sh As Worksheet
    
    For Each sh In ThisWorkbook.Sheets
        Debug.Print sh.Name
    Next sh

End Sub

Array and Range

You can assign a range to an array and vice versa. In fact this is a very fast way of reading through data.

' https://excelmacromastery.com/
Sub UseArray()

    Dim arr As Variant
    
    ' Assign the range to an array
    arr = Sheet1.Range("A1:B2").Value
    
    ' Print the value a row 1, column 1
    Debug.Print arr(1, 1)

End Sub

The problem occurs if your range has only one cell. In this case, VBA does not convert arr to an array.

If you try to use it as an array you will get the Type mismatch error

' https://excelmacromastery.com/
Sub UseArrayError()

    Dim arr As Variant
    
    ' Assign the range to an array
    arr = Sheet1.Range("A1").Value
    
    ' Type mismatch will occur here
    Debug.Print arr(1, 1)

End Sub

In this scenario, you can use the IsArray function to check if arr is an array

' https://excelmacromastery.com/
Sub UseArrayIf()

    Dim arr As Variant
    
    ' Assign the range to an array
    arr = Sheet1.Range("A1").Value
    
    ' Type mismatch will occur here
    If IsArray(arr) Then
        Debug.Print arr(1, 1)
    Else
        Debug.Print arr
    End If

End Sub

Conclusion

This concludes the post on the VBA Type mismatch error. If you have a mismatch error that isn’t covered then please let me know in the comments.

What’s Next?

Free VBA Tutorial If you are new to VBA or you want to sharpen your existing VBA skills then why not try out the The Ultimate VBA Tutorial.

Related Training: Get full access to the Excel VBA training webinars and all the tutorials.

(NOTE: Planning to build or manage a VBA Application? Learn how to build 10 Excel VBA applications from scratch.)

I created a macro for a file and first it was working fine, but today I’ve been opening and restarting the file and macro hundreds of times and I’m always getting the following error:

Excel VBA Run-time error ’13’ Type mismatch

I didn’t change anything in the macro and don’t know why am I getting the error. Furthermore it takes ages to update the macro every time I put it running (the macro has to run about 9000 rows).

The error is on the line in the between ** **.

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

I’m using excel 2010 on windows 7.

Vega's user avatar

Vega

27.5k27 gold badges94 silver badges101 bronze badges

asked Jan 16, 2012 at 19:52

Diogo's user avatar

1

You would get a type mismatch if Sheets(name).Cells(4 + i, 57) contains a non-numeric value. You should validate the fields before you assume they are numbers and try to subtract from them.

Also, you should enable Option Strict so you are forced to explicitly convert your variables before trying to perform type-dependent operations on them such as subtraction. That will help you identify and eliminate issues in the future, too.
   Unfortunately Option Strict is for VB.NET only. Still, you should look up best practices for explicit data type conversions in VBA.


Update:

If you are trying to go for the quick fix of your code, however, wrap the ** line and the one following it in the following condition:

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

Note that your x value may not contain its expected value in the next iteration, however.

answered Jan 16, 2012 at 19:55

Devin Burke's user avatar

Devin BurkeDevin Burke

13.6k12 gold badges55 silver badges82 bronze badges

5

Thank you guys for all your help! Finally I was able to make it work perfectly thanks to a friend and also you!
Here is the final code so you can also see how we solve it.

Thanks again!

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

bpeterson76's user avatar

bpeterson76

12.9k4 gold badges48 silver badges82 bronze badges

answered Jan 17, 2012 at 16:50

Diogo's user avatar

DiogoDiogo

1511 gold badge1 silver badge5 bronze badges

1

Diogo

Justin has given you some very fine tips 🙂

You will also get that error if the cell where you are performing the calculation has an error resulting from a formula.

For example if Cell A1 has #DIV/0! error then you will get “Excel VBA Run-time error ’13’ Type mismatch” when performing this code

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

I have made some slight changes to your code. Could you please test it for me? Copy the code with the line numbers as I have deliberately put them there.

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

answered Jan 16, 2012 at 23:15

Siddharth Rout's user avatar

Siddharth RoutSiddharth Rout

146k17 gold badges206 silver badges250 bronze badges

3

For future readers:

This function was abending in Run-time error '13': Type mismatch

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

In my case, the function was failing when it ran into a #DIV/0! or N/A value.

To solve it, I had to do this:

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

answered Jun 21, 2018 at 15:45

cssyphus's user avatar

cssyphuscssyphus

37.4k18 gold badges91 silver badges109 bronze badges

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

Neil's user avatar

Neil

54.3k8 gold badges60 silver badges72 bronze badges

answered Oct 9, 2015 at 10:10

chetan dubey's user avatar

I had the same problem as you mentioned here above and my code was doing great all day yesterday.

I kept on programming this morning and when I opened my application (my file with an Auto_Open sub), I got the Run-time error ’13’ Type mismatch, I went on the web to find answers, I tried a lot of things, modifications and at one point I remembered that I read somewhere about “Ghost” data that stays in a cell even if we don’t see it.

My code do only data transfer from one file I opened previously to another and Sum it. My code stopped at the third SheetTab (So it went right for the 2 previous SheetTab where the same code went without stopping) with the Type mismatch message. And it does that every time at the same SheetTab when I restart my code.

So I selected the cell where it stopped, manually entered 0,00 (Because the Type mismatch comes from a Summation variables declared in a DIM as Double) and copied that cell in all the subsequent cells where the same problem occurred. It solved the problem. Never had the message again. Nothing to do with my code but the “Ghost” or data from the past. It is like when you want to use the Control+End and Excel takes you where you had data once and deleted it. Had to “Save” and close the file when you wanted to use the Control+End to make sure Excel pointed you to the right cell.

TylerH's user avatar

TylerH

20.6k64 gold badges72 silver badges97 bronze badges

answered Oct 11, 2013 at 19:14

Youbi's user avatar

This error occurs when the input variable type is wrong. You probably have written a formula in Cells(4 + i, 57) that instead of =0, the formula = "" have used. So when running this error is displayed. Because empty string is not equal to zero.

enter image description here

answered Dec 13, 2016 at 21:12

gadolf's user avatar

gadolfgadolf

1,01511 silver badges19 bronze badges

Facing error with Excel application that you use in your day to day routine, whether regularly or seldom; at home or in the workplace, is unquestionably an undesired circumstance. The problem increases when the error that you have found, is remote or for the first time. Both MS Excel XLS and XLSX files become unreliable or corrupt at times and may return different errors including Microsoft visual basic runtime error 13 type mismatch in excel.

win download

Other
than Excel runtime 1004, 32809, 57121 error; Excel Runtime Error 13 also
affects MS Excel or its XLS/XLSX files. If you have no idea to resolve the
error as fast as possible, it is obvious you to get baffled. This technical
post is a purpose to assist you to resolve the runtime error 13. So know the
error: its causes and fixes here.

Introduction to MS Excel Runtime Error 13

The
Excel runtime file error 13 is a type of mismatch error in MS Excel. Normally,
it arises when one or more files or methods are needed to begin a program that
operates the Visual Basic (VB) environment by default. This means the error
occurs when Excel users try to run VBA code including data types that are not
met in the correct manner. Consequently, ‘runtime error 13: type mismatch
Excel’ appears in Microsoft Excel.

What causes runtime error 13 type mismatch in excel?

Following
are the reason for runtime error 13 in excel:

  • Flawed or unfinished installation of
    MS Excel application in the system.
  • The clash between the Excel
    application program and Win operating system.
  • When the user clicks a missing menu
    function or a macro from an Excel file.
  • A faulty code infection or
    virus/malware attack makes excel files prone to corruption.
  • Collide with other programs while
    launching a VBA Excel file.

Techniques to Resolve MS Excel runtime error 13 Type Mismatch Excel

#Technique 1: Using Open and
Repair Utility

The
MS Excel automatically provides ‘File Recovery’ mode when it detects a
corrupted workbook or worksheet. It does this to fix the damaged Excel files.
But sometimes  Excel does not give the
‘File Recovery’ mode automatically. This is the time when you can use ‘Open and
Repair’, an inbuilt utility in Excel to restore damaged Excel files. Use this
technique to fix Microsoft visual basic runtime error 13 type mismatch in Excel:

  • Open Excel application.
  • Navigate to the File menu and click
    on the Open button.
  • Choose the ‘Excel’ file.
  • Click the ‘Open’ dropdown list.
  • ­Click the ‘Open and Repair’ button.
  • Click the ‘Repair’ button to recover
    maximum possible data Or Click the ‘Extract Data’ tab to secure values and
    formulae.

#Technique 2:  Uninstall the ‘error causing excel’

It is observed that unusual applications programs and software
cause runtime error. Uninstall those applications or software to fix the Excel
file runtime error. To do so, the actions are:

  • Go to ‘Task Manager’ and stop the error
    causing programs one by one.
  • Click the ‘Start’ menu.
  • Click ‘Control Panel’ button.
  • Select ‘Add or Remove Program’ in Control
    Panel.
  • All the installed programs on the PC are
    enlisted.
  • Select MS Excel and click ‘Uninstall’ to
    remove it from the PC.

#Technique 3: Repair Windows Registry

  • Navigate to Windows Registry on your
    PC.
  • In Windows registry editor open
    HKEY_LOCAL_MACHINE_Software.
  • Click on Software and select
    Microsoft >> Windows then, select Current version >> Run.
  • Now, choose the error file and
    Delete it.
  • After here, reboot your system.

#Technique 4: Use SysInfoTools Excel Repair
Software

An expert Excel file repair software by SysInfoTools that strongly repairs infected Excel XLS and XLSX files without any trouble. Recover all-important Excel file components: table, chart, chart sheet, formula, cell comment, image, sort, filter, etc. without data loss or change in the structure or data alteration of the files. With a user-friendly and habitual interface having quickly accessible tabs, buttons, and menus, the Excel file repair process is easy and saves time.

Final Verdict

This blog explains Microsoft visual basic runtime error 13 type mismatch in Excel in detail. Now you can fix Excel runtime error by using any of the above-discussed techniques. If you want to learn How to Recover Unsaved Excel File Windows then read here. I hope you like the post. Thanks

Добавить комментарий