- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试导入用户表单:
With ownVBProj.VBComponents.Import(FileName:=FName)
Print #2, FName; " has ", .Properties.Count; " Properties"
End With
在执行过程中出现错误
-2147467259 (80004005) raises (method 'properties' for the object '_VBComponent' has failed)
尽管用户表单已正确导入 - 我可以在公式窗口中看到它。
如果我使用对象检查器检查新导入的组件,我可以看到属性树,完成此操作后,代码可以继续!诡异的。
有人有任何建议可以避免这个问题吗?
编辑:
这是一个完整的示例:
Sub test()
Dim FName As String
With ThisWorkbook.VBProject.VBComponents ' save UserForm1
With .Item("UserForm1")
FName = Environ$("Temp") & "\" & .Name & ".frm"
If (LenB(Dir(FName)) <> 0) Then
Kill FName
End If
.Export Filename:=FName ' rename Form
.Name = .Name & "_org"
End With ' import
With .Import(FName)
Debug.Print FName; " has ", .Properties.Count; " properties"
End With
End With
End Sub
最佳答案
这实际上并不是问题的答案,而是一些观察,并且可能是模糊的结论。我修改了测试代码并放置了 Debug Print …
With .Import
之后的声明 block 有一个模糊的想法“让 VBE 首先完成导入并在查询其属性之前让它位于 VBComponents 集合中”。它奏效了。
Sub test()
Dim FName As String
With ThisWorkbook.VBProject.VBComponents ' save UserForm1
Debug.Print "UserForm1 has " & .Item("UserForm1").Properties.Count & " properties before"
With .Item("UserForm1")
'Debug.Print "UserForm1 has " & .Properties.Count & " properties"
FName = Environ$("Temp") & "\" & .Name & ".frm"
If (LenB(Dir(FName)) <> 0) Then
Kill FName
End If
.Export Filename:=FName ' rename Form
.Name = .Name & "_org"
End With ' import
With .Import(FName)
'Debug.Print FName & " has " & .Properties.Count & " properties"
End With
Debug.Print "Userform_org has " & .Item("UserForm1_org").Properties.Count & " properties"
End With
End Sub
我还有另一个观察。我还尝试在导出之前计算 userform1 的属性。我发现只有当 Userform1 属性窗口在运行代码的实例中处于事件状态时它才有效。否则,同样的错误会出现。我使用的是 Excel 2007。可能是 VBE 中的某种错误。
编辑2:关于我的问题的第二部分,我进一步观察到使用 . Activate
对于特定的 VBComponent 项,可以防止出现错误。而且它的属性可以很容易地访问。尝试使用和不使用 Vbc.Activate
下面的简单循环任何包含多个用户表单和模块的 Excel 文件中的一行都可以演示它。
Dim Vbc As VBComponent
For Each Vbc In ThisWorkbook.VBProject.VBComponents
If Vbc.Type <> 100 Then ‘ to exclude worksheets
Vbc.Activate ‘ Try with or Without this line
Debug.Print Vbc.Name & " has " & Vbc.Properties.Count & " Properties"
End If
Next Vbc
关于excel - 将用户表单导入 VBComponents 后,无法读取属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43703642/
Set VBProj = ActiveWorkbook.VBProject Set VBComp = VBProj.VBComponents("Sheet10") 我有上面的代码。目前
我正在尝试使用 Chip Pearson 的代码通过从另一个项目导入来覆盖现有的 VBA 代码模块。原码here . 我正在查看的特定部分是: With ToVBProject.VBComponent
嗨,我正在使用 c# 和 excel-2007 ... 我想添加一个宏到 excel 并从 c# 运行,我认为我需要访问 VBComponents 但不幸的是我在执行以下操作后看不到它 wb.
我尝试导入用户表单: With ownVBProj.VBComponents.Import(FileName:=FName) Print #2, FName; " has ", .Properti
我有这个代码: Sub ChangeImportedBOQCodeName(importedName As String) ActiveWorkbook.VBProject.VBCompone
我有一段代码可以将模块和用户表单从一个工作簿传输到另一个工作簿,该工作簿可以在多个系统上运行。但是,我有 2 个用户失败并出现错误 “运行时错误 '50012' - 对象 'VBComponent'
我有一个包含大约 20 个子程序的小应用程序,每次都能完美运行。 第一次在子 ImportData 中向新创建的工作表添加代码名称时,它失败了。在下面一行:ThisWorkbook.VBProject
我有一个小应用程序,其中包含大约20个可以完美运行的子程序...每隔一段时间。 我在子ImportData中第一次将代码名称添加到新创建的工作表中时失败。在以下行中: ThisWorkbook.VBP
我正在创建一堆动态链接的工作簿,我需要抑制链接的警告,所以我试图添加一个 Workbook_Open() sub 使用正确的代码。 唯一的问题是代码实际上并未添加到工作簿中。 ' do not dis
在以编程方式删除模块然后从文件中重新导入它们时,我在 Excel 中遇到了一些奇怪的问题。基本上,我有一个名为 VersionControl 的模块,它应该将我的文件导出到预定义的文件夹,并根据需要重
我是一名优秀的程序员,十分优秀!