Excel VBA验证是否在保存之前填充表中列中的所有字段

时间:2017-10-17 21:25:22

标签: excel vba excel-vba

我想要编写的VBA代码遇到麻烦。我在这里和其他论坛中查看了不同的问题,但我找不到能够帮助我的需求的东西。

我的问题是一个名为" TableLaw"的表,有大约43列和超过10000行。

实际上,我的需求可以分为两部分:

  • 验证TableLaw列[Comments]中的所有字段。意思是,我想看看该列中的所有数据字段是否都不为空。所以我需要检查10000多行。 请注意:我正在验证的字段中有一个公式,所以它们并不是空的。该公式连接一些单元格以形成注释。我需要查看每个单元格中是否有评论
  • 如果[注释]列中有空字段,我想阻止工作簿保存。我还要强调那些空白的细胞。在列中,以帮助用户查看他需要处理的列中的哪个字段。

我对保存部分的阻塞没有任何问题,但是我甚至形成了一个严重的麻烦甚至形成一个For Each或者在列[单元格中]迭代的东西[Comment]检查单元格是否为空或者是否有只有一个公式,并突出显示那些空的单元格。

使用像[Comments]这样的结构名称非常重要,因为用户可能会向表中添加新列。

谢谢,抱歉这个麻烦。我对VBA比较陌生,而且我之前在编程方面的知识很少。

我看过许多复杂的代码片段,我无法理解,但我明白这一点,我相信你们所有人都会嘲笑我的无能,怀疑我是否真的做了些什么:

Sub TableTest()

Dim tbl As ListObject
Dim tRows As Long
Dim tCols As Long

Dim lo As ListObject
Dim ws As Worksheet
Dim lr As ListRow
Dim lc As ListColumn

'I used this to get the column number and then use it in a For cycle to go through all cells in the column
col = WorksheetFunction.Match("COMMENTS", Sheets("Orders").Range("5:5"), 0)

Set tbl = ActiveSheet.ListObjects("TableLaw")
With tbl.DataBodyRange
    tRows = .Rows.Count
    tCols = .Columns.Count
End With

Set ws = ThisWorkbook.Worksheets("Orders")
Set lo = ws.ListObjects("TableLaw")

For Each lr In lo.ListRows
    Cells(lr, col).Interior.ColorIndex = 37
Next lr



End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'I added the range like this because I do not know how to add the column name.
   If WorksheetFunction.CountA(Worksheets("Orders").Range("AM6:AM10500")) <> "" Then
      MsgBox "Workbook will not be saved unless all comments are added"
      Cancel = True
   End If
End Sub

1 个答案:

答案 0 :(得分:0)

您可以使用.Value函数

进行检查

即。

If (Range("A1").Value = "") Then
  ''' PROCESS CODE
End If