我的代码的数据验证部分中的间接公式似乎遇到了相对引用问题。
我正在尝试创建一个宏,该宏将使用“列表!”中的数据验证列表自动更新和格式化某些单元格。每次“输入!”A1 中的值发生变化时。 参考图片在这里
我下面的代码可以很好地填充和格式化“列表!”中必要的数据验证单元格,但是,数据验证列表由 A 列中单元格的奇异值组成,而不是由共享相同值的关联表格项组成名称为 A 列中的单元格。
例如。以图片为例,
下面是我的代码:
子更新数据验证() 调暗 ws1 作为工作表,ws2 作为工作表 将 inputVal 调暗为字符串 将 i 调暗为整数 暗淡提示作为变体 昏暗的验证单元作为变体
Set ws1 = ThisWorkbook.Sheets("Input")
Set ws2 = ThisWorkbook.Sheets("Lists")
inputVal = ws1.Range("A1").Value
' Clear existing content and data validations
ws2.Cells.ClearContents
ws2.Cells.Validation.Delete
' Define input prompts and cells for data validation
Select Case inputVal
Case "Brown"
prompts = Array("Name", "Scientific_Name", "Gender", "Species", "Count", _
"Favorite_Food", "Favorite_Color", "Favorite_Sport", "Favorite_Drink", "Date", "Option_1", "Option_2")
validationCells = Array("B1", "B2", "B5", "B7")
Case "Orange"
prompts = Array("Color", "Fabric", "Style", "Quantity", "Length", "Width", "Area", _
"Supplier", "Location", "Distance")
validationCells = Array("B2", "B4", "B6", "B8", "B12")
Case Else
prompts = Array()
validationCells = Array()
End Select
' Populate input prompts
For i = LBound(prompts) To UBound(prompts)
ws2.Cells(i + 1, 1).Value = prompts(i)
Next i
' Set up data validation
For i = LBound(validationCells) To UBound(validationCells)
With ws2.Range(validationCells(i)).Validation
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=INDIRECT(""A"" & ROW())"
.IgnoreBlank = True
.InCellDropdown = True
.ShowInput = True
.ShowError = True
End With
Next i
结束子
我希望使用间接(A1),这在创建具有更多选项的下拉列表方面起到了部分作用。但是,为数据验证而格式化的每个单元格共享相同的下拉列表。
我对 VBA 非常陌生,根据我对 Excel 的了解,这似乎是一个相对参考问题。
我了解间接下拉列表的工作原理,并已将每个表正确格式化为其关联值。当您在 VBA 中添加时,这只是一个全新的图层。
编辑 ******
在进行了更多研究并了解了有关 VBA 的更多信息之后,我认为最好的选择是以某种方式利用数据验证单元格的范围,并从列值中减去 1。我将进一步研究如何做到这一点,但我认为这就是答案。