将输入框默认更改为当前输入

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
  1. 为了更好的可读性,我建议不要使用完整的大写变量名。
  2. 我建议使用 Application.InputBox method 而不是 InputBox 因为在那里你可以指定输入的 Type。所以如果你设置 Type:=1 用户只能输入数字。
  3. 确保使用 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