Ошибка 1004 Excel VBA — это действие не будет работать при множественном выборе (необходимо скопировать и вставить пустые столбцы)

#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
  

Я полагаю, что мои вопросы:

  1. Есть ли способ импортировать данные из другого файла, включая пустые столбцы, не рассматривая их как «отдельные регионы»?
  2. должен ли я удалить эти столбцы с помощью VBA перед копированием и вставить их обратно после импорта данных (вставить)?

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

Заранее большое вам спасибо — это действительно замечательный ресурс, и я очень благодарен за помощь.

Комментарии:

1. CurrentRegion переходит к следующему пустому столбцу / строке и не включает их, если каким-то образом есть ячейки, связывающие их. Забудьте о своем коде и, пожалуйста, попробуйте лучше описать, что вы пытаетесь сделать. Вы пытаетесь скопировать все содержимое листа (включая пустые столбцы)? Если да, попробуйте UsedRange вместо CurrentRegion .

2. Я добавил дополнительную информацию в раздел редактирования относительно структуры моих данных. Я не могу поделиться тем, как это выглядит из-за конфиденциальности, однако я сейчас попробую использовать UsedRange и посмотрю, работает ли это. Спасибо.

3. Первым шагом является отладка вашего кода и проверка, какая строка выдает ошибку.

4. Все ли столбцы на определенном листе имеют одинаковое количество строк?

5. @FaneDuru — Нет, строки могут иметь длину n , что означает любое число. В среднем от 2 до 2000, однако 5 столбцов будут пустыми, за исключением заголовков (строка 1). Вот где CurrentRegion меня подводит, потому что, если я удалю эти столбцы, все будет работать нормально, но я хочу сохранить эти столбцы.