请允许我先解释一下情景......
我们有一个报告电子表格,可以更新多个不同指标的月度数据。
随着时间的推移,已经添加了越来越多的宏,现在已超过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
我希望这足以理解它,如果有人需要查看单个宏的更多代码请给我一个喊叫,但我认为错误信息清楚地表明问题出在哪里......对某人来说不是什么我缺乏经验!
提前致谢,
答案 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