Vba 相对于单元格插入ActiveX控件时出现问题

Vba 相对于单元格插入ActiveX控件时出现问题,vba,excel,activex,Vba,Excel,Activex,我正在尝试创建一个excel电子表格,其中包含一个按钮,可以在包含按钮的单元格上方插入一行和一个ActiveX组合框。选择该按钮可调整单元格大小并随单元格移动。由于每次单击按钮都会移动(插入上面的一行),并且用户可以高亮显示工作表上的任何单元格,因此我需要创建一个相对于按钮单元格而不是活动单元格的宏。我通过命名包含按钮的单元格并记录我自己的宏(选择使用相对引用)在包含按钮的单元格上方插入一行,完成了前半部分。然后,我编辑了包含ActiveCell的宏。选择范围(“NamedCell”)。这样,无

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

我遇到的问题是如何插入ActiveX组合框。生成的代码包含用于定位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

这就是你想要的吗

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

这就是你想要的吗

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

是的,很好用。我试图找出它相对于细胞的位置。非常感谢你抽出时间来帮助我!不幸的是,我还不能对你的评论投赞成票,因为我没有15点的声誉积分,但一旦我有了,我会的。很高兴这对你有用。顺便说一句,谢谢,这很有帮助。有时,当你不确定自己在寻找什么时,寻找答案是很困难的,但这肯定是有帮助的。再次感谢。是的,这很好用。我试图找出它相对于细胞的位置。非常感谢你抽出时间来帮助我!不幸的是,我还不能对你的评论投赞成票,因为我没有15点的声誉积分,但一旦我有了,我会的。很高兴这对你有用。顺便说一句,谢谢,这很有帮助。有时,当你不确定自己在寻找什么时,寻找答案是很困难的,但这肯定是有帮助的。再次感谢。