Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/type mismatch error 13 в макросе - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » type mismatch error 13 в макросе (Макросы/Sub)
type mismatch error 13 в макросе
prmdrk Дата: Четверг, 24.04.2014, 10:29 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Никак не могу понять почему вылазит ошибка error 13 type mismatch в макросе
ошибку выдает на строку с

[vba]
Код
For Ii# = 3 To TransWbMaxRow

Public Mwb As Workbook
Public Mwb1 As Workbook
Public Asheet As Worksheet
Public Bsheet As Worksheet

Public TransWbMaxRow As Variant
Public TransWbMaxCol As Variant
Public GetMaxRow() As Variant

Public Arr_Art_Main(500000) As Variant
Public Arr_Art_Sub(500000) As Variant
Public Arr_Stock_Main(500000) As Variant

Public Arr_Art1(500000) As Variant
Public Arr_Art2(500000) As Variant
Public Arr_Art3(500000) As Variant
Public Arr_Art4(500000) As Variant
Public Arr_Art5(500000) As Variant
Public Arr_Art6(500000) As Variant
Public Arr_Art7(500000) As Variant
Public Arr_Art8(500000) As Variant
Public Arr_Art9(500000) As Variant
Public Arr_Art10(500000) As Variant
Public Arr_Art11(500000) As Variant
Public Arr_Art12(500000) As Variant
Public Arr_Priznak(500000) As Variant

Public Arr_Prod_name(500000) As Variant

Public Arr_Client_name_plan(500000) As Variant
Public Arr_Client_Prod_code_plan(500000) As Variant
Public Arr_Client_Prod_group_plan(500000) As Variant
Public Arr_Client_Prod_Qnt_plan(500000) As Variant
Public Arr_Client_Prod_Rub_plan(500000) As Variant
Public Arr_Client_Prod_Kg_plan(500000) As Variant
Public Arr_Client_Prod_Name_plan(500000) As Variant
Public Arr_Client_Prod_Weight(500000) As Variant
Public Arr_Client_Prod_Price(500000) As Variant
Public Arr_Client_Prod_OOS(500000) As Variant
Public Arr_Client_Prod_Group(500000) As Variant

Public Arr_Client_Prod_code_actual(500000) As Variant
Public Arr_Client_Name_actual(500000) As Variant
Public Arr_Client_Prod_Qnt_Sales(500000) As Variant
Public Arr_Client_Prod_Qnt_Transit(500000) As Variant
Public Arr_Client_Prod_Qnt_Order(500000) As Variant
Public Arr_Client_Region(500000) As Variant

Public Client_Cognos(500000) As Variant
Public Client_Cognos_Addr(500000) As Variant
Public Client_CisLink(500000) As Variant
Sub Download_plan_fact_client()
Set Mwb = ActiveWorkbook
Client$ = Range("A1").Value
If Len(Client$) = 0 Then
MsgBox "Íå âûáðàí êëèåíò!"
Range("A1").Activate
End
End If
aaa% = MsgBox("Äîáàâèòü äàííûå ïî ïëàíó è ôàêòó äëÿ " & Client$ & "?", vbYesNo + vbInformation, "Âíèìàíèå.")
If aaa% <> vbYes Then
End
End If
Application.ScreenUpdating = False

