我将尽量保持简短,并且仍然充分解释,这里是:)
我搜索了论坛、我的 VBA 文献,但找不到一种方法来做我正在尝试的事情。
我有一个 rowTotal >= 60 行的电子表格。这些行在每列的单元格中都有文本数据,或者这些行是空白的,带有图案和颜色索引集。
我需要一个宏来选择所有非空行。
我首先尝试遍历 A 列的单元格(如果 A 列中的单元格有文本数据,则应选择其行),检查activecell.value
<> 是否为空。
这是 jist(伪代码和代码的混合):
Range("A1").Select
loop to end
if activeCell.value <> empty then
stringVar = stringVar + cstr(activeCell.row) + ":" + cstr(activeCell.row) + ","
end if
end loop
stringVar = Left(stringVar, (Len(stringVar) - 1))
Range(stringVar).Select
如果我总共有 10 行,第 2 行和第 8 行有数据,
stringVar
会解决这个问题:"2:2, 8:8"
.
Range(stringVar).Select
将具有与 write 相同的结果Range("2:2, 8:8").Select
。如果要在该范围内的行数 <= 45,则这没有问题。但是,只要其中包含数据的行数超过 45,代码就会在
Range(stringVar).Select
.
我尝试了宏记录器,它通过使用该Union
方法解决了这个问题。所以我想,“你自己,你可以用 Union() 完成这个。万岁 MacroRecorder。” 但可惜,我的快乐是疏忽。
我在想我可以把一根大弦分成1根或多根;这些较小的字符串中的每一个都将低于上述 45 个限制。然后我可以使用 Union() 将所有范围(这些较小的字符串)组合到一个所需的范围中。
但是,在我知道我拥有这45> 个字符串中有多少之后,我必须在代码执行期间实时“构建”我的 Union() 代码。
任何人都知道如何获取工作表并仅选择包含数据的行;这相当于有一系列不连续的行,其中选择了超过 45 行。