Vba 获得;运行时错误';13';:“类型不匹配”-比较两个单元格时出错

Vba 获得;运行时错误';13';:“类型不匹配”-比较两个单元格时出错,vba,error-handling,type-mismatch,Vba,Error Handling,Type Mismatch,此宏的目的是根据两个标准将多个输入工作表中的数据复制到主/主工作簿的工作表“基础”中,称为“补偿测试5”。宏应1)验证输入工作表是否与主工作簿在同一个月内。如果是,2)应复制相关路线的相关数据。目前我正在 运行时错误“13”:类型不匹配 第58行(代码中用大写字母注释)。这里怎么了 我已经上传了主工作簿的示例和一个输入工作簿的示例。输入工作簿的日期单元格(单元格B9)通常以月份后跟“-”和年份fx“2016年2月”。我在第58行将其拆分,使其与主工作簿中“基准”表第一行中的月份相比较 Sub-

此宏的目的是根据两个标准将多个输入工作表中的数据复制到主/主工作簿的工作表“基础”中,称为“补偿测试5”。宏应1)验证输入工作表是否与主工作簿在同一个月内。如果是,2)应复制相关路线的相关数据。目前我正在

运行时错误“13”:类型不匹配

第58行(代码中用大写字母注释)。这里怎么了

我已经上传了主工作簿的示例和一个输入工作簿的示例。输入工作簿的日期单元格(单元格B9)通常以月份后跟“-”和年份fx“2016年2月”。我在第58行将其拆分,使其与主工作簿中“基准”表第一行中的月份相比较

Sub-combinell()
Application.EnableEvents=False
Application.ScreenUpdating=False
Application.DisplayAlerts=False
Application.Calculation=xlCalculationManual
打电话给lista
调用CopyLookup
Application.CutCopyMode=False
Application.DisplayAlerts=True
Application.ScreenUpdating=True
Application.Calculation=xlCalculationAutomatic
Application.EnableEvents=True
工作手册(“补偿测试5”)。工作表(“列表”)。删除
工作手册(“补偿测试5”)。工作表(“基础”)。激活
端接头
子CopyLookup()
将路径设置为字符串
暗线
将strName设置为字符串
将wbk_主设置为工作簿,将wbk_输入设置为工作簿
将ws_main设置为工作表,ws_input设置为工作表
尺寸rng\U main作为范围,rng\U main\U date作为范围,rng\U input作为范围,rng\U input\U date作为范围
尺寸c_main作为范围,c_main作为范围,c_input作为范围
i=2
而工作手册(“补偿测试5”)。工作表(“列表”)。单元格(i,1)”
t=工作手册(“补偿测试5”)。工作表(“列表”)。单元格(i,1)
设置wbk_main=ActiveWorkbook
Path=“I:\folderpath”&t
q=1
'启动外循环
边做边问“
设置wbk_输入=工作簿。打开(路径)
设置ws_input=wbk_input.Sheets(1)
设置rng\U main\U date=此工作簿。工作表(“基础”)。范围(“1:1”)
设置rng\U input\U date=ws\U input.Range(“B9”)
设置rng\U input=ws\U input.Range(“R10:AL10”)
对于rng_主日期中的每个c_主日期
如果c_main_date.Value“”则
对于rng_输入日期中的每个c_输入
如果c_输入值为“”,则
对于x=1到100
如果InStr(工作簿(“Kompensation test5”).Sheets(“Basis”).单元格(1,x)、Split(替换)(工作簿(ws_input)、Range(rng_input_date)、Value、“-”、“))”大于0,则此处出现“错误”!
k=x
如果结束
下一个x
工作簿(“补偿测试5”)。表(“基础”)。范围(单元格(4,k-1),单元格(19,k-1))。选择
如果结束
下一个c_输入
如果结束
下一个c_主日期
设置rng_main=工作簿(“补偿测试5”).表(“基础”).范围(单元格(4,k-1),单元格(19,k-1))
'如果包含多个值,则拆分单元格
ws_输入范围(“B10”)。选择
Selection.TextToColumns Destination:=范围(“R10”),数据类型:=xlDelimited_
TextQualifier:=xlDoubleQuote,continuedDelimiter:=False,Tab:=False_
分号:=False,逗号:=True,空格:=False,其他:=False,FieldInfo_
:=数组(数组(1,1),数组(2,1),数组(3,1),数组(4,1),数组(5,1),数组(6,1)_
数组(7,1)、数组(8,1)、数组(9,1)、数组(10,1)、数组(11,1)、数组(12,1))_
TrailingMinusNumbers:=真
'循环通过第2页第I栏中的每个单元格:
对于rng_干管中的每个c_干管
如果c_main.Value“”则
对于rng_输入中的每个c_输入
如果c_input.Value=c_main.Value,则
c_主偏移量(0,3)。值=wbk_输入表(1)。范围(“F13”)。值
q=“”
'转到第2页的下一个单元格:
退出(退出rng_输入中每个c_输入的“循环”)
如果结束
下一个c_输入
如果结束
下一个c_main
rng_input.Delete
wbk_输入。关闭错误
环
i=i+1
温德
端接头
副清单a()
作为对象的Dim objFSO
将文件夹变暗为对象
Dim objFile作为对象
将ws设置为工作表
设置objFSO=CreateObject(“Scripting.FileSystemObject”)
设置ws=工作表。添加
使用ActiveSheet
.Name=“列表”
以
fldrpath=“I:\folderpath”
设置objFolder=objFSO.GetFolder(fldrpath)
ws.Cells(1,1).Value=“在”&objFolder.Name&“中找到的文件是:”
对于objFolder.Files中的每个objFile
ws.Cells(ws.UsedRange.Rows.Count+1,1).Value=objFile.Name
下一个
设置objFolder=Nothing
设置objFile=Nothing
设置objFSO=Nothing
端接头

您忘了参考工作簿中的工作表

Workbooks(ws_input).Range(rng_input_date).Value
应该是

Workbooks(ws_input).Sheets("SHEETNAME").Range(rng_input_date).Value
为了确保:

Workbooks("Kompensation test5").Sheets("Basis").Cells(1, x).Value
而不是

Workbooks("Kompensation test5").Sheets("Basis").Cells(1, x)
如果这仍然不起作用,那是因为你正在比较一个范围的值和一个单元格的值,所以改变

Workbooks(ws_input).Sheets("SHEETNAME").Range(rng_input_date).Value


单元格(1,x)

另见下文:

直接引用
工作簿
名称时,需要包含扩展名。因此,您需要为文件“Kompensation test5”添加扩展名,使其成为“Kompensation test5.xls”或任何扩展名

当您想要从
范围
中获得一个值,并且您已经设置了
范围
时,您只需要使用
范围
名称和
,因此对于第二行,您只需要
输入日期.value

第58行应该是这样的,假设
Workbooks(ws_input).Sheets("SHEETNAME").Range(rng_input_date).Value
Workbooks(ws_input).Sheets("SHEETNAME").Cells(9,2).Value 'If your Date is in Cell B9
 If InStr(Workbooks("Kompensation test5.xlsm").Sheets("Basis").Cells(1, x).Value, Workbooks(ws_input).Range(rng_input_date).Value) > 0 Then 'ERROR HERE!
     k = x
 End If