Страницы: 1
RSS
Обратиться к диапазону по адресу другой ячейки
 
Добрый день, подскажите пожалуйста.  Нужно в файл "test" записать значение ячейки с адресом ThisRow и ThisCol с отступом в одну ячейку (offset). В коде ошибка 1004.
Код
Cell_Add = Split(rFind.Address, "$")
            ThisRow = Cell_Add(1)
            ThisCol = Cell_Add(2)
            
            Workbooks("test.xlsm").Worksheets("Sheet1").Range("D2").Value = Workbooks("DATA1.xlsx").Worksheets("HDD").Range(ThisRow, ThisCol).Offset(0, -1).Value
Как правильно записать
Код
Range(ThisRow, ThisCol).Offset(0, -1).Value
?

 
а так не пробовали
Код
Cells(ThisRow, ThisCol).Offset(0, -1).Value
 
так 13 ошибка Type mismath
 
Предложите норамальное название темы, отражющее проблему. Модераторы заменят
 
Ошибка в объекте Range
 
Тема: обратиться к диапазону по адресу другой ячейки
По факту: а зачем какие-то Split? Почему нельзя обратиться так:
Код
Workbooks("test.xlsm").Worksheets("Sheet1").Range("D2").Value = Workbooks("DATA1.xlsx").Worksheets("HDD").Range(rFind.Address).Offset(0, -1).Value
и откуда вообще этот rFind.Address?
Может из листа "HDD" книги "DATA1.xlsx"? Тогда все еще проще:
Код
Workbooks("test.xlsm").Worksheets("Sheet1").Range("D2").Value = rFind.Offset(0, -1).Value
Изменено: Дмитрий(The_Prist) Щербаков - 06.02.2020 15:36:20
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал: Почему нельзя обратиться так:Workbooks("test.xlsm").Worksheets("Sheet1").Range("D2").Value = Workbooks("DATA1.xlsx").Worksheets("HDD").Range(rFind.Address).Offset(0, -1).Value
ошибка 1004
 
Видимо потому, что мы не знаем откуда берется rFind и что это вообще такое? Может это ячейка столбца А. Какое смещение на столбец влево тогда может быть?
Так же надо убедиться в том, что все имена листов и книг указаны верно.
Изменено: Дмитрий(The_Prist) Щербаков - 06.02.2020 15:54:02
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
Workbooks("test.xlsm").Worksheets("Sheet1").Range("D2").Value = rFind.Offset(0, -1).Value
Копирует, но не то значение и не с того листа
 
может на конец файл приложите или будем дальше гадать.
 
Цитата
Чих-пых написал:
но не то значение и не с того листа
вполне возможно, ибо
Цитата
Дмитрий(The_Prist) Щербаков написал:
откуда вообще этот rFind.Address?Может из листа "HDD" книги "DATA1.xlsx"?
А раз нет - то и копировать будет не то, что надо.
Но то, что копирует не то уже говорит о том, что ошибка явно в обращении к книге или листу, из которых хотите данные перенести. Что-то там записано не так или книга тупо не открыта.
Изменено: Дмитрий(The_Prist) Щербаков - 06.02.2020 16:16:00
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
В файле data на первом листе задаются артикулы в A2:A10. Эти артикулы ищутся в книге town на всех листах, если они там находятся, то определенная ячейка (пусть Offset(0, 1)) копируется в data на лист2, например в ячейку B2. Макрос в файле data.
 
И что? Все ровно так, как я говорил. Изначально Вы смещались от найденной ячейки на 1 столбец ВЛЕВО, хотя значения искали и так в столбце А:
Код
.Offset(0, -1).Value
поэтому мой код не работал. О чем я написал, кстати. Поменял код в Вашем файле на предложенный мной ранее
Код
Workbooks("data.xlsm").Worksheets("Лист2").Range("B2").Value = rFind.Offset(0, 1).Value
только сейчас у Вас смещение идет на столбец ВПРАВО, что более чем логично и более чем рабочий вариант.
И Вам бы условие добавить в текущий вариант:
Код
If x <> "" then
'тогда ищем и все такое
End if
иначе начиная с 4-ой строки ищет(и находит!) пустые ячейки и такие же в итоге копируется на итоговый лист. Что создает впечатление, будто ничего и не копировалось...
Ну и если запишите вот так:
Код
Workbooks("data.xlsm").Worksheets("Лист1").Cells(N, 2).Value = rFind.Offset(0, 1).Value
то увидите, что все работает и переносится
Изменено: Дмитрий(The_Prist) Щербаков - 07.02.2020 11:51:09
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Разобрался. Ошибка была здесь
Код
Range(ThisRow, ThisCol).Offset(0, -1).Value  

ThisRow, ThisCol нужно поменять местами.  Дмитрий(The_Prist) Щербаков, спасибо за подсказку про

Код
 If x <> "" then'тогда ищем и все такое
End if

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

 
Цитата
Чих-пых написал:
ThisRow, ThisCol нужно поменять местами
повторюсь: они в данном случае вообще не нужны, т.к. берутся из rFind и более того - значения тоже берется потом относительной этой ячейки на том же листе, где было найдено значение. Определение строки и столбца только для того, чтобы обратиться к этой ячейке, в данном случае лишнее.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Покажите как найденные данные (если они есть)  на 2 листе town записать в ячейку data  лист1 D1 , а данные найденные  на листе 3 town записать в data лист1 E1.
 
Вы бы задачу нормально сформулировали. А то догадывайся какие данные? То ли всю строку в одну ячейку поместить, то ли что-то определенное . Сделайте пример "как есть" и "как надо" и желательно в новой теме.
 
Цитата
Чих-пых написал:
Покажите как
это Вы покажите КАК должно быть в итоге. И лучше расписать почему именно так, а не иначе.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Наверх