将输入框默认更改为当前输入
Change inputbox default to the current input
我正在尝试编写一个宏,它将输入框的默认值重新设置为上次输入的值,因此如果我在下面的输入框中键入“2”,默认值将更改为 2,对于下一个时间宏是 运行.
只有我运行打开宏的工作簿关闭后,才能恢复原来的默认值
(Excel 2007)
ROWSDOWN = InputBox("enter no.of rows DOWN to move the cells", "VerticalMove", _
-1) 'default -1 (=1 row up)
我已经尝试设置 PREV_ROWSDOWN = ROWSDOWN
但我的尝试(如下)不起作用:下次我 运行 宏时,输入框的默认值为 0。PREV_ROWSDOWN 的值(和 ROWSDOWN)在宏结束时丢失?
ROWSDOWN = InputBox("enter no.of rows DOWN to move the cells (0=no change, - =move UP)", "VerticalMove", _
PREV_ROWSDOWN) 'should set default as value entered last time the macro run
PREV_ROWSDOWN = ROWSDOWN ''NW-not saved after macro finished, default changed to "0"
我怎样才能做到这一点?
需要定义全局变量,这里用输入框定义宏,如:
Private lastInput
Sub DefaultForInputBox()
lastInput = InputBox("Enter some value", "InputBox", lastInput)
End Sub
- 为了更好的可读性,我建议不要使用完整的大写变量名。
- 我建议使用 Application.InputBox method 而不是
InputBox
因为在那里你可以指定输入的 Type
。所以如果你设置 Type:=1
用户只能输入数字。
- 确保使用
Option Explicit
强制正确声明变量。我建议始终激活 Option Explicit
:在 VBA 编辑器中转到 工具 › 选项 › Require Variable Declaration.
持续到工作簿关闭……
要使您的默认值在工作簿关闭之前一直存在,您需要将其声明为 Static
(请参阅 Static statement)。
Option Explicit
Public Sub Test()
Static RowsDown As Long 'Static variables will keep the value until next call
RowsDown = Application.InputBox(Prompt:="enter no.of rows DOWN to move the cells (0=no change, - =move UP)", Title:="VerticalMove", Default:=RowsDown, Type:=1)
End Sub
请注意,如果您关闭并重新打开您的工作簿,它将再次开始 0
。如果您希望它有所不同,您需要在 Static
行之后添加如下内容:
If RowsDown = 0 Then RowsDown = -1
永远坚持……
关闭工作簿时变量无法保留值。如果你想让你的价值持久化,即使工作簿关闭并重新打开,那么你需要将它保存到(可能隐藏的)工作表的单元格中。
Option Explicit
Public Sub Test()
Dim RowsDown As Long
RowsDown = Application.InputBox(Prompt:="enter no.of rows DOWN to move the cells (0=no change, - =move UP)", Title:="VerticalMove", Default:=ThisWorkbook.Worksheets("hiddensheet").Range("A1").Value, Type:=1)
ThisWorkbook.Worksheets("hiddensheet").Range("A1").Value = RowsDown
End Sub
我正在尝试编写一个宏,它将输入框的默认值重新设置为上次输入的值,因此如果我在下面的输入框中键入“2”,默认值将更改为 2,对于下一个时间宏是 运行.
只有我运行打开宏的工作簿关闭后,才能恢复原来的默认值
(Excel 2007)
ROWSDOWN = InputBox("enter no.of rows DOWN to move the cells", "VerticalMove", _
-1) 'default -1 (=1 row up)
我已经尝试设置 PREV_ROWSDOWN = ROWSDOWN
但我的尝试(如下)不起作用:下次我 运行 宏时,输入框的默认值为 0。PREV_ROWSDOWN 的值(和 ROWSDOWN)在宏结束时丢失?
ROWSDOWN = InputBox("enter no.of rows DOWN to move the cells (0=no change, - =move UP)", "VerticalMove", _
PREV_ROWSDOWN) 'should set default as value entered last time the macro run
PREV_ROWSDOWN = ROWSDOWN ''NW-not saved after macro finished, default changed to "0"
我怎样才能做到这一点?
需要定义全局变量,这里用输入框定义宏,如:
Private lastInput
Sub DefaultForInputBox()
lastInput = InputBox("Enter some value", "InputBox", lastInput)
End Sub
- 为了更好的可读性,我建议不要使用完整的大写变量名。
- 我建议使用 Application.InputBox method 而不是
InputBox
因为在那里你可以指定输入的Type
。所以如果你设置Type:=1
用户只能输入数字。 - 确保使用
Option Explicit
强制正确声明变量。我建议始终激活Option Explicit
:在 VBA 编辑器中转到 工具 › 选项 › Require Variable Declaration.
持续到工作簿关闭……
要使您的默认值在工作簿关闭之前一直存在,您需要将其声明为 Static
(请参阅 Static statement)。
Option Explicit
Public Sub Test()
Static RowsDown As Long 'Static variables will keep the value until next call
RowsDown = Application.InputBox(Prompt:="enter no.of rows DOWN to move the cells (0=no change, - =move UP)", Title:="VerticalMove", Default:=RowsDown, Type:=1)
End Sub
请注意,如果您关闭并重新打开您的工作簿,它将再次开始 0
。如果您希望它有所不同,您需要在 Static
行之后添加如下内容:
If RowsDown = 0 Then RowsDown = -1
永远坚持……
关闭工作簿时变量无法保留值。如果你想让你的价值持久化,即使工作簿关闭并重新打开,那么你需要将它保存到(可能隐藏的)工作表的单元格中。
Option Explicit
Public Sub Test()
Dim RowsDown As Long
RowsDown = Application.InputBox(Prompt:="enter no.of rows DOWN to move the cells (0=no change, - =move UP)", Title:="VerticalMove", Default:=ThisWorkbook.Worksheets("hiddensheet").Range("A1").Value, Type:=1)
ThisWorkbook.Worksheets("hiddensheet").Range("A1").Value = RowsDown
End Sub