1か月間にジョブに割り当てられた時間数をカウントするマクロを作成しています。私は各ジョブの作業に費やされたジョブと時間のリストのコードを持っており、各ジョブ名とその時間をアレイJobHours(i,j)
に保存しています。ユーザーフォームでこの配列にアクセスしようとすると、利用できません。モジュールGRRR VBAパブリック配列変数がユーザーフォームで機能していない
Option Explicit
Public JobHours() As Variant
Sub MonthlyHoursShow()
Monthly_Hours.Show
End Sub
Sub MonthlyHours(SelMonth As Variant)
'Code which assigns values to JobHours() -
ReDim JobHours(1, 0)
JobHours(0, 0) = "Job Number"
JobHours(1, 0) = "Hours"
'There are a few loops to determine what values to collect, and they are then
'assigned to JobHours() as follows:
cValue = UCase(ws.Cells(j, 2).Text)
ReDim Preserve JobHours(1, JobNum)
JobHours(0, JobNum) = cValue
JobHours(1, JobNum) = ws.Cells(j, 27).Value
Worksheets("25 Mar").Cells(8 + JobNum, 30).Value = JobHours(0, JobNum)
Worksheets("25 Mar").Cells(8 + JobNum, 31).Value = JobHours(1, JobNum)
'where JobNum is a counter for the number of jobs, and is incremented as part of the loop.
Debug.Print "Upper Bound of JobHours() = " & UBound(JobHours, 2) - 'Returns as 38
Debug.Print "Total Number of jobs is " & Application.CountA(JobHours) - 'returns as 78
End Sub
で、私のユーザーフォームで
私のコードは:
Private Sub CalcButton_Click()
SelMonth = MonthBox.Value
Call MonthlyHours(SelMonth)
'Debug.Print "Upper Bound of JobHours() = " & UBound(JobHours, 2) - 'Returns error
Debug.Print "Total Number of jobs is " & Application.CountA(JobHours) - 'Returns as 1
End Sub
私は、私は次のエラーを取得する最初のDebug.Print
ラインでUBound
コマンドをコメントしていない場合は、次の
Compile Error: Expected Array
私の理解は、配列が宣言されていた公開された変数としてedを渡して、ユーザーフォームに渡します - 実際には私はこの作業をしていました!私はその後、ブックを保存し、それを閉じて再オープンし、今問題がありますか?
なぜこれが機能していないのかわかりません。アレイを使用したのは初めての試みです。アイデアがあれば、大変感謝しています。
おかげで、ダン
「JobHours」にどのような値を割り当てるコードですか? 'ubound'はどこで使われていますか? – shahkalpesh
あなたの "JobHours"配列(少なくとも 'ReDim'文)を定義する必要があります(その境界を取得しようとするときのように)。マクロを終了すると、 'Public'であろうとなかろうと、すべての変数値が失われます。 1つのマクロセッションの変数値を別のマクロセッションに保持したい場合は、それらを(シートやtxtファイルに)格納してから取得する必要があります。 – user3598756
エラーが表示されるのは、ルーチン/モジュール名として 'JobHours'を使用していました。 – Rory