它的用途: 我有一份每份工作都有变化的零件清单。
我想要完成的事情: 如果选定的单元格不在A列中,则msgbox会提示用户“选择部件#” 如果所选单元格在范围A9:lastrow
中,则仅运行删除宏为什么只有A栏: 如果我可以强制他们选择A列中的单元格,那么我可以使用ActiveCell.Offset向msgbox添加信息,询问他们是否确定这是他们想要删除的内容,并包含有关他们选择的部分#的其他单元格信息。
第8行以上是标题,因此必须将其锁定。
我的每个部分都有3行,这就是我运行“EntireRow.Delete”3次的原因。
这就是我现在所拥有的。
Sub DeleteRow()
If MsgBox("Are you sure you want to delete this part?" & vbNewLine & " " & vbNewLine & ActiveCell.Value & vbNewLine & ActiveCell.Offset(0, 1).Value & vbNewLine & "QTY: " & ActiveCell.Offset(0, 12).Value, vbYesNo) = vbNo Then Exit Sub
If ActiveCell.Row > 8 Then
Rows(ActiveCell.Row).EntireRow.Delete
Rows(ActiveCell.Row).EntireRow.Delete
Rows(ActiveCell.Row).EntireRow.Delete
End If
End Sub
答案 0 :(得分:1)
关注@YowE3K评论,也许我在帖子中遗漏了一些内容,但我认为它应该像下面的代码一样简短。
如果用户选择“否”,则Exit Sub
的Insead,如果他选择“是”,则删除行。
Sub DeleteRow()
If ActiveCell.Row > 8 Then ' <-- first check if not above row 8 (headers)
If MsgBox("Are you sure you want to delete this part?" & vbNewLine & " " & _
vbNewLine & ActiveCell.value & vbNewLine & ActiveCell.Offset(0, 1).value _
& vbNewLine & "QTY: " & ActiveCell.Offset(0, 12).value, vbYesNo) = vbYes Then
ActiveCell.Resize(3, 1).EntireRow.Delete
End If
End If
End Sub
答案 1 :(得分:1)
为了在MsgBox
中显示您想要的信息,活动单元格没有理由在A列中,因此,如果这是您尝试限制{的位置的唯一原因{1}},您应该能够将代码更改为以下内容:
ActiveCell
答案 2 :(得分:0)
如果不确切知道您的问题是什么(顺便说一下,您应该在问题中说明您遇到的问题),我只能假设您希望用户选择代码中的某个部分,然后执行病房后的某种chekc。看看这个:
Dim rNg As Range
Set rNg = Application.InputBox("Select something", "Obtain Range Object", Type:=8)
If target.address "something" then
end if
这应该让你去。
对于那些在没有更多信息的情况下特别挑剔答案的人 - 如果事实证明我的答案无关紧要,我会删除