код, добавленный в рабочий лист xlsm при сохранении в VBA, продолжает вводить данные - PullRequest
0 голосов
/ 06 июня 2019

Я создаю файл xlsm, который принимает базу данных из нескольких сотен строк в качестве входных данных, обрабатывает их и выводит несколько отдельных файлов .xlsm, каждый из которых содержит некоторую переопределенную часть ввода.

Я хотел бы добавить простую подпрограмму «Worksheet_BeforeDoubleClick» к каждому из сгенерированных выходных файлов.

при работе через вход в конце цикла for я делаю следующее:

Dim numLines As Integer

Set CodeCopy = ThisWorkbook.VBProject.VBComponents("Module2").CodeModule

numLines = CodeCopy.CountOfLines

NewBook.VBProject.VBComponents("Sheet1").CodeModule.AddFromString CodeCopy.Lines(1, numLines)

AccessMode:=xlExclusive, _
ConflictResolution:=Excel.XlSaveConflictResolution.xlLocalSessionChanges, _

FileFormat:=xlOpenXMLWorkbookMacroEnabled
NewBook.Saved = False

NewBook.SaveAs Filename:="cw_" & cw & "_" & myVendors(N), _
ConflictResolution:=Excel.XlSaveConflictResolution.xlLocalSessionChanges, _
FileFormat:=52

NewBook.Close      

Если я добавлю перерыв перед «NewBook.Close», все, похоже, будет работать. Разделенный файл отображается как отдельный проект, а «Sheet2» содержит требуемый код.

Если я разрешу возобновить подпрограмму, файл закроется, но если я открою его вручную, код пропадет. Если я остановлюсь на «NewBook.Close» и сохраню разделенный файл отдельно, код останется в файле.

1 Ответ

0 голосов
/ 13 июня 2019

Я понятия не имею, почему ваш код пропал после сохранения - однако я обычно думаю, что написание кода с использованием VBE не очень хорошая идея.И вам нужно разрешить это в настройках Центра управления безопасностью, где он обычно отключен (по уважительным причинам).

Гораздо проще поместить код в шаблонную таблицу, которая находится в вашей книге, где находится ваш код.Когда вы создаете новую книгу, вы просто копируете этот шаблонный лист в нее и вуаля, весь код копируется вместе с ней.Вы также можете поместить некоторое форматирование в шаблон - нет необходимости выполнять форматирование с помощью кода.

Если вы хотите, вы можете полностью скрыть лист шаблона - вам просто нужно временно установить его видимым, прежде чем копировать его(используйте Application.ScreenUpdating = False для предотвращения мерцания).

Если вы используете Copy -метод листа без параметров, Excel создаст новую книгу только с этим листом.Конечно, вы также можете создать новую книгу и использовать Copy -метод с Before или After -параметром.

Const TemplateSheetName = "Template"

With ThisWorkbook.Sheets(TemplateSheetName)
    Application.ScreenUpdating = False
    Dim saveVisibility As Long
    saveVisibility = .Visible§
    .Visible = xlSheetVisible
    .Copy
    .Visible = saveVisibility
    Application.ScreenUpdating = True
End With

Dim newWb As Workbook, newWS As Worksheet

Set newWb = Workbooks(Workbooks.Count)
Set newWS = newWb.Sheets(TemplateSheetName)
newWS.Name = "MyNewDataSheet"  ' You should assign a new name to the sheet
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...