最初にシナリオを説明させてください...
いくつかの異なる測定値の月次データを更新できるレポートスプレッドシートがあります。
時間の経過とともに、ますます多くのマクロが追加され、現在では合計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
私はそれを理解するのに十分であることを願っています、誰かが個々のマクロのコードをもっと見る必要がある場合は一言お願いしますが、エラーメッセージは問題がどこにあるかを明確に示していると思いました...経験!
前もって感謝します、