自动更新数据验证范围

问题描述 投票:-1回答:1

我有一个下拉列表,根据另一个单元格改变,所以如果另一个单元格设置为no我的另一个单元格应该在数据验证范围内只有stand-by如果它设置为yes它应该有:realphoneboth everything工作,但......

我的问题是,现在我想在我的数组中有一百个其他行,所以我试图扩展数组,但数据验证不会更新。所以我必须每个数据验证单元手动更改一个一个。

这是我在图片中的表格:https://imgur.com/a/56Nk1SG(我已经对每个图像进行了描述,以使其更容易理解)。

注意:我知道在excel中,如果我扩展数组,数据验证工作,所以我试图扩展它保存它然后导入到谷歌表但它不起作用...而在Excel中没有复选框和一些公式不起作用所以我要把它保存在谷歌表中

编辑:我知道有另外一个类似的帖子,但它不是同一个问题...

google-sheets google-sheets-formula
1个回答
0
投票

在我看来,实现这一目标的最佳方式是通过VBA。

脚步:

  1. 在范围(“A1:A4”)中导入“是”选项。范围(“A1”)包括Yes作为标题。
  2. 选择范围(“A1:A4”)。
  3. 主页 - 样式选项卡 - 格式为表格 - 选择指示灯 - 检查范围并选中“我的表格有标题”。
  4. 选择“是”表 - 设计 - 表名:tblYes。
  5. 在范围中导入“否”选项(“B1:B2”)。范围(“B1”)包括否作为标题。
  6. 选择范围(“B1:B2”)。
  7. 主页 - 样式选项卡 - 格式为表格 - 选择指示灯 - 检查范围并选中“我的表格有标题”。
  8. 选择“否”表 - 设计 - 表名:tblNo。
  9. 打开VBA编辑器。 (按ALT然后按F11)。
  10. 双击要条件格式化的工作表(从页面左上方的框中)。
  11. 从代码框上方的左侧框中选择工作表。
  12. 从代码框上方的右侧框中选择“更改”。
  13. 插入以下代码并尝试。

码:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    With ThisWorkbook.Worksheets("Sheet1") '<- Change sheet name if needed

        If Not Intersect(Target, .Range("E1:E10")) Is Nothing And Target.Count = 1 Then  '<- Change range if needed. Check if the change included in our range.

            Application.EnableEvents = False

                If Target.Value = "Yes" Or Target.Value = "No" Then '<- Case sensitive. Check the value insert if it is Yes or No

                    With .Cells(Target.Row, "F").Validation

                        .Delete '<- Clear previous valitation
                        If Target.Value = "Yes" Then '<- Check if the answer if Yes
                            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                            xlBetween, Formula1:="=INDIRECT(""tblYes[Yes]"")"
                        ElseIf Target.Value = "No" Then '<- Check if the answer if No
                            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                            xlBetween, Formula1:="=INDIRECT(""tblNo[No]"")"
                        End If

                    End With

                Else '<- If the value insert is NOT Yes or No

                    .Cells(Target.Row, "F").Clear '<- Clear format & contents next to change cell
                    MsgBox "Insert Yes or No!" '<- Message box prompt for Yes or No

                End If

            Application.EnableEvents = True

        End If

    End With

End Sub

包含tblYes&tblNo的图纸图像:

enter image description here

VBA编辑器图片:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.