Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.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 coed必填字段_Excel_Vba - Fatal编程技术网

Excel 基于特定数据的VBA coed必填字段

Excel 基于特定数据的VBA coed必填字段,excel,vba,Excel,Vba,我在A11列中使用Excel创建了一个表单。我有一个带有三个选项的下拉框。如果选择了其中一个选项,则需要整行。我到处都找遍了,找不到正确的代码。我不熟悉使用VBA Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim rsave As Range Dim cell As Range Set rsave = Sheet1.Range("B11)]")

我在A11列中使用Excel创建了一个表单。我有一个带有三个选项的下拉框。如果选择了其中一个选项,则需要整行。我到处都找遍了,找不到正确的代码。我不熟悉使用VBA

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

     Dim rsave As Range
     Dim cell As Range

     Set rsave = Sheet1.Range("B11)]")

     For Each cell In rsave

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

          Dim missdata
          missdata = MsgBox("Missing Data - Enter the Date for WorkBook to Save", vbOKOnly, "Missing Data")
          Cancel = True
          cell.Offset(0, 1).Select

      Exit For

      End If

      Next cell

 End Sub

Private子工作簿\u保存前(ByVal SaveAsUI为布尔值,Cancel为布尔值)
调暗范围
暗淡单元格作为范围
设置rsave=Sheet1.范围(“B11)])
对于rsave中的每个单元格
如果单元格.Value“”和单元格.Offset(0,1).Value=”“,则
模糊误码数据
missdata=MsgBox(“缺少数据-输入工作簿保存的日期”,vbOKOnly,“缺少数据”)
取消=真
单元格偏移量(0,1)。选择
退出
如果结束
下一个细胞
端接头
这应该可以。将“SheetToCheck”设置为要检查的工作表。 一旦发现缺失值,它将停止循环,MsgBox将给出发现缺失值的第一个范围

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim ws As Worksheet
    Dim lastrow As Integer
    Dim CellToCheck As Range
    Dim exitLoops As Boolean
    Set ws = Worksheets("SheetToCheck")

    lastrow = ws.UsedRange.Rows.Count
    exitLoops = False

    With ws
        'Loop over rows:
        For i = 2 To lastrow
            If exitLoops = True Then Exit For

            If .Range("A" & i).value <> "" And .Range("A" & i).value <> "SELECT ONE" Then

                'Loop over cells in row:
                For Each CellToCheck In .Range("B" & i & ":K" & i)
                    If exitLoops = True Then Exit For
                    If CellToCheck.value = "" Then
                        Cancel = True
                        MsgBox "Missing Data in cell " & CellToCheck.Address
                        exitLoops = True
                    End If
                Next CellToCheck
            End If
        Next i
    End With
End Sub
Private子工作簿\u保存前(ByVal SaveAsUI为布尔值,Cancel为布尔值)
将ws设置为工作表
将最后一行设置为整数
Dim CellToCheck As范围
Dim exitLoops作为布尔值
设置ws=工作表(“SheetToCheck”)
lastrow=ws.UsedRange.Rows.Count
exitLoops=False
与ws
'在行上循环:
对于i=2到最后一行
如果exitLoops=True,则退出
如果.Range(“A”&i).value”和.Range(“A”&i).value“选择一个”,则
'在行中的单元格上循环:
对于每个单元格,检查范围(“B”&i&“:K”&i)
如果exitLoops=True,则退出
如果CellToCheck.value=”“,则
取消=真
MsgBox“单元格中缺少数据”&CellToCheck.Address
exitLoops=True
如果结束
下一个细胞检查
如果结束
接下来我
以
端接头

如果A列中的值不是空的或“选择一个”,则在关闭工作簿之前,如果B列中的一个:I未填充,则应生成一个弹出窗口,对吗?正确的Rik,除了选择一个,我在下拉框中有一个添加、删除和其他谢谢您提供的信息,我添加了代码。我是VBA的新手,我所做的是右键单击工作表,查看代码,粘贴代码,我将“SheetToCheck”更改为“Sheet1”,我是否遵循了正确的程序。当我尝试保存时,没有发生任何事情???您应该打开visual basic编辑器(ALT+F11),双击“ThisWorkbook”并将代码粘贴到那里。Rik,我做了ALT+F11,窗口打开了,但我没有看到任何要双击的“ThisWorkbook”?我确实看到了此工作表的下拉列表。eureka我找到了它,感谢RIKRik Sportel。代码正在工作,除了:我输入了必填字段,但缺少的数据弹出窗口不允许我保存。