VBA Excel: назначение значений диапазона для нового диапазона
У меня возникли проблемы с назначением значений из одного диапазона рабочей книги в диапазон в моей текущей книге. Когда я назначаю свой диапазон с помощью Range («A1: C1»), этот код работает нормально, однако, когда мой диапазон определен с помощью Range (Cells (1,1), Cells (1,3)), функция не работает:
Sub CopyRange() Dim inputExcel As Excel.Application, BookA As Workbook Path_A = ThisWorkbook.Path & "\Book_A.xlsx" Set inputExcel = New Excel.Application Set BookA = inputExcel.Workbooks.Open(Path_A, ReadOnly:=True) 'THIS WORKS: ThisWorkbook.Sheets(1).Range("A1:C1").Value = _ BookA.Sheets(1).Range("A1:C1").Value 'THIS DOESN'T WORK: ThisWorkbook.Sheets(1).Range(Cells(1, 1), Cells(1, 3)).Value = _ BookA.Sheets(1).Range(Cells(1, 1), Cells(1, 3)).Value End Sub
Я знаю, что это должна быть простая проблема синтаксиса, но я не смог понять это. Как я могу получить задания Range с использованием «Ячейки»?
- Как я могу получить доступ к несмежному контенту переменной диапазона без использования массивов
- Динамический диапазон диаграмм с помощью INDIRECT: эта функция недействительна (несмотря на выделение диапазона)
- Неисправность класса класса на автофильтре
- Диапазон повторного использования Excel, который используется другой функцией
- заполнение 4 ячеек из списка формулировок, использование другого списка для приоритетов
- Ошибка компиляции макросов VBA
- Ошибка времени выполнения '1004': метод 'FormulaR1C1' объекта 'Range' не выполнен
- VBA Excel Слияние динамических диапазонов от двух листов до одной, 1004 пасты
- свойство excel vba range непересекающиеся диапазоны
- Суммарное значение Если дата находится между несколькими диапазонами дат (матрица)
- Как получить полный рост и ширину диапазона, включая границы?
- Как выполнить цикл с помощью сортированного диапазона Excel в VBA в порядке, который я отсортировал?
- Проверьте значения в диапазоне. Excel
вы должны также квалифицировать вызовы Cells с помощью объекта рабочей таблицы:
ThisWorkbook.Sheets(1).Range(ThisWorkbook.Sheets(1).Cells(1, 1), ThisWorkbook.Sheets(1).Cells(1, 3)).Value = _ BookA.Sheets(1).Range(BookA.Sheets(1).Cells(1, 1), BookA.Sheets(1).Cells(1, 3)).Value
для смежных диапазонов, таких как вы также можете использовать Resize:
ThisWorkbook.Sheets(1).Cells(1, 1).Resize(, 3).Value = _ BookA.Sheets(1).Cells(1, 1).Resize(, 3).Value
Я думаю, что в конечном итоге вы идете об этом не лучшим образом, чтобы решить проблему. В вашем коде есть object.object.object.object
запись. object.object.object.object
, которая является громоздкой и трудно интерпретировать и исправлять.
Если вы определите еще несколько переменных, код будет легче устранить и решить вашу проблему:
Dim myAddr as String 'A string to represent the Address of the range myAddr = Cells(1,1).Address & ":" & Cells(1,3).Address ThisWorkbook.Sheets(1).Range(myAddr).Value = BookA.Sheets(1).Range(myAddr).Value