0

最初にシナリオを説明させてください...

いくつかの異なる測定値の月次データを更新できるレポートスプレッドシートがあります。

時間の経過とともに、ますます多くのマクロが追加され、現在では合計20を超えています。

作業を少し簡単にするために、さらに別のマクロを追加しました。これにより、次のようなユーザーフォームが表示されます。

他の各マクロを1つずつ呼び出し、進行状況バーを表示して、完了したタスク(マクロ)の数を示します。

最初の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

マクロを1つずつ呼び出すユーザーフォーム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 に答える