Удалите пользовательскую форму и добавьте новую пользовательскую форму в Excel VBA - PullRequest
0 голосов
/ 13 декабря 2018

То, что я хотел бы сделать, это удалить пользовательскую форму и заменить ее обновленной пользовательской формой, используя VBA для Excel.

Я экспортировал исходную пользовательскую форму, внес свои изменения и теперь хотел бы заменить исходную нановая форма пользователя.Обе пользовательские формы имеют одинаковые имена.Я надеюсь, что при сохранении имен UserForm кнопка, активирующая пользовательскую форму, не будет повреждена.

У меня будет цикл VBA по всем книгам, и я сделаю это ~ 3200 раз.

Sub Macro2() 
'''delete and replace a UserForm

'Dim some stuff
Application.ScreenUpdating = False

    Dim SourceRow As Long
    Dim EditRow As Long
    Dim sFile As String
    Dim wb As Workbook
    Dim FileName1 As String
    Dim FileName2 As String
    Dim wksSource As Worksheet
    Const scWkbSourceName As String = "theFILE.xlsm"

    Set wkbSource = Workbooks(scWkbSourceName)
    Set wksSource = wkbSource.Sheets("Sheet1")
    Const wsOriginalBook As String = "theFILE.xlsm"
    Const sPath As String = "C:\examplefolder\" 'this is PATH

    SourceRow = 5

''ENSURE SELECT SOURCE SHEET
    Sheets("Sheet1").Select

Do While Cells(SourceRow, "C").Value <> ""

    FileName1 = wksSource.Range("A" & SourceRow).Value
    FileName2 = wksSource.Range("L" & SourceRow).Value
    EditRow = 2
    sFile = sPath & FileName1 & "\" & FileName2 & ".xlsm"

    Set wb = Workbooks.Open(sFile)

''DIM OPEN WORKBOOK
    Dim AWorkbook As Workbook
    Set AWorkbook = ActiveWorkbook

        With AWorkbook.VBProject.VBComponents
            .Remove.Item ("NewJobEvent")
        End With

''CLOSE WORKBOOK W/O BEFORE SAVE
    Application.EnableEvents = False
    ActiveWorkbook.Save
    Application.EnableEvents = True
    ActiveWorkbook.Close

    Windows("theFILE.xlsm").Activate
    Sheets("Sheet1").Select

SourceRow = SourceRow + 1 ' Move down 1 row for source sheet

Loop
End Sub

Любая помощь и указатели очень ценятся заранее.

1 Ответ

0 голосов
/ 13 декабря 2018

От: http://www.cpearson.com/excel/vbe.aspx

Sub DeleteModule()
    Dim VBProj As VBIDE.VBProject
    Dim VBComp As VBIDE.VBComponent

    Set VBProj = ActiveWorkbook.VBProject
    Set VBComp = VBProj.VBComponents("Module1")
    VBProj.VBComponents.Remove VBComp
End Sub

Remove взять ссылку на модуль, а не строку

Чтобы импортировать модуль из файла:

ActiveWorkbook.VBProject.VBComponents.Import FullPathHere
...