在Access VBA模块中,我将记录集复制到Excel工作表(DoCmd.TransferSpreadsheet不提供所需的颜色和公式格式)。
在一个列范围内,在尝试在c.Value或c.Formula中应用INDEX / MATCH或VLOOKUP时,我无法在我正在处理的同一工作簿中引用另一个工作表。使用Access的每个输出,Excel呈现#REF!错误。但是,当我将公式从VBA窗口复制并粘贴到单元格中并在Excel中向下拖动时,它完美地运行!当我将工作表的引用更改为相同的工作表名称时,没有#REF!错误。
我知道问题是Excel对象的工作表实例。我试图打开另一个工作表对象(xlInv对象)并使用Excel的.Address函数,但它只指向活动工作表的单元格范围。请参阅下面的代码(vlookup和索引匹配完全相同):
Public Function SendReq2Excel(strTQName As String, strSheetName As String)
Dim rst As DAO.Recordset
Dim ApXL, xlWBk, xlWsh, xlInv As Object
Dim fld As DAO.Field
Dim strPath, allsheet, mostsheet, subtotalcell, othersheet As String
Dim recordcount, avgprice, totalreq As Integer
On Error GoTo err_handler
strPath = Application.CurrentProject.Path & "\Requisition Form.xlsx"
Set rst = CurrentDb.OpenRecordset(strTQName)
Set ApXL = CreateObject("Excel.Application")
Set xlWBk = ApXL.Workbooks.Open(strPath)
ApXL.Visible = False
Set xlWsh = xlWBk.Worksheets(strSheetName)
Set xlInv = xlWBk.Worksheets("INVENTORY")
...
avgprice = 2
For Each c In xlWsh.Range("O2:O" & recordcount + 1)
'c.Formula VLOOKUP(C" & avgprice & ", INVENTORY!$B$2:INVENTORY!$X$2000, 23, FALSE)
c.Formula = "=INDEX(INVENTORY!$X$3:INVENTORY!$X$2000, MATCH(C" & avgprice & ", INVENTORY!$B$3:INVENTORY!$B$2000, 0))"
avgprice = avgprice + 1
Next
我是否必须关闭一个Excel工作表对象并打开另一个,但我如何同时与两个工作表进行交互?在定义公式之前,是否必须选择其他Excel工作表的范围?请帮忙。欢迎任何建议。谢谢!
答案 0 :(得分:0)
我发现了自己的错误。我在使用公式的活动工作表之后调用了引用的工作表。因此,无法检测到相应的工作表,#REF!出现在细胞中。只需重新排序工作表即可修复错误输出。
所以,公式正常。输出到Excel时,MS Access可以在单元格公式中引用不同的工作表。