#excel #vba
#excel #vba
Вопрос:
У меня есть простой макрос, и я хочу скопировать строку над строкой активной ячейки и использовать ее в качестве строки шаблона (потому что в этой строке есть формулы). Затем я хочу вставить эту строку над активной строкой ячейки. Когда я запускаю свой приведенный ниже код, я получаю сообщение об ошибке 1004 Метод вставки класса Range не удался. Когда я выбираю debug, выделяется следующая строка.
ActiveSheet.Строки (ActiveCell.Row).Весь текст.Вставить сдвиг:= xlDown, CopyOrigin:=TempRow
У меня нет объединенных ячеек в таблице, кроме как вверху в заголовке, и пользователь не будет вводить там никаких строк. В настоящее время лист не защищен, но будет, как только я смогу разобраться с этим кодом. Затем я добавлю код для снятия защиты и защиты листа до и после запуска макроса. Я не знаю, что делать, чтобы решить эту проблему. Любые предложения будут приняты с благодарностью.
Sub ADD_ROW_1 ()
Dim TempRow As Range
Set TempRow = ActiveSheet.Rows(ActiveCell.Offset(-1, 0).Row).EntireRow
TempRow.Copy
ActiveSheet.Rows(ActiveCell.Row).EntireRow.Insert Shift:=xlDown, CopyOrigin:=TempRow
' Clear cells code here
Range("A" amp; TempRow.Row 1).ClearContents
Range("B" amp; TempRow.Row 1).ClearContents
Range("E" amp; TempRow.Row 1).ClearContents
End Sub
Комментарии:
1. Код работает для меня, хотя может быть немного изменен. Если вы создали новую рабочую книгу и протестировали в ней этот код, работает ли он?
2. Я вставил несколько строк в новый wb, скопировал и вставил макрос в этот модуль wb vba и получил тот же результат при запуске макроса. В этом wb есть одна ячейка, которая выполняет переход ВПР на другой рабочий лист (WS B). В таблице поиска было несколько ячеек, которые были объединены, но я удалил их и все равно получил те же результаты. Столбец A содержит выпадающий список, который использует столбец B в WS B в качестве исходных данных для выпадающего списка. Все еще в замешательстве и не имеют функционального макроса. Что я должен немного изменить, чтобы сделать эту работу лучше?
3. Сначала просто попробуйте создать новый рабочий лист / рабочую книгу без ваших данных (просто поместите несколько случайных чисел или что-то в строку для проверки) и убедитесь, что это работает в первую очередь. Тогда, возможно, вам придется каждый раз проверять свои ячейки в строке, пока она не перестанет работать (или не запустится в вашем случае). Вы также можете попробовать указать лист вместо
ActiveSheet
или просто сделатьActiveCell.Offset(-1).EntireRow
или попробовать использоватьSelection
вместоActiveCell
. Может быть, кто-то еще может увидеть что-то не так, чего я не могу, но для меня это то, что вам нужно будет сделать.4. Я обновил код, как указано ниже, в новой электронной таблице, при этом ни одна из данных не связана. Это всего лишь простые данные, те же результаты. Я использую office 365, так что это последняя итерация, поэтому я не знаю, повлияет ли это на что-нибудь. Этот код настолько прост, я бы не подумал, что это будет проблемой.
code
Sub ROW_INSERT_1() Затемняет TempRow как диапазон, устанавливающий TempRow = Выбор. Смещение (-1).Темп всего потока. Скопируйте строки (Selection.Row). Весь поток. Вставить сдвиг: = xlDown, CopyOrigin:=TempRow End Subcode
5. Попробуйте без CopyOrigin.