excel - 将输入框默认更改为当前输入
问题描述
我正在尝试编写一个宏,它将输入框默认值重新设置为最后输入的值,因此如果我在下面的输入框中键入“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"
我怎样才能做到这一点?
解决方案
- 为了更好的可读性,我建议不要使用全大写变量名。
- 我建议使用Application.InputBox 方法,而不仅仅是
InputBox
因为您可以指定Type
输入的。所以如果你设置Type:=1
用户只能输入数字。 - 确保您使用
Option Explicit
强制正确的变量声明。我建议始终激活Option Explicit
:在 VBA 编辑器中转到工具›选项›需要变量声明。
一直持续到工作簿关闭……</h3>
要使您的默认值在工作簿关闭之前保持不变,您需要将其声明为Static
(请参阅静态语句)。
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
再次以beeing 开始。如果您希望它有所不同,您需要在您的Static
行之后放置类似以下内容:
If RowsDown = 0 Then RowsDown = -1
永远坚持……</h3>
当工作簿关闭时,变量无法保留值。如果即使工作簿关闭并重新打开,您也想让您的价值保持不变,那么您需要将其保存到(可能是隐藏的)工作表的单元格中。
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
推荐阅读
- r - 如何从索引匹配的大型 XTS 对象的每个值中减去 XTS 向量?
- excel - Excel 实时数据计数器(DDE 服务器)
- cpanel - 为什么我的 cpanel 没有在软件中显示设置 node.js 应用程序图标?
- google-chrome-extension - 针对特定脚本运行的 Chrome 扩展程序
- javascript - 仅获取 Javascript 表单序列化的选定值
- amazon-s3 - 气流:每日刷新后如何在 s3 存储桶中公开对象
- ruby - Ruby 找不到环境变量 HOME
- android - 为什么我无法读取 json
- angular - JSP 到 Angular 2+
- java - ServletContext().getRealPath("") 返回不以 / 结尾的路径