2014-12-23 2 views
0

Я боролся с этим один на некоторое время без успеха. Я написал код для импорта некоторых данных из базы данных, с добавленной проблемой у них разные форматы. Поэтому я написал раздел, который будет проходить через другую базу и вывести данные обратно на правильном порядке (то есть не весь код, который я сделал все соответствующие заявления, установленных для объектов.):Ошибка времени выполнения VBA 91 «Объектная переменная или с переменной блока не установлена»

Dim wb_atual, wb_verificar As Workbook 
Dim sheet_atual, sheet_verificar As Worksheet 
Dim choice, lin_max, lin_b_max, col, col_id, col_max, i, j, k As Integer 
Dim is_equal As Boolean 

     For i = 1 To col_max 
      col = wb_verificar.Sheets(sheet_verificar.Name).Range("1:1").Find(wb_atual.Sheets(sheet_atual.Name).Cells(2, i).Value, LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlByColumns, searchdirection:=xlNext).Column 
      sheet_atual.Cells(j, i).Value = sheet_verificar.Range(sheet_verificar.Cells(j - 1, col), sheet_verificar.Cells(j - 1, col)).Value 
      lin_b_max = lin_b_max + 1 
     Next i  

То есть который вызвал ошибку, в частности переменную строку «col». То, что эта строка делает, это искать заголовок столбца из листа в другом и сохраняет номер столбца. Этот цикл отлично работает для i = 1 и 2, но на третьей итерации я получаю ошибку.

Заранее спасибо за любую помощь

+0

Я предполагаю, что это не весь ваш код, а где-то есть «установленные» операторы для ваших книг и рабочих листов. Сообщение об ошибке указывает на то, что один из этих объектов не «установлен». Таким образом, похоже, что либо отсутствует инструкция set, либо «set» не удалось из-за объекта, который вы пытаетесь присвоить ему, не существует, хотя, если бы это было так, я бы ожидал, что это ошибка в самом наборе , Является ли полный код в целом опубликованным, можете ли вы подтвердить, где выполняются утверждения Set, есть ли другая соответствующая логика, которая может повлиять на них? –

+0

Да, полный код действительно немного длинный. Тем не менее, все переменные рабочей книги и рабочей таблицы были установлены ранее, что подтверждается тем фактом, что для работы цикла в двух первых итерациях это нормально. Остальная часть кода довольно модульная, и в этом цикле мало что влияет. Поскольку ошибка возникает между циклами, все остальные переменные являются постоянными. –

+0

Вы должны попытаться изолировать свою проблему и создать минимальный рабочий пример. Проводка фрагментов кода, которые не воспроизводят ошибку, как правило, не побуждает многих людей помогать в вашей проблеме. Лучшая догадка из предоставленной вами информации заключается в том, что вам не хватает ключевого слова 'set', где-то в коде * unseen *, или ваш оператор' Find' не находит того, что вы просили об этом. –

ответ

0

Проблема была с методом .find. Я не мог понять, почему он терпит неудачу, учитывая, что функции рабочего стола vlookup и match отлично работают в этой ячейке. Я работал над этим, написав основную функцию пользовательского поиска, чтобы найти «col». Другой альтернативой было использование метода application.worksheetfunction.match , но он был медленнее, чем пользовательская функция, что делает заметную разницу, учитывая размер исходной базы данных.

0

вам нужно Setwb_verificar до значения между заявлением Dim и любые заявления, которые используют Object.

Возможны другие ошибки.

Смежные вопросы

 Смежные вопросы