数据validationmacros

我正在创build一个不同的人将添加到Excel表,所以我想知道是否有任何简单的方法来检查用户开始写填充行?

例如,如果用户开始在单元格A1中键入,macros将检查单元格是否填充在同一行上。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim rsave As Range Dim cell As Range Set rsave = Sheet1.Range("a1:i1") For Each cell In rsave If cell = "" Then Dim missdata missdata = MsgBox("missing data", vbOKOnly, "Missing Data") Cancel = True cell.Select Exit For End If Next cell End Sub 

要扩展build议的解决scheme,您可以执行以下操作。 而不是循环通过每个单元格,您的问题可以用两行代码有效地解决:

  'get the used range Set rsave = Sheet1.Range("a1:i1") 'Select all blank(not yet filled) cells rsave.SpecialCells(xlCellTypeBlanks).Select 

这将select所有未填充在纸张的范围a1:i1中的单元格。 或者,您可以使用一些颜色来使其更加明确。 如果有效,不要忘记接受答案。

如果说“数据validation”,你的意思是检查空白,你可以使用这个:

 Sub Test() Dim wrng As Range Set wrng = ActiveSheet.UsedRange MsgBox "The data in a range: '" & wrng.Address & "' are" & IIf(IsValidData(wrng), "", "n't") & " valid" Set wrng = Nothing End Sub Function IsValidData(rng As Range) As Boolean IsValidData = rng.SpecialCells(xlCellTypeBlanks).Count = 0 End Function 

请注意, UsedRange方法返回从A1单元格开始的范围。 所以,你需要添加额外的代码来select数据占用的范围(跳过空白行和列)。

 Sub Test() Dim wrng As Range Set wrng = GetDataRange() MsgBox "The data in a range: '" & wrng.Address & "' are" & IIf(IsValidData(wrng), "", "n't") & " valid" End Sub Function GetDataRange() As Range Dim wrng As Range, c As Range, saddr As String Dim pos As Integer 'get used range Set wrng = ActiveSheet.UsedRange 'find first non-empty cell in a used range saddr = ActiveSheet.Range(wrng.End(xlToLeft).Address, wrng.End(xlUp).Address).Address pos = InStr(1, saddr, ":") 'skip blanks rows and set new range Set GetDataRange = ActiveSheet.Range(Mid(saddr, pos + 1, Len(saddr) - pos) & ":" & wrng.SpecialCells(xlCellTypeLastCell).Address) Set wrng = Nothing End Function 

祝你好运!