在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才。。。的这个条件! 展开
注:1.选中部分是连续的,且加总的时候也是连续的从左往右依次相加的,
2.上文的加到7是指总和加到了7,不是指加了一个7的数字!其它的加到几依次类推,都是依次加总后到某个和的意思
3.最后一句打错字了:该数字为8(8是个界限,不是9),而选中的内容中加到9,则给1到8的右边一格即到第9格的数字染色,并在加到大于或等于9(有可能第9格的数字大于等于9)的第一个符合条件的数字所在单元格批注“欠第9格的数字-8=?”,注:选中的内容总和加起来可能早就超过9了,所以有个加到9才。。。的这个条件! 展开
1个回答
展开全部
其他先不说,单这一句需求:选中连续内容,按 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
后面的需求不妨自己先尝试,我相信你已经离成功不远了!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询