如何在函数中引用 Excel 工作表

Posted

技术标签:

【中文标题】如何在函数中引用 Excel 工作表【英文标题】:How to reference a Excel Worksheet within a function 【发布时间】:2014-01-06 16:05:34 【问题描述】:

我正在尝试将 Excel 工作表调用到函数中,但是我收到错误 438 "OBJECT DOESN'T SUPPORT THIS PROPERTY OR METHOD"

下面的代码调用了 applyStyle1

Dim wkb7 As Excel.Workbook
Set wkb7 = Excel.Application.Workbooks.Open(strDir&"\NEXTDAY.xls")
wkb7.ActiveSheet.Cells.Select
Selection.Copy
Set wks7 = wkb.Sheets.Add

applyStyle1 (wks7)

功能:

Function applyStyle1(wksContainer As Excel.Worksheet)
     With wksContainer
              ......
     End With
End Function

当函数调用被函数中的代码替换时,此代码有效,但是由于它被多次调用,我要求它位于函数中而不是重复代码。感谢您的宝贵时间,如果您需要更详细的解释,请告诉我。

【问题讨论】:

【参考方案1】:

第一个问题

strDir&"\NEXTDAY.xls" 应该是 strDir & "\NEXTDAY.xls"& 符号前后应该有一个空格。

第二个问题

您已声明wkb7,但在Set wks7 = wkb.Sheets.Add 中使用wkb。我建议使用Option Explicit

第三个问题

将@MarkHone Set wks7 = wkb.Sheets.Add 建议的行更改为

Set wks7 = wkb7.Worksheets.Add

第四个问题(你的实际问题!)

applyStyle1 是一个需要返回一些东西的函数。如果您没有返回任何内容,请改用Sub

例如

Sub Sample()
    Dim wkb7 As Excel.Workbook
    Dim wks7 As Excel.Worksheet

    Set wkb7 = Excel.Application.Workbooks.Open(strDir & "\NEXTDAY.xls")
    wkb7.ActiveSheet.Cells.Copy

    Set wks7 = wkb7.Worksheets.Add

    applyStyle1 wks7
End Sub

Sub applyStyle1(wksContainer As Excel.Worksheet)
    With wksContainer

    End With
End Sub

【讨论】:

良好而详细的答案,我同意 Option Explicit 被推荐。我不知道你为什么把第 5 行分成两个语句? @MarkHone:对不起,我正在测试一些东西,忘记更新了。我确实在第四个问题中提到了正确的问题:) 哦,是的,你做到了;然后没有投诉:-) 感谢@SiddharthRout 的快速回复,我正在测试代码,但是在“applyStyle1 wks7”上出现错误,错误表明 ByRef 参数类型不匹配,但在代码中两者都被引用为 Excel。工作表。 @KSM:你声明Dim wks7 As Excel.Worksheet我在你的原始代码中没有看到吗?【参考方案2】:

请尝试将您的第 5 行更改为:

Set wks7 = wkb.Sheets.Add

到:

Set wks7 = wkb.Worksheets.Add

工作表将包括工作簿中的所有工作表,包括图表工作表。

【讨论】:

感谢@MarkHone 的帮助

以上是关于如何在函数中引用 Excel 工作表的主要内容,如果未能解决你的问题,请参考以下文章

excel中引用其他工作表,为啥不行呢

如何将EXCEl中多张Sheet工作表转换成一个PDF

在excel中如何将第一个工作表中的数据求和汇总到另一个表中

Excel表格引用另外一个表的数据,被引用表格不打开,引用表格上就不会显示数据,显示VALUE,急

EXCEL函数 vlookup如何在不同工作薄之间引用数据?

如何在EXCEL公式中引用另一表格数据