在excel里如何用vba实现选中一行的部分内容后,按enter后弹出inputbox,具体见下面:

在excel里如何用vba实现选中一行的连续的部分内容(内容为数字)后,按enter后弹出inputbox,往iputbox中输入数字,比如该数字为8,而选中的内容中加到... 在excel里如何用vba实现选中一行的连续的部分内容(内容为数字)后,按enter后弹出inputbox,往iputbox中输入数字,比如该数字为8,而选中的内容中加到7,则给1到7的数字染色,并在加到7的数字所在单元格批注“余8-7=1”,该数字为8,而选中的内容中加到8,则给1到8的数字染色,并在加到8的数字所在单元格批注“余8-8=0”,该数字为9,而选中的内容中加到9,则给1到8的右边一格即到第9格的数字染色,并在加到9(有可能加上第9格后的数字大于等于9)的数字所在单元格批注“欠9-8=1”,
注:1.选中部分是连续的,且加总的时候也是连续的从左往右依次相加的,
2.上文的加到7是指总和加到了7,不是指加了一个7的数字!其它的加到几依次类推,都是依次加总后到某个和的意思
3.最后一句打错字了:该数字为8(8是个界限,不是9),而选中的内容中加到9,则给1到8的右边一格即到第9格的数字染色,并在加到大于或等于9(有可能第9格的数字大于等于9)的第一个符合条件的数字所在单元格批注“欠第9格的数字-8=?”,注:选中的内容总和加起来可能早就超过9了,所以有个加到9才。。。的这个条件!
展开
 我来答
K_BEAT
2014-12-17 · TA获得超过1245个赞
知道小有建树答主
回答量:879
采纳率:91%
帮助的人:401万
展开全部

其他先不说,单这一句需求:选中连续内容,按 Enter 弹出 InputBox 就较难实现!

Excel 本身只有 Worksheet.SelectionChange 事件稍微接近这个需求,但是选中连续区域后你按 Enter 你的选区是不会改变的,因此这个时候要捕捉键盘事件绝非易事。


下面代码也只是在检测到选区仅为单个单元格时并且是按下 Enter 触发的才弹出 InputBox:


Code in Sheet1:

Option Explicit

#If VBA7 Then
    Private Declare PtrSafe Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
#Else
    Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
#End If

Private Const VK_ENTER As Long = &HD

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If GetKeyState(VK_ENTER) < 0 Then
        Dim varInput As Variant
        
        varInput = Application.InputBox("请输入一个数", Type:=1)
        
        If WorksheetFunction.IsNumber(varInput) Then
            ' 处理逻辑写在这里
        End If
    End If
End Sub
更多追问追答
追问
那不要求选区为连续单元格,单个单元格能弹出inputbox也行,不过选中任意单元格,按enter后,使得选中的单元格不换行,要从同行第一个非空单元格开始加总,中间有空单元格视为值为0,还能在上面基础上加一点:inputbox输入一次以上时实现:染色数+批注里欠或余的数+inputbox里的数继续往后染色,批注,
追答

配合给出的代码,要使得在单个单元格上按 Enter 后不换行,可以设置 Application.MoveAfterReturn 属性为 False 来实现。

Code in ThisWorkbook(需要关闭工作簿然后重新打开):

Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.MoveAfterReturn = True
End Sub

Private Sub Workbook_Open()
    Application.MoveAfterReturn = False
End Sub


或者你手动运行下面的过程:

Sub DisableMoveAfterReturn()
    Application.MoveAfterReturn = False
End Sub


后面的需求不妨自己先尝试,我相信你已经离成功不远了!

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式