我有一些带有数据验证的单元格。因为下拉列表很小而且难以阅读,所以我有一个按钮,打开一个列表框并用单元格的数据验证列表填充它。
Dim btnAddToList As OLEObject
Public lboTemp As OLEObject
Set btnAddToList = ws.OLEObjects("btnAddToList")
Set lboTemp = ws.OLEObjects("TempListBoxS")
Set Field = Selection ' This is always cell $D$1, $D$2, or $D$3
btnAddToList.Visible = False
'Create a named range "temp"
ActiveWorkbook.Names.Add Name:="temp", RefersTo:=Field.Validation.Formula1
' open list box
' position list box
' load it with "temp"
With lboTemp
'show the listbox with the list
.Visible = True
.Left = Field.Left
.Top = Field.Top + 50
.ListFillRange = "temp"
.Object.MultiSelect = 0 ' Single select
On Error GoTo errHandler
prev = .LinkedCell
If prev <> "" Then prev = prev & ": " & Range(.LinkedCell).Value ' for debugging
.LinkedCell = Field.Address 'SOMETIMES THIS GIVES Err 440: could not set property value, invalid property value
.Width = Field.Width + 5
.Height = WorksheetFunction.Min(270, .Object.ListCount * 20) 'field.Height + 5
End With
如上面的评论中所述,我有时(但并非总是)在使用Field.Address填充LinkedCell时出现错误。
此代码由六个不同的单元格使用(D1:D3在两个不同的工作表上),但只有当其中一个D1单元格被选中时才会出现错误。这些单元格有另一个共同点:它们的数据验证列表分别是: ='分类表'!$ F $ 2:$ F $ 31和 ='类别表'!$ F $ 32:$ F $ 41
其他四个单元格 - 没有得到错误 - 使用复杂的动态范围,引用“类别表”表上的不同表。 (我真的不认为这与我的问题有任何关系,但我没有看到这些细胞有什么共同之处)
如果没有人能给我答案,我会对如何追踪间歇性问题提出一些建议。
谢谢!
答案 0 :(得分:0)
问题可能是Field.Address
的回归。默认情况下,.Adress
属性返回行和列的绝对值。您可以尝试Field.Address(RowAabsolute:=false, ColumnAbsolute:=false)
。希望这有帮助。
抱歉我的英文。
答案 1 :(得分:0)
我设法通过在创建引用之前确保链接的单元格为空来阻止此问题。