我从来没有问过这个问题,但是我很绝望,我无法找到解决问题的方法。
我正在使用VBA for Access进行编程。我必须获取特定Excel文件中特定单元格的值。为了获得这个值,我必须首先找到单元格,因此我的问题就出现了。
当我尝试使用.Find方法获取我需要的单元格列时,它会给出错误“13”,类型不兼容。
这就是我正在做的事情:
Dim col As Integer
Dim appExcel As Excel.Application
Dim wbExcel As Excel.Workbook
Set appExcel = CreateObject("Excel.Application")
appExcel.Visible = True
Set wbExcel = Workbooks.Open("J:\EXPLOITATION\INDEXATION des tarifs\2017\Indexation GO client 2017.xls")
appExcel.Sheets("Indices GO 2017").Select
col = appExcel.Range("A22:Z22").Find("mai-2017", xlWhole, False, False).Column
基本上这样我得到了单元格的列(因为我想要的单元格与我找到的单元格在同一列中),然后我会做同样的事情来找到行,然后我就可以获得该值的值行和列的单元格。
另外,如何打开一个名为“Indexation”的excel文件,后跟其他内容? (sql中的内容是*)
非常感谢,我需要这个来完成我的论文。 亲切, 巫毒
答案 0 :(得分:0)
.Find("mai-2017", xlWhole, False, False)
删除无用的参数,首先关闭它们是错误的。例如,第二个参数应该是Range
(单元格)开始搜索的位置。 xlWhole
是一个数字,而不是范围。它的位置是参数列表中的第4个,而不是第二个。
参数也是错误的类型。 False
为什么,哪些参数。
无论如何,它似乎不需要任何其他东西,只是第一个参数,所以让我们的生活更轻松:
.Find("mai-2017")
如果你真的需要最多匹配整个单元格,那么:
.Find("mai-2017",, xlWhole)
最后,根据评论部分中的@ErikvonAsmuth,如果搜索到的单元格被格式化为日期,则不会找到匹配项,因为其内部值实际上是一个数字。在这种情况下,请尝试匹配日期类型,如下所示:
.Find(DateValue("May-2017"))
由于您的行有日期,请尝试将其与2017年5月第一次出现的日期相匹配:
col = appExcel.Evaluate("AGGREGATE(15, 6, COLUMN('Indices GO 2017'!22:22)" & _
"/ (MONTH('Indices GO 2017'!22:22)=5)/(YEAR('Indices GO 2017'!22:22)=2017), 1)")
您可以轻松地调整它以返回第22行中任意给定月份内的第一个日期(5
对应于五月)。