Никак не могу понять почему вылазит ошибка 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]
Никак не могу понять почему вылазит ошибка 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
Вставьте перед этой строкой оператор Debug.Print VarType(TransWbMaxRow), посмотрите что приходит в этой переменной к началу цикла. Расшифровка возвращаемых кодов - по F1 на VarType.
Вставьте перед этой строкой оператор Debug.Print VarType(TransWbMaxRow), посмотрите что приходит в этой переменной к началу цикла. Расшифровка возвращаемых кодов - по F1 на VarType.Gustav
Всё, что больше, чем 8192 - это массив (array) того типа, который получается при вычитании 8192. Т.е. у вас это массив 8204-8192 = 12, т.е. vbVariant. Таким образом, верхняя граница цикла задана массивом, а не простым значением. Собственно у вас всё так и обявлено: Public GetMaxRow() As Variant. Две скобки в данном случае - это динамический массив. А в программе дальше вы почему-то используете его как функцию - не обижайтесь, но бред какой-то, если честно...
P.S. По сути функция в местах присваивания напрашивается больше, но тогда где ее код? И надо строку Public GetMaxRow() As Variant убрать из объявлений. Т.е. у вас должна появиться Function GetMaxRow(), которая каким-то образом должна вычислять максимальную строку, судя по смыслу названия.
Всё, что больше, чем 8192 - это массив (array) того типа, который получается при вычитании 8192. Т.е. у вас это массив 8204-8192 = 12, т.е. vbVariant. Таким образом, верхняя граница цикла задана массивом, а не простым значением. Собственно у вас всё так и обявлено: Public GetMaxRow() As Variant. Две скобки в данном случае - это динамический массив. А в программе дальше вы почему-то используете его как функцию - не обижайтесь, но бред какой-то, если честно...
P.S. По сути функция в местах присваивания напрашивается больше, но тогда где ее код? И надо строку Public GetMaxRow() As Variant убрать из объявлений. Т.е. у вас должна появиться Function GetMaxRow(), которая каким-то образом должна вычислять максимальную строку, судя по смыслу названия.Gustav
Пытаюсь проверить через клавишу 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]
Всем привет!!! Помогите разобраться
Пытаюсь проверить через клавишу 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