Скопировать лист с комбинированными полями
У меня есть рабочий лист, который копируется и вставляется в новый рабочий лист, когда пользователь нажимает кнопку. Мне удалось скопировать все на листе (фигуры, кнопки и т. Д.), За исключением комбинированных полей, которые содержат выпадающие списки с использованием именованных диапазонов (которые создаются с помощью следующего кода: http://www.contextures.com/xlDataVal11 .html ).
Я попытался записать макрос для этого и получил следующее (упрощенное)
ActiveSheet.Shapes.Range(Array("ExampleCombo")).Select Selection.Copy ActiveSheet.Paste
При этом я понял, что поле со списком рассматривается как форма. Чтобы скопировать все поля со списком и поместить их в нужное положение на новом листе, я попробовал следующее:
- Копирование определенных столбцов условно на другой рабочий лист
- Копирование данных на добавленный рабочий лист
- Форматирование при копировании данных SQL и вставка в Excel
- Как скопировать только обычный текст ячеек в Excel?
- Excel Macro вырезать и вставлять ячейки с помощью цикла
Sub CopyCombos () Dim ws_new As Worksheet Dim ws_old As Worksheet Dim Special_Shape As Shape Dim Special_Shape_COPY As Shape Dim Position_Left As Single Dim Position_Top As Single Dim Position_Width As Single Dim Position_Height As Single Set ws_old = ActiveSheet ActiveWorkbook.Worksheets.Add Set ws_new = ActiveSheet For Each Special_Shape In ws_old.Shapes 'Copy position Position_Left = Special_Shape.Left Position_Top = Special_Shape.Top Position_Width = Special_Shape.Width Position_Height = Special_Shape.Height 'Copy Special_Shape.Copy 'Paste ws_new.Paste '<=== Here's the problem! But why? 'Rename Set Special_Shape_COPY = Selection 'Put in right place Special_Shape_COPY.Left = Position_Left Special_Shape_COPY.Top = Position_Top Special_Shape_COPY.Width = Position_Width Special_Shape_COPY.Height = Position_Height Next Special_Shape End Sub
Я получаю сообщение об ошибке «Не могу войти в режим прерывания в это время» непосредственно после вставки поля со списком в новый рабочий лист. Как я могу это решить?
- Excel VBA Macro Копировать / Вставить статический диапазон с динамическим диапазоном
- Копировать и вставлять код Excel VBA из Excel в другой открытый (не-MS) процесс?
- С C # можно ли поместить объект в буфер обмена, который будет вставляться в excel как данные и формулы?
- Строки, конкатенирующие при копировании данных из SQL в Excel
- Excel VBA Copy Вставить только значения (xlPasteValues)
- Ошибка времени выполнения «1004» ActiveSheet.Paste в таблицу с ошибкой
- Выберите «Весь последний ряд»
- Скопировать лист в другую книгу в VBA не копирует
Скорее, чем:
Set ws_old = ActiveSheet ActiveWorkbook.Worksheets.Add Set ws_new = ActiveSheet
и делая копии, используйте:
ActiveSheet.Copy After:=Sheets(Sheets.Count)
Это даст полную копию:
- строки
- ячейки
- Объекты и т. Д.
Ответ ученика Гэри, чтобы скопировать рабочий лист, отлично работал при копировании его в пределах одной и той же книги:
ActiveSheet.Copy After:=Sheets(Sheets.Count)
Однако это вызывает проблему при копировании листа в другую (новую) книгу, поскольку формат отличается по цвету. Чтобы решить эту проблему, я использовал следующий код перед добавлением новой книги:
Workbooks.Add Template:="Workbook"