gpt4 book ai didi

excel - 无法通过 VBA 从目标工作簿中删除代码模块

转载 作者:行者123 更新时间:2023-12-04 20:13:01 25 4
gpt4 key购买 nike

我正在运行一个 Excel 2010 宏,它会打开另一个工作簿并删除一些代码模块(一个表单和一个 BAS 模块)。之后,它将它们重新导入为更新版本。这是代码:

For Each x In destination_wb.VBProject.VBComponents
If LCase(x.Name) Like LCase("frmCCLogin*") Or _
LCase(x.Name) Like LCase("modCQ_test*") Then
destination_wb.VBProject.VBComponents.Remove (x)
Next

我对导入没有问题,但删除过程并不总是按预期工作。由于某种原因,BAS (modCQ_test.bas) 模块并不总是被删除。结果,当我重新导入时,会创建一个以“1”结尾的新复制模块(即 modCQ_test1.bas)。
我可以看到很多人都遇到了同样的问题,但是,没有一个建议的解决方案对我有用。不知道为什么会这样?
请指教。

最佳答案

如果您可以使用模块的确切名称,则可以编写如下内容:

Public Sub RemoveComponent(ByVal Book As Workbook, ByVal Name As String)

On Error Resume Next
With Book.VBProject.VBComponents
Call .Remove(.Item(Name))
End With

End Sub

如果您遇到通配符匹配(即 SomeName*),您可以迭代 VBComponents 集合并将名称缓存到集合或数组或其他任何内容中,然后为每个匹配的名称调用上面的函数。

此外,如果您希望枚举 VBComponents 集合并像您的代码示例一样删除,我建议您按相反的顺序进行。

所以像:
Public Sub RemoveComponent1(ByVal Book As Workbook, ByVal NameSearch As String)

Dim oCompS As VBComponents
Dim oComp As VBComponent
Dim i As Integer

Set oCompS = Book.VBProject.VBComponents
For i = oCompS.Count To 1 Step -1
Set oComp = oCompS(i)
If oComp.Name Like NameSearch Then Call oCompS.Remove(oComp)
Next

End Sub

关于excel - 无法通过 VBA 从目标工作簿中删除代码模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33683176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com