使用VBA在Excel文件中查找单元格

时间:2017-05-31 08:18:51

标签: excel vba excel-vba ms-access access-vba

我从来没有问过这个问题,但是我很绝望,我无法找到解决问题的方法。

我正在使用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中的内容是*)

非常感谢,我需要这个来完成我的论文。 亲切, 巫毒

1 个答案:

答案 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对应于五月)。