#excel #vba
#excel #vba
Вопрос:
Я просмотрел предыдущие коды ошибок и не нашел ничего, что удовлетворяло бы тому, что я ищу. Я хочу импортировать область данных из другой книги Excel в существующую книгу, чтобы я мог автоматизировать некоторые процедуры очистки данных. У меня есть небольшой опыт программирования, и я прохожу курс Udemy по Excel VBA, поэтому большая часть кода взята оттуда.
Пока я запускаю диалоговое окно открытия, выбираю свою новую книгу, выделяю регион и сохраняю адрес указанного региона, затем выделяю тот же регион и копирую все данные, затем снова открываю исходную книгу и копирую данные в адрес региона. Когда я просматриваю код и снова открываю первую книгу, в ней выделяется правильный диапазон ячеек, но не удается вставить — диалоговое окно с ошибкой находится ниже. Я думаю, причина в том, что у меня есть столбцы, в которых нет никаких данных, кроме строки заголовка.
Редактировать: в моем наборе данных есть 24 столбца (от A до X) с заголовком в строке 1 в каждой ячейке — от A1 до X1 в них есть данные, и поэтому они обрабатываются как размеры X. CurrentRegion
У меня 232 (но в остальном n) строки, но столбцы F, P, R, U и V являются пустыми ячейками со 2-й строки по 232-ю строку, но я хочу сохранить их положение и заголовки. При удалении этих столбцов мой код работает, но я хочу перенести их в точности такими, какие они есть. Это означает, что где- CurrentRegion
то видит эти «пустые столбцы» как отдельные области и не включает их, когда я хочу, чтобы они были включены.
Мой исходный код состоял в том, чтобы просто вставить в ячейку A1 без сохранения диапазона ячеек в качестве переменной, и это дало тот же код ошибки. Я знаю, что метод диапазона ячеек работает, поскольку диапазон ячеек выделен, но, как указано в ошибке, явно существует проблема с выделением данных. Я также очистил свой буфер обмена, чтобы убедиться, что ничего ложного не происходит. Последним шагом было удаление столбцов, в которых не было данных, в файле, который я хочу импортировать, и это, похоже, сработало, однако мне нужны эти столбцы. Код ниже;
Option Explicit
Sub ImportFile()
Dim FileToOpen As Variant
Dim OpenBook As Workbook
'Dim CellRange As String
Application.ScreenUpdating = False
FileToOpen = Application.GetOpenFilename(Title:="Browse for your File", FileFilter:="Excel Files (*.xls*),*xls*")
If FileToOpen <> False Then
Set OpenBook = Application.Workbooks.Open(FileToOpen)
'CellRange = OpenBook.Sheets(1).Range("A1").CurrentRegion.Address
OpenBook.Sheets(1).Range("A1").CurrentRegion.Copy
'ThisWorkbook.Worksheets("ImportedFile").Range(CellRange).PasteSpecial xlValues
ThisWorkbook.Worksheets("ImportedFile").Range("A1").PasteSpecial xlValues
OpenBook.Close False
End If
Application.ScreenUpdating = True
End Sub
Я полагаю, что мои вопросы:
- Есть ли способ импортировать данные из другого файла, включая пустые столбцы, не рассматривая их как «отдельные регионы»?
- должен ли я удалить эти столбцы с помощью VBA перед копированием и вставить их обратно после импорта данных (вставить)?
Просто для ясности, нецелесообразно, чтобы пользователь удалял эти столбцы перед импортом, и у меня нет способа исключить эти столбцы из создаваемых из нашей CRM, поскольку это нелегко настроить.
Заранее большое вам спасибо — это действительно замечательный ресурс, и я очень благодарен за помощь.
Комментарии:
1.
CurrentRegion
переходит к следующему пустому столбцу / строке и не включает их, если каким-то образом есть ячейки, связывающие их. Забудьте о своем коде и, пожалуйста, попробуйте лучше описать, что вы пытаетесь сделать. Вы пытаетесь скопировать все содержимое листа (включая пустые столбцы)? Если да, попробуйтеUsedRange
вместоCurrentRegion
.2. Я добавил дополнительную информацию в раздел редактирования относительно структуры моих данных. Я не могу поделиться тем, как это выглядит из-за конфиденциальности, однако я сейчас попробую использовать UsedRange и посмотрю, работает ли это. Спасибо.
3. Первым шагом является отладка вашего кода и проверка, какая строка выдает ошибку.
4. Все ли столбцы на определенном листе имеют одинаковое количество строк?
5. @FaneDuru — Нет, строки могут иметь длину n , что означает любое число. В среднем от 2 до 2000, однако 5 столбцов будут пустыми, за исключением заголовков (строка 1). Вот где
CurrentRegion
меня подводит, потому что, если я удалю эти столбцы, все будет работать нормально, но я хочу сохранить эти столбцы.