我是vba的新手,在vba中编写上述功能时完全迷失了。实际上,我想做的事情与通常的excel公式相同。
更新: 根据Scott的回答,我调整了代码。现在,我出现了类型不匹配错误。根据定义,Mname的类型是一个字符串。查找范围(B18:B38)中的值是(非唯一)整数。我应该告诉Excel将它们作为字符串吗?如果是,怎么办?
摘要: 我有一个范围(D18:D38),我想根据由字符串变量(Mname)和另一个范围(B18:B38)之间的匹配所确定的行号从中选择一个值。字符串Variable由文件夹中文件的名称确定。
我的问题是我收到错误消息:'无法获取工作表函数类的match属性'
感谢您的帮助!
Sub Test()
Application.ScreenUpdating = False
Dim Mname As String
Set WSCockpit = ThisWorkbook.ActiveSheet
Dim strFileName As String
Dim strFolder As String: strFolder = WSCockpit.Range("D9").Value
Dim strFileSpec As String: strFileSpec = strFolder & "*.xls*"
strFileName = Dir(strFileSpec)
Do While Len(strFileName) > 0
Dim strFilePath As String: strFilePath = strFolder & strFileName
Mname = Mid(strFileName, 13, Len(strFileName) - 17)
Dim rw As Long
rw = Application.Match(Mname, WSCockpit.Range("B18:B38"), 0)
Dim VarImp As Boolean
VarImp = Application.WorksheetFunction.Index(WSCockpit.Range("D18:D38"), rw)
'some other task'
Loop
Application.DisplayAlerts = True
End Sub
备份: 对不起,代码太乱了。我对编写vba的一般规则一无所知。如前所述,我的目标是使查询运行。查找的值将为“ TRUE”或“ FALSE”。之后,我将使用它来确定是否需要导入在文件夹中找到的文件。如果您对我的编码或想要执行的任务有其他建议,我将很高兴听到。
答案 0 :(得分:0)
将其分为多个步骤,并确保您希望在查找中找到的数据确实存在。意思是,在运行时检查Mname的值(通过调试代码),并确认可以手动找到它。
最后,请改用Application.Match
。
Dim rw as Long
rw = Application.Match(Mname, WSCockpit.Range("B18:B38"),0)
Dim import as Boolean
import = Application.WorksheetFunction.Index(WSCockpit.Range("D18:D38"),rw)