我正在为一家小公司构建一个电子表格,并且非常非常新手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这是有问题的!它可能非常直接,但我已经盯着这几天了,无法解决这个问题。
答案 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
运行代码并使用偏移量循环代码,则使用此方法也可以使其适用于选择。