0

我意识到已经有很多很好的响应来处理 Excel 中的 VBA TypeMismatch 错误,但它们看起来都非常具体,而且我承认我对 VBA n00b 太了解了,无法遵循它们。

所以,我想知道您是否可以帮助我解决这个特定的困境:我制作了一个工作簿,如果 C 列中的值小于今天的日期,我希望行自动隐藏自己。*我将以下宏分配给 ActiveX 命令按钮: *


Sub Hide_PastOrders()
 Dim MyRange As Range, C As Range
 Application.ScreenUpdating = False
 Application.Calculation = xlCalculationManual
 Set MyRange = Range("d1:d1000")
 MyRange.EntireRow.Hidden = False
 For Each C In MyRange
     If IsDate(C.Value) And C.Value < Date Then
         C.EntireRow.Hidden = True
     End If
 Next
 Application.ScreenUpdating = True
 Application.Calculation = xlCalculationAutomatic
 End Sub

直到最近它工作正常,但现在有时会导致“类型不匹配”,我不知道为什么。这似乎只是几个工作表上的一个问题,并且它们都被分配了相同的宏。

我还实现了一个 ActiveX 命令按钮来“显示所有行”:


Sub ShowAll_Click()
ActiveSheet.Cells.EntireRow.Hidden = False
End Sub

这个没有任何问题。

另外,我不确定这是否相关,但我在文档中创建了许多内部参考。例如,在 B5 中键入“=A5”,这样如果我们的多件设备租金发生变化,我只需键入一次信息。这被证明是非常令人沮丧的,因为每次我遇到“TypeMismatch”错误时,它都会将某些单元格恢复为“=REF”。

如果我采取了错误的方法或者您有任何建议,请告诉我!

谢谢,亚历山德拉。

4

1 回答 1

3

The expression in the if statement is not short-circuited in VBA. Try this:

If IsDate(C.Value) Then
     If  C.Value < Date Then
         C.EntireRow.Hidden = True
     End If
End If

See http://en.m.wikipedia.org/wiki/Short-circuit_evaluation

于 2013-08-09T20:10:12.290 回答