【问题标题】:Determine the last visible row in Microsoft Excel using VBA使用 VBA 确定 Microsoft Excel 中的最后一个可见行
【发布时间】:2015-05-13 00:32:58
【问题描述】:

我有一个具有固定可见行数的 Excel 工作表。我想写一个宏在最后一个可见行之后插入一行。

为此,我首先要确定当前最后一个可见行是什么。我尝试编写以下内容,但出现编译错误。我不太了解 VB,所以我在 While 循环中正确地做错了。

谢谢。

Sub AddRequirementRule()
Dim rowNumber As Long
rowNumber = 1
While (Not ActiveSheet.Row(rowNumber).Hidden)
   rowNumber = rowNumber + 1
End While


MsgBox (rowNumber)

附带说明,我在哪里可以找到有关 Excel 的宏编辑器 (VBA 7.0) 中的错误的更多信息?

【问题讨论】:

  • 你的意思是包含数据的最后一个可见行吗?通常工作表底部有很多很多可见的空白行。

标签: excel vba


【解决方案1】:

我认为它不会那样工作。
尝试这样检查以避免编译错误:

While (Not thisworkbook.Sheets(1).range("A" & rowNumber).entirerow.hidden)
   rowNumber = rowNumber + 1
Wend

有关错误的更多信息,我建议您使用错误处理。 http://www.cpearson.com/excel/errorhandling.htm

【讨论】:

  • 我需要使用 ActiveSheet,因为我不知道我在哪个工作表上。
  • 虽然您绝对应该知道您在哪个工作表上以及您当前正在处理哪个工作表对象 -> 因此避免使用 Activesheet 并命名工作表对象。不过,那是另一天来讨论的。
  • 其实你是绝对正确的,因为我不会在其他表格中重复使用这个 Sub...
【解决方案2】:

我的脚本完全是错误的。我不应该使用End While,而应该使用Wend

我还必须按照 Kim 的建议去做:Range("A" & rowNumber).EntireRow.Hidden 而不是 Row(rowNumber).Hidden

这是正确的代码:

Sub AddRequirementRule()
Dim rowNumber As Long
rowNumber = 1
While (Not ActiveSheet.Range("A" & rowNumber).EntireRow.Hidden)
   rowNumber = rowNumber + 1
Wend


MsgBox (rowNumber)


End Sub

谢谢!

【讨论】:

  • 糟糕,事实上,我也在我的代码中调整了这一点。它是 Do While... 循环、Do ... Loop Until 或 While...Wend。
猜你喜欢
  • 1970-01-01
  • 2019-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-19
  • 1970-01-01
  • 2023-03-26
相关资源
最近更新 更多