excel - 如何将 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 变量不同的位置的问题,很明显,'因为如果我在一个地方完成所有操作,它就可以工作。
解决方案
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