我将尽量保持简短,并且仍然充分解释,这里是:)我搜索了论坛,我的 VBA 文献,但找不到做我正在尝试的方法。我有一个 rowTotal >= 60 行的电子表格。这些行要么在每列的单元格中包含文本数据,要么这些行是带有图案和颜色索引集的空白行。我需要一个宏来选择所有非空白行。我首先尝试遍历 A 列的单元格(如果 A 列中的单元格有文本数据,则应选择其行),检查 activecell.value 是否为空。这是 jist(伪代码和代码的混合):Range("A1").Selectloop to end if activeCell.value <> empty then stringVar = stringVar + cstr(activeCell.row) + ":" + cstr(activeCell.row) + "," end ifend loopstringVar = Left(stringVar, (Len(stringVar) - 1))Range(stringVar).Select 如果我总共有 10 行,其中第 2 行和第 8 行有数据,那么 stringVar 将解析为: "2:2, 8:8" 。Range(stringVar).Select 与编写 Range("2:2, 8:8").Select 的结果相同。 如果范围内的行数 Range(stringVar).Select 上失败。 我尝试了宏记录器,它通过使用 Union 方法解决了这个问题。所以我想,“自我,你可以用 Union() 来完成这件事。万岁 MacroRecorder。”但是,唉,我的喜悦是失职了。我在想我可以将一根大弦分成 1 根或多根弦;这些较小的字符串中的每一个都将低于上述 45 个限制。然后我可以使用 Union() 将所有范围(这些较小的字符串)组合到一个所需的范围内。但是,在我知道这些 45> 字符串中有多少个之后,我必须在代码执行期间实时“构建”我的 Union() 代码。任何人都知道如何获取工作表并仅选择包含数据的行;这相当于具有一系列非连续行,其中选择了超过 45 行的计数。 (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 不需要循环 - 使用 SpecialCells对于 A 列仅使用:Set rng1 = Columns("A").SpecialCells(xlCellTypeConstants).EntireRow反而。Sub QuickSet() Dim rng1 As Range On Error Resume Next Set rng1 = Cells.SpecialCells(xlCellTypeConstants).EntireRow On Error GoTo 0 If Not rng1 Is Nothing Then MsgBox "Your working range is " & rng1.Address(0, 0) Else MsgBox "No constants found" End IfEnd Sub (adsbygoogle = window.adsbygoogle || []).push({}); 10-07 21:36