无法插入相对于单元格的ActiveX控件

时间:2013-12-13 20:08:13

标签: excel vba excel-vba activex

我正在尝试创建一个带有按钮的Excel电子表格,该按钮在包含按钮的单元格上方插入行和ActiveX组合框。选择按钮以调整大小并随单元格移动。由于按钮每次单击都会移动(插入上面一行),并且用户可以突出显示工作表上的任何单元格,我需要创建一个相对于按钮单元格的宏,而不是活动单元格。我通过命名包含按钮的单元格并记录我自己的宏(选择了使用相对引用)在包含按钮的单元格上方插入一行来完成前半部分。然后我将包含ActiveCell.Select的宏编辑到Range(" NamedCell")。选择这样,无论用户突出显示哪个单元格,它都会在按钮上方插入一行。

我遇到的问题是如何插入ActiveX组合框。生成的代码包含Left,Top,Width和Height以定位ActiveX组合框。由于高度随着每次连续点击和生成的插入行而变化,因此所有组合框都显示在彼此的顶部。如果这不可能发生或需要大量的VBA代码,请不要担心。通过阅读你对其他人的回答,我已经学到了很多东西。这是我目前拥有的宏,但它每次都在同一个地方插入ActiveX组合框,而不是像我想要的那样在按钮上方的单元格中插入。再次感谢。

Sub AddFitting()
'
' AddFitting Macro
'

'
    Range("FittingRow").Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("FittingCell").Select
    ActiveCell.Offset(-1, 0).Range("A1").Select
    ActiveSheet.OLEObjects.Add(ClassType:="Forms.ComboBox.1", Link:=False, _
        DisplayAsIcon:=False, Left:=0, Top:=346.5, Width:=120, Height:=15.75) _
        .Select
    With Selection
        .Placement = xlMoveAndSize
        .PrintObject = True
    End With
    ActiveCell.Offset(0, 2).Range("A1").Select
    ActiveCell.FormulaR1C1 = "'= K value"
    ActiveCell.Offset(0, -1).Range("A1").Select
End Sub

1 个答案:

答案 0 :(得分:1)

这是你在尝试的吗?

Sub AddFitting()
    Dim ws As Worksheet
    Dim rng As Range

    Set ws = ThisWorkbook.Sheets("Sheet1")

    With ws
        .Range("FittingRow").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

        Set rng = .Range("FittingCell").Offset(-1, 0)

        With .OLEObjects.Add(ClassType:="Forms.ComboBox.1", link:=False, _
        DisplayAsIcon:=False, Left:=rng.Left, Top:=rng.Top, _
        Width:=rng.Width, Height:=rng.Height)
            .Placement = xlMoveAndSize
            .PrintObject = True
        End With

        rng.Offset(, 2).FormulaR1C1 = "'= K value"
    End With
End Sub