将按钮和宏添加到最后一行

时间:2015-11-24 21:08:24

标签: excel vba excel-vba

我正在为一家小公司构建一个电子表格,并且非常非常新手Excel用户。因此,我想使用宏和VBA来完成大部分工作,这样他们就不必为编辑公式或创建图表而感到不知所措。在一个理想的世界里,他们会学到一些优秀的东西,但现实是不会发生的。

到目前为止,我有一个很好的用户表单,使输入变得简单,一旦按下提交按钮,它会将所有数据插入到第一个可用行的库存列表中。但是,如果随后出售物品,我还想在每行末尾放一个按钮。我为此编写了一个宏(" Sale"),它减少了商品数量,将商品详细信息移动到已售出的纸张,如果数量变为零,则完全删除该行。我的问题是我无法获取我的用户窗体的提交按钮,以将宏按钮添加到变量行号。

这是我到目前为止所做的:

    Dim LRow As Long
    Dim ws As Worksheet
    Dim rng As Range
    Set ws = Worksheets("Stock Warehouse")
    LRow = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
    Set rng = ws.Cells(LRow, 23)

    With ws
    .Cells(LRow, 1).Value = Date
    .Cells(LRow, 2).Value = Me.CATEGORY.Value

     (---etc etc until---)

    .Cells(LRow, 21).FormulaR1C1 = "=Sum(rc[-1]/rc[-11])"

    rng.Select
    ws.Buttons.Add(rng.Left, rng.Top, rng.Width, rng.RowHeight).Select
    Selection.OnAction = "Sale"
    Selection.Characters.Text = "SALE"
    With Selection.Characters(Start:=1, Length:=4).Font
    .Name = "Lucida Grande"
    (---more formatting stuff---)
    End With

如果我将它设置为指定的单元格(即" W5"),它可以工作并插入按钮。它只是让它在LRow中插入一个按钮,23这是有问题的!它可能非常直接,但我已经盯着这几天了,无法解决这个问题。

3 个答案:

答案 0 :(得分:0)

我运行了你的代码并且插入按钮没问题,但最好避免选择

    Set btn = ws.Buttons.Add(rng.Left, rng.Top, rng.Width, rng.RowHeight)
    With btn
        .OnAction = "Sale"
        .Characters.Text = "SALE"
        With .Characters.Font
            .Name = "Lucida Grande"
'        (---more formatting stuff---)
        End With
    End With

答案 1 :(得分:0)

您是否考虑过将一个按钮放在冻结窗格线上方,并且用户选择一个/任何单元格(您可以告诉/训练他们哪一个)他们想要删除/处理/等等的行,然后按下按钮?让按钮使用ActiveCell.Row检测行(进行适当的检查)并从那里开始工作。

答案 2 :(得分:0)

我做了类似的事情,但它是两个按钮,它们根据所选行移动,这样用户可以滚动数据,按钮会在他们选择他们想要的行时显示。我使用图片作为我的按钮并为它们分配了宏:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
With ActiveSheet.Pictures("Picture 2")
    .Top = Target.Offset(1).Top
    .Left = 930
End With
With ActiveSheet.Pictures("Picture 4")
    .Top = Target.Offset(1).Top
    .Left = 1005
End With
End Sub

它始终显示在数据的右侧并向下显示1行,以免掩盖我在那里的任何笔记。

编辑:

如果用户选择一堆行并使用Selection.Rows.Count运行代码并使用偏移量循环代码,则使用此方法也可以使其适用于选择。