我已经为这个问题困扰了几天:
“运行时错误'13':类型不匹配”
当我尝试比较日期时。我仔细检查了一下自己的问题,看看是否有人遇到了同样的问题,并发现了this。我没有运气就尝试过解决这个问题。
我正在使用一个名为“日历”的用户窗体,该窗体将日期保留在用户可以编辑的相关文本框上的标签中,并在其中放置注释,如下所示。
我将笔记保存在工作表的B列中,并将笔记的日期保存在A列中。
现在,我正在尝试通过比较日期从工作表中提取注释并将它们放置在文本框中,这就是我遇到的问题。比较日期时,我拉标签标题并将其保存为日期curDate
,然后将工作表日期并保存为wsDate
。我最初在if语句中有一个消息框(现在已注释掉) )以查看代码是否正在运行...的确如此。它将一直运行到第一个匹配项,然后给出运行时错误。
Dim ws As Worksheet
Dim lrow As Integer 'last row
Dim row As Integer 'used for looping through rows
Dim wsDate As Date 'worksheet date
Dim curDate As Date 'label date
Dim i As Integer
Set ws = Sheets("Hidden Information")
lrow = ws.Range("A" & ws.Rows.Count).End(xlUp).row
With ws 'Hidden Information worksheet
For i = 1 To 38 'number of labels
For row = 2 To lrow 'runs til the last row on the worksheet
wsDate = DateSerial(Year(.Cells(row, 1).Value), _
Month(.Cells(row, 1).Value), Day(.Cells(row, 1).Value))
curDate = DateSerial(Year(Controls("Label" & i).Caption), _
Month(Controls("Label" & i).Caption), Day(Controls("Label" & i).Caption))
If wsDate = curDate Then Controls("TextBox" & i).Text = vbNewLine & _
vbNewLine & .Cells(row, 2).Value 'MsgBox "it's a match!"
Next row
Next i
End With
我对代码进行了几次修改,并尝试以其他方式保存日期,例如
temp = CDate(.Cells(row, 1).Value)
wsDate = Format(temp, "mm/dd/yy")
temp = CDate(Controls("Label" & i).Caption)
curDate = Format(temp, "mm/dd/yy")
但是它有同样的问题:将一直运行到第一个匹配项,然后给出运行时错误。
我觉得解决方案是显而易见的,因为我已经盯着这几天了...
如果有任何需要澄清的地方,请告诉我。
答案 0 :(得分:0)
这应该可以帮助您调试。我怀疑.Cells(row,2)
的值存在问题。因此,让我们隔离它并确保我们要转换为字符串。例如,如果该单元格包含一个错误值,这仍然可能会引发错误,但是至少这应该有助于识别问题:
Dim thisCaption as String, newText as String
For i = 1 To 38 'number of labels
For row = 2 To lrow 'runs til the last row on the worksheet
wsDate = DateSerial(Year(.Cells(row, 1).Value), _
Month(.Cells(row, 1).Value), Day(.Cells(row, 1).Value))
thisCaption = Controls("Label" & i).Caption
curDate = DateSerial(Year(thisCaption), Month(thisCaption), Day(thisCaption))
If wsDate = curDate Then
newText = vbNewLine & vbNewLine & CStr(.Cells(row, 2).Value)
Controls("TextBox" & i).Text = newText
End If
Next row
Next i
注意:我认为,但尚未测试您对DateSerial
的调用是否多余,可以使用以下方法删除:
wsDate = CDate(.Cells(row, 1).Value)
curDate = CDate(thisCaption)
答案 1 :(得分:0)
确保您正在使用调试器检查错误发生的位置。
从注释中可以看到,您的错误出在currDate = ...,您似乎可以通过更正代码的迭代范围来解决此问题。
存在此评论是为了结束在评论部分回答的问题,以免让问题缠绵。
答案 2 :(得分:-1)
我不太了解您引用“ worksheet.Cells(row,col).Value”的方式,因为我总是使用Cell的.formula或.text属性。但是,假设.Value属性提供数字值,然后将其直接分配给.Text,我猜这可能是String类型可能是导致此错误的原因?