'''Âûãðóçèì òåêóùèå ïðîäàæè'''
Mwb.Sheets("Details").Activate
TransWbMaxRow = GetMaxRow()
cnt1# = 0
For Ii# = 3 To TransWbMaxRow
If Len(Trim(Cells(Ii#, 1).Value)) = 0 Then Exit For
If Trim(Cells(Ii#, 1).Value) = Client$ Then
cnt1# = cnt1# + 1
Arr_Client_Prod_code_actual(cnt1#) = Trim(Cells(Ii#, 3).Value)
Arr_Client_Prod_Qnt_Sales(cnt1#) = Val(Cells(Ii#, 12).Value) ' ïðîäàæè, çàêàçû, òðàíçèòû â øò
Arr_Client_Prod_Qnt_plan(cnt1#) = Val(Cells(Ii#, 6).Value) ' ïëàí, øò
Arr_Client_Prod_OOS(cnt1#) = Trim(Cells(Ii#, 26).Value)
Arr_Client_Prod_Group(cnt1#) = Trim(Cells(Ii#, 27).Value)
End If
Next Ii#

Mwb.Sheets("Checking").Activate
TransWbMaxRow = GetMaxRow()
''''' Óäàëåíèå ñòàðûõ äàííûõ
For Ii# = 4 To TransWbMaxRow
If Len(Trim(Cells(Ii#, 1).Value)) = 0 Then Exit For
Cells(Ii#, 4).Value = ""
Cells(Ii#, 5).Value = 0
Cells(Ii#, 6).Value = 0
Cells(Ii#, 8).Value = 0
Next Ii#

For Ii# = 4 To TransWbMaxRow
If Len(Trim(Cells(Ii#, 1).Value)) = 0 Then Exit For
For j# = 1 To cnt1#
If Trim(Cells(Ii#, 2).Value) = Arr_Client_Prod_code_actual(j#) Then
Cells(Ii#, 4).Value = Arr_Client_Prod_Group(j#)
Cells(Ii#, 5).Value = Arr_Client_Prod_Qnt_plan(j#)
Cells(Ii#, 6).Value = Arr_Client_Prod_Qnt_Sales(j#)
If Arr_Client_Prod_OOS(j#) = "-" Then
Cells(Ii#, 3).Value = "Äà"
End If

Exit For
End If
Next j#
Next Ii#
End Sub
[/vba]


Сообщение отредактировал Serge_007 - Четверг, 09.07.2015, 10:13
 
Ответить
СообщениеНикак не могу понять почему вылазит ошибка error 13 type mismatch в макросе
ошибку выдает на строку с

[vba]
Код
For Ii# = 3 To TransWbMaxRow

Public Mwb As Workbook
Public Mwb1 As Workbook
Public Asheet As Worksheet
Public Bsheet As Worksheet

Public TransWbMaxRow As Variant
Public TransWbMaxCol As Variant
Public GetMaxRow() As Variant

Public Arr_Art_Main(500000) As Variant
Public Arr_Art_Sub(500000) As Variant
Public Arr_Stock_Main(500000) As Variant

Public Arr_Art1(500000) As Variant
Public Arr_Art2(500000) As Variant
Public Arr_Art3(500000) As Variant
Public Arr_Art4(500000) As Variant
Public Arr_Art5(500000) As Variant
Public Arr_Art6(500000) As Variant
Public Arr_Art7(500000) As Variant
Public Arr_Art8(500000) As Variant
Public Arr_Art9(500000) As Variant
Public Arr_Art10(500000) As Variant
Public Arr_Art11(500000) As Variant
Public Arr_Art12(500000) As Variant
Public Arr_Priznak(500000) As Variant

Public Arr_Prod_name(500000) As Variant

Public Arr_Client_name_plan(500000) As Variant
Public Arr_Client_Prod_code_plan(500000) As Variant
Public Arr_Client_Prod_group_plan(500000) As Variant
Public Arr_Client_Prod_Qnt_plan(500000) As Variant
Public Arr_Client_Prod_Rub_plan(500000) As Variant
Public Arr_Client_Prod_Kg_plan(500000) As Variant
Public Arr_Client_Prod_Name_plan(500000) As Variant
Public Arr_Client_Prod_Weight(500000) As Variant
Public Arr_Client_Prod_Price(500000) As Variant
Public Arr_Client_Prod_OOS(500000) As Variant
Public Arr_Client_Prod_Group(500000) As Variant

Public Arr_Client_Prod_code_actual(500000) As Variant
Public Arr_Client_Name_actual(500000) As Variant
Public Arr_Client_Prod_Qnt_Sales(500000) As Variant
Public Arr_Client_Prod_Qnt_Transit(500000) As Variant
Public Arr_Client_Prod_Qnt_Order(500000) As Variant
Public Arr_Client_Region(500000) As Variant

Public Client_Cognos(500000) As Variant
Public Client_Cognos_Addr(500000) As Variant
Public Client_CisLink(500000) As Variant
Sub Download_plan_fact_client()
Set Mwb = ActiveWorkbook
Client$ = Range("A1").Value
If Len(Client$) = 0 Then
MsgBox "Íå âûáðàí êëèåíò!"
Range("A1").Activate
End
End If
aaa% = MsgBox("Äîáàâèòü äàííûå ïî ïëàíó è ôàêòó äëÿ " & Client$ & "?", vbYesNo + vbInformation, "Âíèìàíèå.")
If aaa% <> vbYes Then
End
End If
Application.ScreenUpdating = False

'''Âûãðóçèì òåêóùèå ïðîäàæè'''
Mwb.Sheets("Details").Activate
TransWbMaxRow = GetMaxRow()
cnt1# = 0
For Ii# = 3 To TransWbMaxRow
If Len(Trim(Cells(Ii#, 1).Value)) = 0 Then Exit For
If Trim(Cells(Ii#, 1).Value) = Client$ Then
cnt1# = cnt1# + 1
Arr_Client_Prod_code_actual(cnt1#) = Trim(Cells(Ii#, 3).Value)
Arr_Client_Prod_Qnt_Sales(cnt1#) = Val(Cells(Ii#, 12).Value) ' ïðîäàæè, çàêàçû, òðàíçèòû â øò
Arr_Client_Prod_Qnt_plan(cnt1#) = Val(Cells(Ii#, 6).Value) ' ïëàí, øò
Arr_Client_Prod_OOS(cnt1#) = Trim(Cells(Ii#, 26).Value)
Arr_Client_Prod_Group(cnt1#) = Trim(Cells(Ii#, 27).Value)
End If
Next Ii#

Mwb.Sheets("Checking").Activate
TransWbMaxRow = GetMaxRow()
''''' Óäàëåíèå ñòàðûõ äàííûõ
For Ii# = 4 To TransWbMaxRow
If Len(Trim(Cells(Ii#, 1).Value)) = 0 Then Exit For
Cells(Ii#, 4).Value = ""
Cells(Ii#, 5).Value = 0
Cells(Ii#, 6).Value = 0
Cells(Ii#, 8).Value = 0
Next Ii#

For Ii# = 4 To TransWbMaxRow
If Len(Trim(Cells(Ii#, 1).Value)) = 0 Then Exit For
For j# = 1 To cnt1#
If Trim(Cells(Ii#, 2).Value) = Arr_Client_Prod_code_actual(j#) Then
Cells(Ii#, 4).Value = Arr_Client_Prod_Group(j#)
Cells(Ii#, 5).Value = Arr_Client_Prod_Qnt_plan(j#)
Cells(Ii#, 6).Value = Arr_Client_Prod_Qnt_Sales(j#)
If Arr_Client_Prod_OOS(j#) = "-" Then
Cells(Ii#, 3).Value = "Äà"
End If

Exit For
End If
Next j#
Next Ii#
End Sub
[/vba]

Автор - prmdrk
Дата добавления - 24.04.2014 в 10:29
Gustav Дата: Четверг, 24.04.2014, 10:55 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2700
Репутация: 1123 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Вставьте перед этой строкой оператор Debug.Print VarType(TransWbMaxRow), посмотрите что приходит в этой переменной к началу цикла. Расшифровка возвращаемых кодов - по F1 на VarType.


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеВставьте перед этой строкой оператор Debug.Print VarType(TransWbMaxRow), посмотрите что приходит в этой переменной к началу цикла. Расшифровка возвращаемых кодов - по F1 на VarType.

Автор - Gustav
Дата добавления - 24.04.2014 в 10:55
prmdrk Дата: Четверг, 24.04.2014, 11:04 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
вставил данную строку. Ничего не появилось, ругается на ту же строку.
 
Ответить
Сообщениевставил данную строку. Ничего не появилось, ругается на ту же строку.

Автор - prmdrk
Дата добавления - 24.04.2014 в 11:04
Gustav Дата: Четверг, 24.04.2014, 11:09 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2700
Репутация: 1123 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Окно отладки (Immediate window) откройте (по Ctrl+G, например). Раньше совсем не приходилось отладкой кода на VBA заниматься?


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеОкно отладки (Immediate window) откройте (по Ctrl+G, например). Раньше совсем не приходилось отладкой кода на VBA заниматься?

Автор - Gustav
Дата добавления - 24.04.2014 в 11:09
prmdrk Дата: Четверг, 24.04.2014, 11:14 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
совсем, пытаюсь разобраться постольку поскольку, чтобы автоматизировать некоторые рабочие свои моменты.
В отладку пришло 8204.
 
Ответить
Сообщениесовсем, пытаюсь разобраться постольку поскольку, чтобы автоматизировать некоторые рабочие свои моменты.
В отладку пришло 8204.

Автор - prmdrk
Дата добавления - 24.04.2014 в 11:14
Gustav Дата: Четверг, 24.04.2014, 11:28 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2700
Репутация: 1123 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
В отладку пришло 8204.

Всё, что больше, чем 8192 - это массив (array) того типа, который получается при вычитании 8192. Т.е. у вас это массив 8204-8192 = 12, т.е. vbVariant. Таким образом, верхняя граница цикла задана массивом, а не простым значением. Собственно у вас всё так и обявлено: Public GetMaxRow() As Variant. Две скобки в данном случае - это динамический массив. А в программе дальше вы почему-то используете его как функцию - не обижайтесь, но бред какой-то, если честно...

P.S. По сути функция в местах присваивания напрашивается больше, но тогда где ее код? И надо строку Public GetMaxRow() As Variant убрать из объявлений. Т.е. у вас должна появиться Function GetMaxRow(), которая каким-то образом должна вычислять максимальную строку, судя по смыслу названия.


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Четверг, 24.04.2014, 11:34
 
Ответить
Сообщение
В отладку пришло 8204.

Всё, что больше, чем 8192 - это массив (array) того типа, который получается при вычитании 8192. Т.е. у вас это массив 8204-8192 = 12, т.е. vbVariant. Таким образом, верхняя граница цикла задана массивом, а не простым значением. Собственно у вас всё так и обявлено: Public GetMaxRow() As Variant. Две скобки в данном случае - это динамический массив. А в программе дальше вы почему-то используете его как функцию - не обижайтесь, но бред какой-то, если честно...

P.S. По сути функция в местах присваивания напрашивается больше, но тогда где ее код? И надо строку Public GetMaxRow() As Variant убрать из объявлений. Т.е. у вас должна появиться Function GetMaxRow(), которая каким-то образом должна вычислять максимальную строку, судя по смыслу названия.

Автор - Gustav
Дата добавления - 24.04.2014 в 11:28
prmdrk Дата: Четверг, 24.04.2014, 11:35 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
ни в коем разе не обижаюсь=) есть ли возможность поправить то что есть, или надо переписывать все?
 
Ответить
Сообщениени в коем разе не обижаюсь=) есть ли возможность поправить то что есть, или надо переписывать все?

Автор - prmdrk
Дата добавления - 24.04.2014 в 11:35
Gustav Дата: Четверг, 24.04.2014, 11:40 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2700
Репутация: 1123 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
есть ли возможность поправить то что есть, или надо переписывать все?

Малой кровью это примерно так:
1. Убираем строку Public GetMaxRow() As Variant.
2. В самом низу пишем функцию:
[vba]
Код
Public Function GetMaxRow() As Long
     бла-бла-бла
     GetMaxRow = ...
End Function
[/vba]


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Четверг, 24.04.2014, 11:40
 
Ответить
Сообщение
есть ли возможность поправить то что есть, или надо переписывать все?

Малой кровью это примерно так:
1. Убираем строку Public GetMaxRow() As Variant.
2. В самом низу пишем функцию:
[vba]
Код
Public Function GetMaxRow() As Long
     бла-бла-бла
     GetMaxRow = ...
End Function
[/vba]

Автор - Gustav
Дата добавления - 24.04.2014 в 11:40
prmdrk Дата: Четверг, 24.04.2014, 11:46 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Спасибо!
Сработало после вставки.

[vba]
Код
Function GetMaxRow() As Variant
      On Error GoTo met2
      GetMaxRow = ActiveCell.SpecialCells(xlLastCell).Row
      Exit Function
met2:
      Resume Next
End Function
[/vba]
 
Ответить
СообщениеСпасибо!
Сработало после вставки.

[vba]
Код
Function GetMaxRow() As Variant
      On Error GoTo met2
      GetMaxRow = ActiveCell.SpecialCells(xlLastCell).Row
      Exit Function
met2:
      Resume Next
End Function
[/vba]

Автор - prmdrk
Дата добавления - 24.04.2014 в 11:46
Zaga83 Дата: Вторник, 25.07.2017, 16:08 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Всем привет!!!
Помогите разобраться

Пытаюсь проверить через клавишу F8
этот код.
Выходит сообщение, ошибка 13.
как исправить не могу понять, так как не могу понять как мне объявить переменную MyShortDate?

[color=blue]Public Sub Пример_функции_Датат()
Dim MyDate As String, MyTime, MyShortTime
Dim MyShortDate


MyDate = "February 12, 1969" ' Define date.
MyShortDate = CDate(MyDate)' Convert to Date data type.

MyTime = "4:35:47 PM" ' Define time.
MyShortTime = CDate(MyTime) ' Convert to Date data type.
End Sub[/color]
К сообщению приложен файл: __.xls (31.5 Kb)


Сообщение отредактировал Zaga83 - Вторник, 25.07.2017, 16:13
 
Ответить
СообщениеВсем привет!!!
Помогите разобраться

Пытаюсь проверить через клавишу F8
этот код.
Выходит сообщение, ошибка 13.
как исправить не могу понять, так как не могу понять как мне объявить переменную MyShortDate?

[color=blue]Public Sub Пример_функции_Датат()
Dim MyDate As String, MyTime, MyShortTime
Dim MyShortDate


MyDate = "February 12, 1969" ' Define date.
MyShortDate = CDate(MyDate)' Convert to Date data type.

MyTime = "4:35:47 PM" ' Define time.
MyShortTime = CDate(MyTime) ' Convert to Date data type.
End Sub[/color]

Автор - Zaga83
Дата добавления - 25.07.2017 в 16:08
_Boroda_ Дата: Вторник, 25.07.2017, 16:14 | Сообщение № 11
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Zaga83, Последнее китайское предупреждение - прочитайте полностью Правила форума
http://www.excelworld.ru/forum/2-20-1
и как пользоваться тегами
http://www.excelworld.ru/forum/13-2708-1


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеZaga83, Последнее китайское предупреждение - прочитайте полностью Правила форума
http://www.excelworld.ru/forum/2-20-1
и как пользоваться тегами
http://www.excelworld.ru/forum/13-2708-1

Автор - _Boroda_
Дата добавления - 25.07.2017 в 16:14
Мир MS Excel » Вопросы и решения » Вопросы по VBA » type mismatch error 13 в макросе (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!