分配链接单元格时Excel VBA:列表框错误

时间:2013-12-19 14:59:22

标签: excel vba excel-vba

我有一些带有数据验证的单元格。因为下拉列表很小而且难以阅读,所以我有一个按钮,打开一个列表框并用单元格的数据验证列表填充它。

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

其他四个单元格 - 没有得到错误 - 使用复杂的动态范围,引用“类别表”表上的不同表。 (我真的不认为这与我的问题有任何关系,但我没有看到这些细胞有什么共同之处)

如果没有人能给我答案,我会对如何追踪间歇性问题提出一些建议。

谢谢!

2 个答案:

答案 0 :(得分:0)

问题可能是Field.Address的回归。默认情况下,.Adress属性返回行和列的绝对值。您可以尝试Field.Address(RowAabsolute:=false, ColumnAbsolute:=false)。希望这有帮助。 抱歉我的英文。

答案 1 :(得分:0)

我设法通过在创建引用之前确保链接的单元格为空来阻止此问题。