Страницы: 1
RSS
run time error 13 type mismatch в VBA, Не могу понять причину ошибки и как ее решить
 
День добрый
Имеется макрос, который я переодически добавляю
Суть макроса, зайти открыть указанный файл, найти там указанные "Умные таблицы" и перенести в них данные по условиям

Задаю названия нужных таблиц через переменные по порядку
Код
Sub update()
    FilesToOpen = "С://prod20_22.xlsx"
       
    Application.ScreenUpdating = False
    Set importWb = Workbooks.Open(FilesToOpen, , True)
    
    Application.ScreenUpdating = True
    
    arr1 = [Sales_ETM]
    arr2 = [Sales_RS]
    arr3 = [Plany]
    arr4 = [AMB_ETM]
    arr5 = [num]
    arr6 = [Sales_ETM_20_22]
    arr7 = [Sales_RS_20_21]
    arr8 = [land_TM]
    arr9 = [mfon]
    arr11 = [land_TM_RS]

Далее идут условия переноса модулями типа так:
Код
If Not [land_TM].ListObject.DataBodyRange Is Nothing Then [land_TM].ListObject.DataBodyRange.Delete
    arrd8 = [land_TM].Resize(UBound(arr8))
    cr = 1
    For i = 1 To UBound(arr8)
        If arr8(i, 1) = ThisWorkbook.Sheets("p-f KPI").Range("B2") And arr8(i, 4) = ThisWorkbook.Sheets("p-f KPI").Range("J1") Then
            For j = 1 To 4
                arrd8(cr, j) = arr8(i, j)
            Next
            cr = cr + 1
        End If
    Next
    If cr > 1 Then [land_TM].Resize(cr - 1) = arrd8

Так вот пока у меня было 9 переменных, все работало корректно. А как ввел десятую, код начал спотыкаться, хотя модули сделаны по одинаковому принципу

вот на этой части выскакивает ошибка:
Код
If Not [land_TM_RS].ListObject.DataBodyRange Is Nothing Then [land_TM_RS].ListObject.DataBodyRange.Delete
    arrd11 = [land_TM_RS].Resize(UBound(arr11))
    cr = 1
    For i = 1 To UBound(arr10)
        If arr11(i, 1) = ThisWorkbook.Sheets("p-f KPI").Range("B2") Then
            For j = 1 To 4
                arrd11(cr, j) = arr10(i, j)
            Next
            cr = cr + 1
        End If
    Next
    If cr > 1 Then [land_TM_RS].Resize(cr - 1) = arrd11
Скрины ошибок приложил. Единственное мое предположение, что есть какой-то лимит по количеству переменных.
Помогите пожалуйста разобраться  
Изменено: Иван - 05.08.2022 15:45:55
 
лимита на количество переменных - нет
без файла разбирайтесь сами
для начала посмотрите чему равно Ubound(arrll)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
написал:
arr11 = [land_TM_RS]
убедитесь, что arr11 является массивом, а не единственным значением. Потому как если у Вас в [land_TM_RS] только одна ячейка - то arr11 будет присвоено всего одно значение, а не массив.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
убедитесь, что arr11 является массивом, а не единственным значением. Потому как если у Вас в [land_TM_RS] только одна ячейка - то arr11 будет присвоено всего одно значение, а не массив.
arr11 - это название "умной таблицы". Так у меня устроены все остальные arr с 1 по 9.  9 умных таблиц и в них заносятся данные по условиям. Один в один все по аналогии. И все нормально работало, пока не вставил arr11
Что именно надо посмотреть, что бы убедиться в массиве?
 
Цитата
для начала посмотрите чему равно Ubound(arrll)
а где это смотреть?
Файл прикрепить не могу, так как он у меня очень тяжелый  
 
В общем заработало, но я так и не понял почему
один из столбцов таблицы был полностью пустым. Я его удалил и все заработало )
В других таблицах тоже есть пустые столбцы (ну или почти пустые) и там никаких ошибок не выскакивало
 
Цитата
Иван написал:
arr11 - это название "умной таблицы".
Ни в коем разе. Это массив.
Цитата
Иван написал:
а где это смотреть?
Смотреть в окне Locals (View--Locals Windows)
Цитата
Иван написал:
один из столбцов таблицы был полностью пустым
Но в нем был заголовок,
Цитата
Дмитрий(The_Prist) Щербаков написал:
Потому как если у Вас в [land_TM_RS] только одна ячейка - то arr11 будет присвоено всего одно значение, а не массив.
Изменено: RAN - 06.08.2022 21:21:04
 
Спасибо за ответы. Теперь понял
Еще дополнительный вопрос. Может поможете
Суть моего макроса в том, что он находит нужную таблицу в файле по адресу, потом находит такую же таблицу в своем файле и переносит туда данные по условиям (условия, это указанные данные в ячейке) по сути, разносит отчет по менеджерам. В итоге каждый менеджер получает только те данные, которые к нему относятся (из общего массива данных)
Вопрос следующий. Обязательное условие переноса, это то, что таблицы должны быть абсолютно одинаковы (с одинаковым количеством столбцов)
А можно сделать так, что бы таблицы были разные? То есть в таблице исходнике, например 5 столбцов, а данные переносились только из определенных столбцов и таблица куда они загружаются например состояла только из двух столбцов?
 
Цитата
Иван написал:
А можно сделать так, что бы таблицы были разные?
можно. как напишете - так и будет переносить (и никак иначе)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Страницы: 1
Наверх