#excel #vba
#excel #vba
Вопрос:
У меня есть рабочая книга с тремя листами. RC, RI, RCB. Мне нужно написать код VBA, который скопирует диапазоны из этой книги и вставит во вновь созданную книгу.
В этом коде работает все, кроме RCB листа. Отладка включается в строке 12
Sub Budget()
With Workbooks.Add
ActiveSheet.Name = "RC"
ThisWorkbook.Worksheets("RC").Range("A:D").Copy .Worksheets("RC").Range("A1")
ThisWorkbook.Worksheets("RC").Range("E:G").Copy .Worksheets("RC").Range("E1")
Sheets.Add
ActiveSheet.Name = "RI"
ThisWorkbook.Worksheets("RI").Range("A:E").Copy .Worksheets("RI").Range("A1")
ThisWorkbook.Worksheets("RI").Range("G:G").Copy .Worksheets("RI").Range("G1")
Sheets.Add
ActiveSheet.Name = "RCB"
ThisWorkbook.Worksheets("RCB").Range("A:C").Copy .Worksheets("RCB").Range("A1")
ThisWorkbook.Worksheets("RCB").Range("E:E").Copy .Worksheets("RCB").Range("G1")
.SaveAs "C:UserslomidDesktop4finansi3"
.Close
End With
End Sub
Я думаю, что речь должна идти об активном листе и рабочей книге.
это ошибка, которую он выдает мне: «Ошибка времени выполнения 9: нижний индекс вне диапазона»
Комментарии:
1. Что вам говорит отладка?
2. Вы уверены, что это
ThisWorkbook
содержит листRCB
?3. Ошибка времени выполнения 9: индекс вне диапазона
4. OP — это копирование данных с
ThisWorkbook
-листов на листы, созданные в новой книге.Workbooks.Add
не только создает новую книгу, но и делает ее активной. Код можно было бы написать (намного) лучше, но проблема не в этом. Я провел быстрый тест, и у меня все получилось — при условии, что исходная книга содержит все три листа.5. @SJR — Оооо, хорошо, я понял. Это сбивает меня с толку при чтении… Я бы предложил OP вместо этого правильно объявлять рабочие книги…
Ответ №1:
Вы можете отказаться от всего копирования / вставки. При использовании SaveAs
для сохранения текущей книги исходная книга закроется без сохранения, а новая книга будет открыта. Насколько я могу судить по вашему вопросу, вы хотите сохранить только определенные столбцы. Мне нравится удалять столбцы, которые вам не нужны, и делать SaveAs
с новым именем книги. Приведенный ниже код намного чище. Используйте, Application.DisplayAlerts = False
чтобы не получать The following features cannot be saved in macro-free workbooks:
приглашение.
Application.DisplayAlerts = False
With ThisWorkbook
.Sheets("RC").Range("H:Z").EntireColumn.Delete
.Sheets("RI").Range("H:Z, F:F").EntireColumn.Delete
.Sheets("RCB").Range("F:Z, D:D").EntireColumn.Delete
.SaveAs "C:UserslomidDesktop4finansi3.xlsx"
End With
Application.DisplayAlerts = True