Excel VBA如何从另一个工作簿中获取工作表对象

问题描述 投票:0回答:1

好吧,我意识到这看起来像是重复的,但是我向你保证,至少在经过2个小时的互联网搜索后,它不会出现!

这里是我提出问题之前仔细阅读的所有其他相关链接:https://www.cfo.com/spreadsheets/2011/08/referring-to-other-worksheets-or-workbooks-in-an-excel-macro/

https://www.excelcampus.com/vba/copy-paste-another-workbook/

"Run-Time error '438': Object doesn't support this property or method." Range.values = Range.values

https://www.reddit.com/r/excel/comments/akrxxu/vba_referencing_worksheets_by_codename_in/

https://www.thespreadsheetguru.com/blog/vba-guide-to-referencing-excel-worksheet-tabs

https://docs.microsoft.com/en-us/office/vba/excel/concepts/workbooks-and-worksheets/refer-to-sheets-by-name

https://www.ozgrid.com/VBA/excel-vba-sheet-names.htm

https://www.techrepublic.com/blog/10-things/10-ways-to-reference-excel-workbooks-and-sheets-using-vba/

How to refer to a Excel Worksheet by its VBA Object Name in another Workbook?

Excel tab sheet names vs. Visual Basic sheet names

VBA Getting data from another Sheet

How to copy sheets from a workbook to another workbook

EXCEL VBA: Copy Sheet from a workbook to another workbook in different location

Problems pasting values on another workbook sheet on vba

Reference an excel sheet from another workbook without copying the sheet

因此,我在上面的许多链接上都读到,不可能直接引用另一个工作簿中的图纸对象:具体来说,这些链接:https://www.reddit.com/r/excel/comments/akrxxu/vba_referencing_worksheets_by_codename_in/

此链接说,您只能在引用Sheet对象的CodeName属性时才能执行此操作:https://www.ozgrid.com/VBA/excel-vba-sheet-names.htm

不过,Microsoft的此链接向您显示了确切的操作方法:https://docs.microsoft.com/en-us/office/vba/excel/concepts/workbooks-and-worksheets/refer-to-sheets-by-name

我对这个问题的研究足够多了。

让我清楚地说出我的问题。

我有一个打开并运行宏的工作簿。我还打开了许多其他工作簿,尤其是许多源工作簿。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)

所以我想也许我需要激活我想要获取工作表的工作簿。因此,我进一步尝试了上述每个组合以及下面的Activate组合。

objSourceWorkbook.Activate
Worksheets(strSourceSheetName).Activate

所以总共有18种不同的尝试组合。

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

Run-time error '438': Object doesn't support this property or method

在这一点上,我不知道该如何进行这项工作。我知道我以前遇到过这个问题,并且我记得确实很难解决,但是我能够解决。但是,该代码早已丢失,因为它是十多年前的政府合同。

也许我会尝试将这个问题简化为3个几乎空的工作簿,看看我是否仍然可以重现同样的问题。

有什么想法吗?非常感谢!先感谢您!!欢呼,并保证在那里的人安全!

excel vba macros worksheet
1个回答
0
投票

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

Dim objSourceWorkbook As Workbook
Dim objSourceSheet As Worksheet

Set objSourceSheet = objSourceWorkbook.Worksheets(strSourceSheetName)

首先需要声明“工作簿和工作表”其次,在作业前面使用Set关键字... DUH !!!S额额头上的手

感谢您至少帮助我陈述并清楚地思考我的问题。:-D

© www.soinside.com 2019 - 2024. All rights reserved.