我正在做另一个 Excel 项目,这次我第一次接触了 VBA 宏。我对 VB 有非常基本的了解,但我已经十多年没有用过这种语言了,所以我有点迷茫。
无论如何,我有一个以下函数,用于将一行附加到另一个表中。它运行完美,但我对它的外观不太满意:
Sub setRecord()
If [K2].Value <> "" Then
appendToRecord "RecordsTable", [E2:K2].Value
End If
If [K3].Value <> "" Then
appendToRecord "RecordsTable", [E3:K3].Value
End If
If [K4].Value <> "" Then
appendToRecord "RecordsTable", [E4:K4].Value
End If
If [K5].Value <> "" Then
appendToRecord "RecordsTable", [E5:K5].Value
End If
If [K6].Value <> "" Then
appendToRecord "RecordsTable", [E6:K6].Value
End If
End Sub
我确信我不是唯一有同样感受的人……
我现在的行数是固定的。但是,将来可能会发生变化,我希望我的代码能够适应这种情况,而无需添加或删除 IF 语句。
基本上,我检查某一行中的某个单元格是否为空,如果不是,我会运行另一个函数将该行中的值添加到表中的新行中。
因此,我的问题是,是否有一种方法可以像 For 或 ForEach 循环一样循环遍历一系列行,同时检查某一列中的值,以便我可以在 VBA 中使这段代码更短/更高效?任何指示都将不胜感激。顺便说一句,我正在使用 Office 365。
答案1
答案2
以下是我想到的解决方案:
Dim RecordRange As ListObject
Set RecordRange = Worksheets("Set Record").ListObjects("NewRecord")
For i = 1 To RecordRange.DataBodyRange.Rows.Count
If RecordRange.DataBodyRange.Cells(i, RecordRange.ListColumns("N").Index) <> "" Then
appendToRecord "RecordsTable", RecordRange.DataBodyRange.Rows(i)
End If
Next i
我尝试使用@mcalex 提供的答案中的资源,但无法使其发挥作用 - 这主要是因为我缺乏经验。幸运的是,我找到了一些关于 VBA 和表格的文章,帮助我自己找到了答案。