- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含大约 20 个子程序的小应用程序,每次都能完美运行。
第一次在子 ImportData 中向新创建的工作表添加代码名称时,它失败了。在下面一行:ThisWorkbook.VBProject.VBComponents(wsTarget.CodeName).Name = "客户"
下面的代码包含三个可以重现问题的子代码。重要提示:我可以连续运行子 ImportData 多次,不会出现任何问题,但如果我连续两次调用子“Sync()”,第二次尝试会失败,但第三次尝试会正常工作,依此类推(也许它不喜欢奇数..)
任何关于为什么会发生这种情况的想法将不胜感激。
FYT:我正在 Excel for Mac 中运行此代码
Public LastRow As Long
Private wks As Worksheet
Sub Sync()
Call ImportData
Call SyncBoth
End Sub
Public Sub ImportData()
'++++++++++++++++++++++++++++++++++++++++++++++++++++++
'+++++ 1. ImportData will allow user to select file to import data from
'+++++ 2. Copy both the Customers and Vendors data to their respective sheets
'++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dim wsSource As Worksheet
Dim wsTarget As Worksheet
Dim LastRow As Long
Dim MaxDate As Date
Dim ShCount As Integer
Dim SourceFile As String
SourceFile = "/Users/phild/Documents/RTPro/Customer and Vendor Raw Sync.xlsm"
Dim SourceWb As Workbook
Set SourceWb = Workbooks.Open(SourceFile)
Dim TargetWb As Workbook
Set TargetWb = ThisWorkbook
Dim sheet As Worksheet
For ShCount = 1 To 2
Select Case ShCount
Case 1
Set wsSource = SourceWb.Worksheets("Sheet1") 'Set Worksheet to copy data from
ThisWorkbook.Sheets("Customers").Delete 'Delete old Customer worksheet in this worksheet
Set sheet = ThisWorkbook.Sheets.Add 'Create New Customer woeksheet in this woekbook
sheet.Name = "Customers" 'Name new Customer worksheet
Set wsTarget = ThisWorkbook.Worksheets("Customers") 'Set Customers ws as the target ws
Debug.Assert ThisWorkbook.VBProject.Name <> vbNullString '<--Force the VBE to exist. Don't pollute the Immediate window
ThisWorkbook.VBProject.VBComponents(wsTarget.CodeName).Name = "Customers" 'Give Customers a Code name
'THE LINE OF CODE ABOVE RESULTS IN A Runtime error '32813"
' Method 'Name' of object '+VBComponent' failed
' EVERY OTHER TIME I RUN THE SUB Sync()
Case 2
Set wsSource = SourceWb.Worksheets("Sheet3") 'Set Worksheet to copy data from
ThisWorkbook.Sheets("Vendors").Delete 'Delete old Vendors worksheet in this worksheet
Set sheet = ThisWorkbook.Sheets.Add 'Create New Vendor worksheet in this woekbook
sheet.Name = "Vendors" 'Name new Vendor worksheet
Set wsTarget = ThisWorkbook.Worksheets("Vendors") 'Set Customers ws as the target ws
Debug.Assert ThisWorkbook.VBProject.Name <> vbNullString '<--Force the VBE to exist. Don't pollute the Immediate window '
ThisWorkbook.VBProject.VBComponents(wsTarget.CodeName).Name = "Vendors" 'Give Vendors a Code name
End Select
Call CleanTarget(wsTarget)
LastRow = Find_LastRow(wsSource)
wsSource.Range("A1:Z" & LastRow).Copy Destination:=wsTarget.Range("A1")
Next ShCount
SourceWb.Close
End Sub
Sub SyncBoth()
Dim ShCount As Integer
For ShCount = 1 To 2
Select Case ShCount
Case 1
Set wks = Customers 'Work in sheet("Customers")
LastRow = Find_LastRow(wks) 'Last row of "Customers"
Case 2
Set wks = Vendors 'Work in sheet("Vendors")
LastRow = Find_LastRow(wks) 'Last row of "Vendors"
End Select
Debug.Print wks.Name
Next ShCount
'Normally I have about 10 subs here that are called sequentially. But this is enough the cause the errorw
End Sub```
最佳答案
您正在运行时修改主机 VBA 项目 - Sheet1
的代码名称标识符是一个编译时、项目全局范围对象:即使它没有在任何地方使用,也有一个更改它需要重新编译项目的合理机会。
所以代码运行得很好,直到它通过重命名全局对象而自爆为止;下一次运行现在运行良好,因为现在编译的代码与项目中实际的VBComponent
匹配。
考虑将宏放在单独的 VBA 项目中,这会提示在哪个启用宏的工作簿中重命名组件:因为该 VBA 项目不是编译和运行的 VBA 代码,所以它应该“正常工作”。
关于excel - VBProject.VBComponents(wsTarget.CodeName).Name = 代码每次都会失败。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60711684/
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 的模块,它应该将我的文件导出到预定义的文件夹,并根据需要重
我是一名优秀的程序员,十分优秀!