0

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

我们有一个报告电子表格,能够更新几种不同措施的月度数据。

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

为了使工作更轻松,我添加了另一个宏,它会打开一个用户表单,

一个一个地调用其他每个宏,并显示一个进度条来指示已经完成了多少任务(宏)。

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

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

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

在工作簿中

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

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

提前致谢,

4

1 回答 1

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
于 2013-02-18T14:52:24.557 回答