ФУНКЦИОНАЛЬНАЯ ЧАСТЬ: приведенный ниже код сохраняет 2 вкладки из файла xlsm в новый файл xlsx. файл остается открытым для редактирования.
ОШИБКА: на вкладке xlsm есть триггер в коде листа. Этот триггер недействителен и вызывает ошибку, как только что-либо вводится в лист xlsx.
ЖЕЛАЕМЫЙ ВЫВОД: при редактировании нового файла не возникает ошибка
НЕУДАЧНАЯ ПОПЫТКА ИСПРАВИТЬ: я пытался использовать сценарии для удаления макросов, но новый лист не дает доступа к его коду. может я что не так сделал...
Sub seedPro()
Dim wb As Workbook
Set wb = ActiveWorkbook
Dim wb2 As Workbook ' for new workbook
' make new sheet/names
Worksheets(Array("Pro Focus", "AF-LU")).Copy
Set wb2 = ActiveWorkbook
wb2.SaveAs Filename: = "New Form.xlsx", FileFormat:=xlOpenXMLWorkbook
End Sub
Ниже приведен макрос листа, который запускается при редактировании нового xlsx. Сохранено во вкладке Pro Focus
Private Sub Worksheet_Change(ByVal target As Range)
If target.Address = "$C$2" And Not target.Value = "Company" Then
newProspect "focus" ' causes error because this is not found in the xlsx
End If
End Sub
Вы можете удалить сценарий события sheetChange с исходного листа и вместо этого установить его в рабочей книге, чтобы лист был чистым, и вы могли легко его скопировать. Поместите это на страницу сценариев ThisWorkbook:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
set Sh = worksheets(1) 'HERE you choose the worksheet where you want to run this code
If Sh.target.Address = "$C$2" And Not Sh.target.Value = "Company" Then
newProspect "focus" ' causes error because this is not found in the xlsx
End If
End Sub
файл остается открытым для редактирования.
Есть два способа, которые я могу сразу придумать, чтобы справиться с этой ситуацией.
Способ 1
Вам нужно закрыть и снова открыть только что созданный файл.
Option Explicit
Sub WayOne()
Dim wb As Workbook
Set wb = ThisWorkbook
wb.Worksheets(Array("Pro Focus", "AF-LU")).Copy
Dim wb2 As Workbook
Set wb2 = Application.Workbooks.Item(Application.Workbooks.Count)
Dim FilePath As String
FilePath = "C:\SampleFolder\New Form.xlsx"
Application.DisplayAlerts = False
wb2.SaveAs Filename:=FilePath, FileFormat:=xlOpenXMLWorkbook
Application.DisplayAlerts = True
wb2.Close (False)
Set wb2 = Workbooks.Open(FilePath)
End Sub
Способ 2
Удалите код VBA из вновь созданного файла. Для этого вам необходимо убедиться, что проверен доверительный доступ к объектной модели проекта VBA, выполнив следующие действия.
Код:
Option Explicit
Sub WayTwo()
Dim wb As Workbook
Set wb = ThisWorkbook
wb.Worksheets(Array("Pro Focus", "AF-LU")).Copy
Dim wb2 As Workbook
Set wb2 = Application.Workbooks.Item(Application.Workbooks.Count)
Dim FilePath As String
FilePath = "C:\SampleFolder\New Form.xlsx"
Application.DisplayAlerts = False
wb2.SaveAs Filename:=FilePath, FileFormat:=xlOpenXMLWorkbook
Application.DisplayAlerts = True
Dim i As Long
On Error Resume Next
With wb2.VBProject
For i = .VBComponents.Count To 1 Step -1
.VBComponents.Remove .VBComponents(i)
.VBComponents(i).CodeModule.DeleteLines _
1, .VBComponents(i).CodeModule.CountOfLines
Next i
End With
On Error GoTo 0
End Sub
Примечание. Я предпочитаю способ 1, но это только мои личные предпочтения.