【问题标题】:Excel Type MisMatch with VBA to hide certain rowsExcel Type MisMatch with VBA 隐藏某些行
【发布时间】:2015-03-03 05:32:43
【问题描述】:

我意识到在 Excel 中处理 VBA TypeMismatch 错误已经有很多很好的响应,但它们似乎都非常具体,而且我承认 VBA n00b 太多以至于无法遵循它们。

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


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

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

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


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

这个没有任何问题。

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

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

谢谢, 亚历山德拉。

【问题讨论】:

  • 如果 Tarik 的回答很有魅力,请接受。

标签: vba excel show-hide type-mismatch


【解决方案1】:

if 语句中的表达式在 VBA 中没有短路。试试这个:

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

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

【讨论】:

  • 工作就像一个魅力!感谢您的快速响应!
  • 有时候我真的不明白这个网站,更何况上面的人。你试图帮助别人批评你,甚至不说为什么。无论如何,我投票赞成的人。我认为你的回答很好。
  • @Reafidy 并不是说​​我在这个上付出了很多努力,但看看这个stackoverflow.com/questions/18046003/… 和零。令人惊讶的是,我得到了 50 分:stackoverflow.com/questions/18092056/… 我想知道是什么让我继续前进......
  • +1。继续前进,塔里克,总会有人欣赏,也有人不欣赏!
  • 是的,我理解你的沮丧,看看 www.ozgrid.com/forum。我是那里的管理员。那里有一些非常好的人,你会受到欢迎。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-21
  • 2012-05-08
相关资源
最近更新 更多