从另一个工作表

时间:2015-11-10 02:48:48

标签: excel vba listbox range

我有一个axctiveX列表框,它将从同一张纸上的一个范围填充,但当我尝试从另一张纸上填充它时,它只是空白。没有错误消息,它只是空的。

有趣的是,虽然没有填充值,但是有正确的项目数(16)。如果我将范围设置为“A1:A2”,那么LB只有两个空白项目。

代码是:

Private Sub Worksheet_Activate()

    Dim r As Range, data As Range

    Set r = Me.Range("c2")

    Dim objOLE As OLEObject, objListBox As MSForms.ListBox

    Set objOLE = ActiveSheet.OLEObjects.Add(ClassType:="Forms.ListBox.1", Link:=False, _
        DisplayAsIcon:=False, Left:=r.Left, Top:=r.Top, Width:=r.Width, Height:=100)

    With objOLE
        .Name = "blah"

        ' *********this does work*************
        objOLE.ListFillRange = Me.Range("D1:D16").Address

         '********this does not work************
'        objOLE.ListFillRange = Sheets("Sheet6").Range("A1:A16").Address

        Set objListBox = .Object
        ' toggle visibility to ensure the control is clickable
        .Visible = False
        .Visible = True
    End With

    With objListBox
        .multiSelect = fmMultiSelectMulti
        .MatchEntry = fmMatchEntryComplete

    End With

End Sub

1 个答案:

答案 0 :(得分:0)

除非您指定extenal:=True可选参数,否则Range.Address property属性不包含工作表名称。但是,在这种情况下,您将工作簿作为外部引用和工作表名称。可能最好用工作表名称和单元格地址构造一个字符串。

With objOLE
    .Name = "blah"
    '.ListFillRange = "'Sheet6'!A1:A16"
    .ListFillRange = "'" & Sheets("Sheet6").Name & "'!" & Sheets("Sheet6").Range("A1:A16").Address
End With