【问题标题】:Delete a UserForm and add a New UserForm in Excel VBA在 Excel VBA 中删除用户窗体并添加新用户窗体
【发布时间】:2020-02-03 16:11:43
【问题描述】:

我想做的是删除一个用户表单并使用 VBA for 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

非常感谢您提前提供的任何和所有帮助和指示。

【问题讨论】:

  • 具体问题是什么?另外,请帮我们(和您)一个忙,并缩进您的代码
  • 首先,我在 '.Remove.Item("NewJobEvent") 行上收到“编译错误:参数不是可选的”。其次,如何导入新的用户表单?

标签: excel vba userform


【解决方案1】:

发件人: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

【讨论】:

  • 请注意,在导入用户窗体组件时,VBIDE API 中存在一个错误,该错误会在模块顶部插入一个空行,因此导入的代码不会与文件 100% 相同在磁盘上(尽管对于 OP 的目的来说不重要)- .frx 文件也必须与导入的 .frm 位于同一路径中。
  • @MathieuGuindon - 感谢您的澄清/补充
  • @Tim Williams 感谢您的建议!我现在有一个“编译错误:未定义用户定义的类型”。
  • @Kenny 您需要 1) 阅读链接的文章,以及 2) 参考 VBE 可扩展性类型库。
  • 感谢您的帮助,该链接提供了非常丰富的信息。当我在 VBA 窗口、工具 - 参考中检查“Microsoft Visual Basic for Applications Extensibility 5.3”时,它就可以正常工作了
猜你喜欢
  • 2014-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多