是否可以自动填充输入框?

时间:2013-02-18 13:10:33

标签: excel-vba global-variables inputbox vba excel

请允许我先解释一下情景......

我们有一个报告电子表格,可以更新多个不同指标的月度数据。

随着时间的推移,已经添加了越来越多的宏,现在已超过20个。

为了让工作更轻松,我添加了另一个宏,它会显示一个用户表单

逐个调用其他每个宏,并显示一个进度条以指示已完成的任务(宏)。

前8个宏调用提示输入框正在更新哪个月 - 这将始终是所有8个月的同一个月。

所以,我想要做的是添加一个全局输入框作为userform做的第一件事,然后在其他宏中引用此输入(删除了他们各自的提示)。

说实话,我完全不知道如何做到这一点,但尝试了以下(一起)。

在工作簿中

Public Monthglobal As Variant

用户表单代码开头

Function GetMonth()
Monthglobal = InputBox("Please enter the 3 letter abbreviation for the Month which your are updating (e.g. Jan, Feb...)", "Month")
If strName = vbNullString Then Exit Function
End Function
用户表单Sub开头的

逐个调用宏

GetMonth

在每个8个宏中(包含在模块1中)

'Searches for correct column for month and pastes data

Selection.Find(What:=Monthglobal, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
ActiveCell.Offset(1, 0).Activate
ActiveCell.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

'Searches for correct column for month and pastes data

结果

运行时错误'91': 对象变量或未设置块变量

返回错误,突出显示搜索(对于变量)部分:

Selection.Find(What:=Monthglobal, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate

我希望这足以理解它,如果有人需要查看单个宏的更多代码请给我一个喊叫,但我认为错误信息清楚地表明问题出在哪里......对某人来说不是什么我缺乏经验!

提前致谢,

1 个答案:

答案 0 :(得分:0)

我会做这样的事情:

Public Monthglobal As String

Function GetMonth()
    Monthglobal = InputBox("Please enter the 3 letter abbreviation for the Month which your are updating (e.g. Jan, Feb...)", "Month")
End Function

搜索位 - 最好定义以编程方式搜索的范围,而不是使用“选择”。 3个字母的月份是整个单元格的内容,还是仅仅是其中的一部分?

Dim rngFind as Range, rngFound as Range

Set rngFind = Range("A:A") ' Set this to whatever 'Selection' is currently

'Now set the rngFound variable to be the eventual 'ActiveCell' from your macro above (found cell, offset(1,0))
Set rngFound = rngFind.Find(What:=Monthglobal, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,MatchCase:=False).Offset(1, 0)

'Now paste without activating anything:
rngFind.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False