Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 5009|回复: 8

[已解决]进行时间运算时,怎么老是出现“类型不匹配”的错误?

[复制链接]
发表于 2012-10-30 22:23 | 显示全部楼层 |阅读模式
各位老师:Report.xls是由一"中国"工作薄的宏“c1”从网上下载的csv格式文件后转换的数据,并进行以下分析:
    1、判断当x列的值为“甲肝、丙肝、戊肝、细菌性痢疾”等疾病时,相应行的t列应为“实验室诊断病例”,否则提示信息应修改,相应的行(有数据的)显示为黄色;现在程序运行完后老是出现“下标越界”的错误?
  
    2、计算判断当z列值与r列值的时间间隔大于或等于“24小时”时,提示信息应修改,相应的行(有数据的)显示为鲜绿色。怎样去掉诊断时间和报告卡生成时间两列中最后的冒号“:”,因为运算时老是出现“类型不匹配的错误”?

   上述二问题怎样解决?请老师们帮忙了! repot.rar (17.54 KB, 下载次数: 10)
发表于 2012-10-31 07:05 | 显示全部楼层
  maxRecordCount = Sheets("Report").[A65535].End(xlUp).Row '怎么也出现下标越界的错误?
  ar = Sheets("Report").Range("x4:x" & maxRecordCount)    '怎么出现类型不匹配的错误?

ar只读取了一列,下面的If ar(ii, 20) <> "实验室诊断病例"这就有错误了。
回复

使用道具 举报

发表于 2012-10-31 07:08 | 显示全部楼层
时间问题先用LEFT去掉最后的冒号,再用CDATE转化就不存在类型不匹配的问题了。

另外你最好把文件导入到EXCEL里做,不然很多函数都用不了,提示工程库未找到的错误。
回复

使用道具 举报

发表于 2012-10-31 07:08 | 显示全部楼层
报错的时候点调试,多看看本地窗口,就知道哪出问题了。
回复

使用道具 举报

 楼主| 发表于 2012-10-31 15:44 | 显示全部楼层
本帖最后由 gwfzh 于 2012-10-31 16:06 编辑
hwc2ycy 发表于 2012-10-31 07:05
maxRecordCount = Sheets("Report").[A65535].End(xlUp).Row '怎么也出现下标越界的错误?
  ar = Sheet ...


谢谢“hwc2ycy”老师的解答,在你的帮助下第二个问题解决了!第一个问题按照你的要求更改后,最后运行结束出现了下标越界的错误?请老师继续帮忙!
Sub checkRecords()
  Dim ii, maxRecordCount As Integer
  Dim cellValue As String
  Dim isHasCheckError As Boolean
  Dim startDate, endDate As Date
  Dim ar '(), br()
  
'Workbooks("Report.csv").Worksheets("sheet1").Activate
  maxRecordCount = Sheets("Report").[A65535].End(xlUp).Row '
  ar = Sheets("Report").Range("r4:z" & maxRecordCount)    '
  With Sheets("Report")
  For ii = 1 To maxRecordCount
    If (ar(ii, 7) = "甲肝") Or (ar(ii, 7) = "丙肝") Or (ar(ii, 7) = "戊肝") Or (ar(ii, 7) = "细菌性痢疾") Then  '运行结束后出现了“下标越界”的错误?
       If ar(ii, 3) <> "实验室诊断病例" Then Sheet1.Cells(ii, COL_ILLTYPE).Interior.Color = 65535
         MsgBox "第 " & ii & " 行,疾病编号为甲肝、丙肝、戊肝、细菌性痢疾,但病例分类不为 实验室诊断病例"
        End If
    ' 判断时间间隔大于等于24小时,
    If Sheets("Report").Cells(ii, COL_EXAMINE).Value <> "" And Sheets("Report").Cells(ii, COL_REPORT).Value <> "" Then
      'startDate = CDate( Sheets("Report").Cells(ii, COL_EXAMINE).Value)
      'endDate = CDate( Sheets("Report").Cells(ii, COL_REPORT).Value)
      startDate = CDate(Left(Sheets("Report").Cells(ii + 3, COL_EXAMINE), Len(Sheets("Report").Cells(ii + 3, COL_EXAMINE)) - 1))
      endDate = CDate(Left(Sheets("Report").Cells(ii + 3, COL_REPORT), Len(Sheets("Report").Cells(ii + 3, COL_REPORT)) - 1))
      'startDate = CDate(Left(ar(ii, 1), Len(ar(ii, 1)) - 1))
      'endDate = CDate(Left(ar(ii, 9), Len(ar(ii, 7)) - 1))
    'End If
      If endDate - startDate >= 1 Then     '怎么出现“运行时错误的3:类型不匹配”的错误?
         Sheets("Report").Cells(ii + 3, COL_EXAMINE).Interior.Color = 5287936
         Sheets("Report").Cells(ii + 3, COL_REPORT).Interior.Color = 5287936
        MsgBox "第 " & ii & " 行,时间间隔大于或等于“24小时”"
      End If
    End If
   
  Next ii
End With
'End If
End Sub

回复

使用道具 举报

发表于 2012-10-31 15:56 | 显示全部楼层
iii等于多少啊,看看本地。
回复

使用道具 举报

 楼主| 发表于 2012-10-31 16:07 | 显示全部楼层
hwc2ycy 发表于 2012-10-31 15:56
iii等于多少啊,看看本地。

ii=52,  数组 : ar :  : Variant/Variant(1 to 51, 1 to 9)
回复

使用道具 举报

发表于 2012-10-31 16:14 | 显示全部楼层
这不越界了嘛,只有51行,你都读到52了。
回复

使用道具 举报

发表于 2012-10-31 16:15 | 显示全部楼层    本楼为最佳答案   
  For ii = 1 To maxRecordCount
改成for ii=1 to ubound(ar)

你的maxrecoredcount是最后一条记录所在行的行号。
跟数组的大小并无关系。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-24 08:42 , Processed in 0.242309 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表