首页 > 解决方案 > 如何将 Excel 工作表名称传递给 Access 子例程?

问题描述

我正在尝试使用 Access VBA 遍历 Excel 文件中的所有工作表。

子例程需要选择第一行并在每个工作表中设置 RowHeight。

我正在使用字符串变量来调用子例程并将工作表名称传递给它。它第一次工作,但下次我得到

“范围类的选择方法失败”

我尝试移动变量声明,更改打开 Excel 的位置(如果我将它放在子例程中,它会打开两次)并将其作为函数而不是子例程来执行。

'我的对象和工作表变量声明在对象的顶部:

Dim objExcel As Object
Dim wks As Worksheet
Dim wkb As Workbook

'我正在打开 Excel 并在子例程中设置工作簿对象:

Set objExcel = CreateObject("Excel.Application")  'Excel is invoked 01
Set wkb = objExcel.Workbooks.Open(strOutputPathAndFileName)
objExcel.Application.Visible = True

'然后调用子程序设置行高和换行属性

FirstRowHeightAndWrap ("ChangeTracking")
FirstRowHeightAndWrap ("FivePCalcsThisPPE")

'这是函数

Function FirstRowHeightAndWrap(strSheetName As String)

    Set wks = wkb.Sheets(strSheetName)
    With wks
        .Rows(1).Select
        .Rows(1).RowHeight = 28
        .Rows(1).WrapText = True
    End With

End Function

这是关于将 wks 变量设置在与 objExcel 和 wkb 变量不同的位置的问题,很明显,'因为如果我在一个地方完成所有操作,它就可以工作。

标签: excelvbams-access

解决方案


All you need is to loop the worksheets like this:

Public Function SetRowHeight()

    Dim objExcel    As Object
    Dim wkb         As Workbook
    Dim wks         As Worksheet

    Set objExcel = CreateObject("Excel.Application")
    Set wkb = objExcel.Workbooks.Open("c:\test\test.xlsx")

    For Each wks In wkb.Worksheets
        wks.Rows(1).RowHeight = 28
        wks.Rows(1).WrapText = True
    Next

    wkb.Close True
    Set wkb = Nothing
    objExcel.Quit

    Set objExcel = Nothing

End Function

推荐阅读