Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA代码,用于检查基于另一个单元格的单元格是否为空';s数据_Excel_Vba_Activex - Fatal编程技术网

Excel VBA代码,用于检查基于另一个单元格的单元格是否为空';s数据

Excel VBA代码,用于检查基于另一个单元格的单元格是否为空';s数据,excel,vba,activex,Excel,Vba,Activex,我有一个多用户每天填写并提交的电子表格。此电子表格中有三个单独的是/否问题。如果输入Yes,则必须在下一列中输入数据。我想做一个VBA代码来检查并确保输入了这些数据,这样我们就不必一直将电子表格发送回用户来填写缺失的数据 我的数据是这样设置的:K12:K111、N12:N111和P12:P111都是是/否列,而L12:L111、O12:O111和Q12:Q111是仅当在K、N或p列中输入“是”时才需要文本的单元格。有人能帮我编码一下吗 如果可能的话,我希望在电子表格上放置一个ActiveX按钮来

我有一个多用户每天填写并提交的电子表格。此电子表格中有三个单独的是/否问题。如果输入Yes,则必须在下一列中输入数据。我想做一个VBA代码来检查并确保输入了这些数据,这样我们就不必一直将电子表格发送回用户来填写缺失的数据

我的数据是这样设置的:K12:K111、N12:N111和P12:P111都是是/否列,而L12:L111、O12:O111和Q12:Q111是仅当在K、N或p列中输入“是”时才需要文本的单元格。有人能帮我编码一下吗

如果可能的话,我希望在电子表格上放置一个ActiveX按钮来运行VBA代码。我还想让它显示一个对话框,告诉哪些单元格需要输入数据。任何帮助都将不胜感激

编辑:我确实改变了从M到N的范围,因为我在原来的帖子中说错了。我使用了下面建议的代码,得到了一个编译错误:内部过程无效。这是我如何将其粘贴到按钮中的:

Private Sub CommandButton2_Click()
Option Explicit

Sub test()

    Dim rngK As Range, rngN As Range, rngP As Range, cell As Range
    Dim Counter As Long

    Counter = 0

    With ThisWorkbook.Worksheets("Sheet1")

        Set rngK = .Range("K12:K111")
        Set rngN = .Range("N12:N111")
        Set rngP = .Range("P12:P111")

        For Each cell In rngK

            If cell.Value = "Yes" And cell.Offset(0, 1).Value = "" Then

                cell.Offset(0, 1).Interior.Color = vbRed
                Counter = Counter + 1

            End If

        Next cell

        For Each cell In rngN

            If cell.Value = "Yes" And cell.Offset(0, 1).Value = "" Then

                cell.Offset(0, 1).Interior.Color = vbRed
                Counter = Counter + 1

            End If

        Next cell

        For Each cell In rngP

            If cell.Value = "Yes" And cell.Offset(0, 1).Value = "" Then

                cell.Offset(0, 1).Interior.Color = vbRed
                Counter = Counter + 1

            End If

        Next cell

        If Counter > 0 Then

            MsgBox "Please fill red highlighted fields!"

        End If

    End With

End Sub

End Sub

您可以尝试以下方法:

Option Explicit

Sub test()

    Dim rngK As Range, rngM As Range, rngP As Range, cell As Range
    Dim Counter As Long

    Counter = 0

    With ThisWorkbook.Worksheets("Sheet1")

        Set rngK = .Range("K12:K111")
        Set rngM = .Range("M12:M111")
        Set rngP = .Range("P12:P111")

        For Each cell In rngK

            If cell.Value = "Yes" And cell.Offset(0, 1).Value = "" Then

                cell.Offset(0, 1).Interior.Color = vbRed
                Counter = Counter + 1

            End If

        Next cell

        For Each cell In rngM

            If cell.Value = "Yes" And cell.Offset(0, 2).Value = "" Then

                cell.Offset(0, 2).Interior.Color = vbRed
                Counter = Counter + 1

            End If

        Next cell

        For Each cell In rngP

            If cell.Value = "Yes" And cell.Offset(0, 1).Value = "" Then

                cell.Offset(0, 1).Interior.Color = vbRed
                Counter = Counter + 1

            End If

        Next cell

        If Counter > 0 Then

            MsgBox "Please fill red highlighted fields!"

        End If

    End With

End Sub
根据OP要求:

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, Me.Range("K12:K111, M12:M111,P12:P111")) Is Nothing Then

        With Target

            If UCase(.Value) = "YES" Then
                .Offset(0, 1).Interior.Color = vbRed
            Else
                .Offset(0, 1).Interior.Pattern = xlNone
            End If

        End With

    End If

    If Not Intersect(Target, Me.Range("L12:L111, O12:O111,Q12:Q111")) Is Nothing Then

        With Target

            If .Value = "" And UCase(.Offset(0, -1).Value) = "YES" Then
                .Offset(0, 1).Interior.Color = vbRed
            Else
                .Interior.Pattern = xlNone
            End If

        End With

    End If

End Sub

你能添加你当前的代码并解释你在哪里遇到困难吗?我正在使用下面“错误4004”中的代码,但我将它粘贴到了我放在工作表上的activeX按钮中。第一行是Private Sub CommandButton2\u Click(),当我单击按钮时,它在该位置给了我一个错误谢谢!我意识到我应该把上面的代码放在一个模块中,然后让按钮激活该模块,在我这样做并在代码中重命名该表以匹配之后,它工作了。我唯一的另一个问题是,在字段中输入内容后,如果没有空白字段,同一按钮或模块是否也可以删除阴影?