В настоящее время у меня есть некоторый код, который сначала копирует лист, выполняет некоторую очистку, а затем перемещает его в другую книгу.

Моя проблема в том, что когда я копирую или перемещаю лист, он также копирует код VBA, который прикреплен к объекту листа.

Есть ли способ избежать этого?

Также, когда я перемещаю лист в другую книгу, меняются цвета. Есть ли опция перемещения, которая позволяет сохранить исходное форматирование, так же, как вставка на ленте Excel.

В настоящее время я экспортирую цветовую схему, а затем импортирую ее в новую рабочую книгу, но для этого требуется разблокировать исходную рабочую книгу, а с новой (2013) защитой это занимает очень много времени.

Идеи высоко ценятся.

3 ответа3

1

Я думаю, ваш код имеет что-то вроде

ActiveWorkbook.Sheets(1).Copy

Это скопирует VBa.

Если вы хотите скопировать его без VBa, вам придется сделать это, выделив все строки и ячейки.

ActiveWorkbook.Sheets(1).Cells.Copy
Workbooks("abc.xls").Worksheets.Add
ActiveSheet.Cells.PasteSpecial Paste:=xlPasteAll

Источник для выше

Или вы можете продолжить, как есть, но просто удалите любой VBa из нового листа

Этот пример удаляет все VBa из проекта

    Sub DeleteAllVBACode()
    Dim VBProj As VBIDE.VBProject
    Dim VBComp As VBIDE.VBComponent
    Dim CodeMod As VBIDE.CodeModule

    Set VBProj = ActiveWorkbook.VBProject

    For Each VBComp In VBProj.VBComponents
        If VBComp.Type = vbext_ct_Document Then
            Set CodeMod = VBComp.CodeModule
            With CodeMod
                .DeleteLines 1, .CountOfLines
            End With
        Else
            VBProj.VBComponents.Remove VBComp
        End If
    Next VBComp
End Sub

Источник (и другие примеры)

0
Sub LuuVaXoaCode()
Dim Theo_Doi
Theo_Doi = ActiveWorkbook.Name
Theo_Doi = ActiveSheet.Name
Sheets(Theo_Doi).Copy
ActiveSheet.DrawingObjects.Delete

'Delete code cua worksheet
With ActiveWorkbook
        For Each Theo_Doi In .Worksheets
            With .VBProject.VBComponents(Theo_Doi.CodeName).CodeModule
                .DeleteLines 1, .CountOfLines
            End With
        Next
 'Hien cua so Save As
Application.Dialogs(xlDialogSaveAs).Show
ActiveWindow.Close
End With
End Sub
-2

Я нашел кое-что о том, как копировать цвета офисных тем из одной рабочей книги в другую, используя VBA, и о том, как цвета Excel как-то меняются?

... может быть, это тоже может быть полезно, оно включает код VBA : код VBA для работы с темами Excel 2007

Надеюсь, это поможет :) Хорошего дня.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .