在 Excel VBA 中删除用户窗体并添加新用户窗体
Delete a UserForm and add a New UserForm in Excel VBA
我想做的是删除一个用户表单,并用 VBA 为 Excel 更新的用户表单替换它。
我导出了原始用户窗体,进行了更改,现在想用新的用户窗体替换原来的用户窗体。两个用户窗体具有相同的名称。我希望,通过保持用户窗体名称相同,激活用户窗体的按钮不会被损坏。
我将 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
提前非常感谢任何和所有帮助和指点。
发件人: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
我想做的是删除一个用户表单,并用 VBA 为 Excel 更新的用户表单替换它。
我导出了原始用户窗体,进行了更改,现在想用新的用户窗体替换原来的用户窗体。两个用户窗体具有相同的名称。我希望,通过保持用户窗体名称相同,激活用户窗体的按钮不会被损坏。
我将 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
提前非常感谢任何和所有帮助和指点。
发件人: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