Excel VBA如何从其他工作簿获取图纸对象

Excel VBA如何从其他工作簿获取图纸对象,excel,vba,worksheet,Excel,Vba,Worksheet,好吧,我意识到这看起来像是一个复制品,但我向你保证它不是,至少在搜索互联网2小时后不是 以下是我在撰写问题之前仔细阅读的所有其他相关链接: 因此,我从上面的许多链接中了解到,无法直接从其他工作簿引用图纸对象: 具体而言,这些链接: 此链接表示不能执行此操作,但只能在引用图纸对象的CodeName属性时执行: 但是,Microsoft的此链接向您展示了具体的操作方法: 我对这个问题的研究到此为止 让我把问题说清楚。 我有一个打开的工作簿,正在运行宏。 我已经打开

好吧,我意识到这看起来像是一个复制品,但我向你保证它不是,至少在搜索互联网2小时后不是

以下是我在撰写问题之前仔细阅读的所有其他相关链接:

因此,我从上面的许多链接中了解到,无法直接从其他工作簿引用图纸对象: 具体而言,这些链接:

此链接表示不能执行此操作,但只能在引用图纸对象的CodeName属性时执行:

但是,Microsoft的此链接向您展示了具体的操作方法:

我对这个问题的研究到此为止

让我把问题说清楚。

我有一个打开的工作簿,正在运行宏。 我已经打开了许多其他的工作手册,特别是许多源代码工作手册。 1个单一目标工作簿。 因此,看看源工作簿,我有很多代码可以获取并打开该文件。 到目前为止,所有这一切都运转良好

因此,在出现问题的地方,所有这些都分解为几行代码

Dim objSourceWorkbook
Dim objSourceSheet
Dim strSourceSheetName As String
strSourceSheetName = "Some complicated sheetname" 'I've confirmed the correct file is being open and the sheet name is EXACTLY as assigned to the sheet name.
Dim strSourceWorkbookFilename As String
strSourceWorkbookFilename = getFilenameFromPath(objFile) 'I've also confirmed the filename returned by this function is EXACTLY the same as the objSourceWorkbook.name. So that is working.
Set objSourceWorkbook = Workbooks.Open(Filename:=objFile)
objSourceSheet = objSourceWorkbook.Sheets(strSourceSheetName) 'This didn't work.
现在让我向您展示我尝试获取图纸对象的所有其他方法:

objSourceSheet = Sheets(strSourceSheetName)
objSourceSheet = objSourceWorkbook.Worksheets(strSourceSheetName)
objSourceSheet = objSourceWorkbook.Worksheet(strSourceSheetName)
objSourceSheet = Workbooks(strSourceWorkbookFilename).Worksheets(strSourceSheetName)
objSourceSheet = Workbooks(strSourceWorkbookFilename).Sheets(strSourceSheetName)
所以我想也许我需要激活我试图获取工作表的工作簿。 因此,我进一步尝试了上面的每一个组合和下面的激活调用组合

objSourceWorkbook.Activate
Worksheets(strSourceSheetName).Activate
这一共是18种不同的尝试组合

在每次尝试中,我都会遇到相同的典型Microsoft无意义错误:

Run-time error '438': Object doesn't support this property or method
在这一点上,我不知道是什么使这项工作。我知道我以前遇到过这个问题,我记得它确实很难解决,但我能够解决它。然而,自从十多年前政府签订合同以来,该准则早已丢失

也许我会试着把这个问题简化成3本几乎是空的工作簿,看看是否还能重现同样的问题

有什么想法吗?我非常感激! 提前谢谢你!!
干杯,大家注意安全

好吧,我想我找到了问题的根源

Dim objSourceWorkbook As Workbook
Dim objSourceSheet As Worksheet

Set objSourceSheet = objSourceWorkbook.Worksheets(strSourceSheetName)
首先需要声明为工作簿(&As)工作表 第二,在作业前使用Set关键字…DUH!!! 用手拍额头

谢谢你至少帮我清楚地陈述和思考我的问题。
:-D

好的,我想我找到了问题的根源

Dim objSourceWorkbook As Workbook
Dim objSourceSheet As Worksheet

Set objSourceSheet = objSourceWorkbook.Worksheets(strSourceSheetName)
首先需要声明为工作簿(&As)工作表 第二,在作业前使用Set关键字…DUH!!! 用手拍额头

谢谢你至少帮我清楚地陈述和思考我的问题。
:-D

将对象资源设置为图纸
?为了可读性,我建议创建更短的变量名。类似于工作簿的
wb
,工作表的
ws
。使事情更容易阅读。。。另外,将
选项Explicit
添加到代码中。给定长的变量名,您可能有一个输入错误Don't
Activate
。。。正常情况下不需要。看。你们也错过了必要的
了……哈哈,谢谢你们……在我看这些评论之前就已经弄明白了……但你们真是恰到好处!:-DNice catch@BigBen-根据我的第一条评论,如果您将代码(Dim语句和Set语句组合在一起)分组并使用更理想的变量,那么这个错误可能会突出,并且更加明显。这个问题是一个很好的例子,说明了“最佳实践”是如何演变成lol
Dim objSourceShet as Sheet
?为了可读性,我建议创建更短的变量名。类似于工作簿的
wb
,工作表的
ws
。使事情更容易阅读。。。另外,将
选项Explicit
添加到代码中。给定长的变量名,您可能有一个输入错误Don't
Activate
。。。正常情况下不需要。看。你们也错过了必要的
了……哈哈,谢谢你们……在我看这些评论之前就已经弄明白了……但你们真是恰到好处!:-DNice catch@BigBen-根据我的第一条评论,如果您将代码(Dim语句和Set语句组合在一起)分组并使用更理想的变量,那么这个错误可能会突出,并且更加明显。这个问题是“最佳实践”如何演变lol的一个很好的例子