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

使用VBA在Excel文件中查找单元格,excel,ms-access,vba,Excel,Ms Access,Vba,我从来没有问过任何问题,但我绝望了,我找不到解决问题的办法 我正在用VBA编程以访问。我必须获取特定Excel文件中特定单元格的值。要得到这个值,我必须首先找到单元格,因此我的问题就来了 当我尝试使用.Find方法获取所需单元格的列时,它给出错误“13”,类型不兼容 这就是我正在做的: Dim col As Integer Dim appExcel As Excel.Application Dim wbExcel As Excel.Workbook Set appExcel = CreateOb

我从来没有问过任何问题,但我绝望了,我找不到解决问题的办法

我正在用VBA编程以访问。我必须获取特定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
基本上就像这样,我得到单元格的列(因为我想要的单元格和我找到的单元格在同一列中),然后我会做同样的事情来找到行,然后我可以得到带有行和列的单元格的值

另一方面,我如何打开一个excel文件,该文件以“Indexation”开头,后跟任何其他名称?(在sql中是什么*)

非常感谢,我需要这个来完成我的论文。 热忱地, 伏都教

删除无用的参数,首先是它们放错了位置。例如,第二个参数应该是开始搜索的
范围
(单元格)
xlWhole
是一个数字,而不是一个范围。它在参数列表中的位置是第四位,而不是第二位

参数的类型也不正确<代码>错误针对什么,哪些参数。 无论如何,您似乎不需要其他任何东西,只需要第一个参数,所以让我们让生活变得更轻松:

.Find("mai-2017")
如果您最多需要匹配整个单元格,请执行以下操作:

.Find("mai-2017",, xlWhole)
最后,根据comments部分中的@ErikvonAsmuth,如果搜索的单元格格式为date,则无法找到匹配项,因为其内部值实际上是一个数字。在这种情况下,请尝试匹配日期类型,如下所示:

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

在旁注中,我如何打开一个excel文件,该文件以名称“Indexation”开头,后跟任何其他内容?(在sql中是*)
使用
*
通配符在目录中循环,然后打开文件注意类型:
“mai-2017”
是字符串,而在Excel中日期表示为数字。使用
DATEVALUE
函数将字符串转换为excel数字。>使用*通配符循环遍历目录,然后打开文件如何循环遍历目录中的文件?记录集?>注意类型:“mai-2017”是一个字符串,而在Excel中日期表示为数字。使用DATEVALUE函数将字符串转换为excel数字。我尝试了DATEVALUE和CDate,但它仍然给了我类型不兼容的问题。而不是
appExcel.Sheets(“Indexs GO 2017”)。选择col=appExcel.Range(“A22:Z22”)。Find(“mai-2017”,xlother,False,False)。coln
您应该使用
col=appExcel.Sheets(“Indexs GO 2017”)。Range(“A22:Z22”)。Find(“mai-2017”,xlother,False,False)。列
谢谢。我尝试过这个,但现在它给了我“对象变量或块变量未设置(错误91)”@Voodoo它的意思是找不到。您到底尝试了哪个版本以及如何尝试?现在我尝试创建一个变量来存储范围,然后从该范围获取列,但现在它在最后一行崩溃
Dim c As Range Set c=appExcel.Sheets(“index GO 2017”).Range(“A22:Z22”).Find(DateValue(date处子秀))col=c.Column
。它们是实际的日期还是字符串?我必须检查日期单元格的属性才能进行检查(我没有创建这个Excel文件,我只需要其中的数据)。单元格类型为“个性化”,带有“mmm aa”(法语中可能是月、年)
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)")