替代InputBox中的SendKeys来选择用户输入最少的单元格

时间:2018-07-20 17:54:57

标签: excel vba sendkeys

为了方便用户使用,我将SendKeys方法与InputBox一起使用,用于选择要用于计算的多个单元格。

我要避免让用户在单击每个单元格或按Shift-F8选择多个单元格时按住CTRL。

我希望InputBox弹出并选择不一定彼此相邻的单元格,而无需执行其他任何操作。

这是我所拥有的样品。

Sub CalculateIt()
    Dim calcRange As Range
    On Error Resume Next
    SendKeys "+{F8}"
    Set calcRange = Application.InputBox("Select the cells you would like to use.", Type:=8)
    If Err.Number = 424 Then Exit Sub

    Dim stuff As Double
    For Each calcCell in calcRange
        If IsNumeric(calcCell.Value) Then stuff = stuff + calcCell.Value
    Next calcCell

    MsgBox "The Solution: " & Sqr(stuff)
End Sub

我想避免使用SendKeys方法,因为我已经读到很多关于它的挑剔和脆弱的知识,并且它可能会引起问题。我遇到了一些无法使用的情况,无论如何我都必须按住CTRL或执行Shift-F8。

1 个答案:

答案 0 :(得分:0)

可能的解决方案...在工作表中添加一个复选框,然后进入Microsoft Excel对象|。在“工作簿”窗口中,输入以下代码。如果选中了此复选框,那么用户单击每个单元格时,您要执行的任何公式都将变为

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim nbrCell As Double
If IsNumeric(ActiveCell.Value) Then nbrCell = ActiveCell.Value Else nbrCell = 0
If ActiveSheet.CheckBox1.Value = True Then ActiveSheet.Range("A1").Value = ActiveSheet.Range("A1").Value + nbrCell
End Sub

如果您担心用户可能不小心单击了错误的单元格并希望删除该值,则还可以添加第二个复选框来删除选定的单元格。