我正在创建一个宏,用于计算我在一个月内分配给工作的时间。我有每个作业所花费的作业列表和时间的代码,它将每个作业名称和相关小时数保存在数组JobHours(i,j)
中。一旦我尝试在用户表单中访问此数组,它就不可用。
我在模块中的代码
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
我的理解是,如果数组被声明为公共变量,它将传递给用户表单 - 事实上我有这个工作!然后我保存了工作簿,关闭它并重新打开,现在有问题吗?
我不知道为什么这不起作用 - 这是我第一次真正尝试使用数组。如果您有任何想法,他们将不胜感激。
谢谢,丹
多亏了@Rory我才确定用户表单本身的文本字段被称为 JobHours
,这导致了错误。此后,它被标记为Job_Hours
,并且都在:)
感谢大家的评论和帮助。
担
看不到您的所有代码以及您如何填充数组,我们只能进行猜测。
我的猜测是你的问题是UBound(JobHours, 2)
,2
Debug.Print "Upper Bound of JobHours() = " & UBound(JobHours, 2)
Ubound()
的第二个参数用于选择性地指定维度。这仅在您有一个多维数组时才有用。我相信这不是您的情况,并且您告诉 VBA 访问不存在的维度。
如果我错了,请编辑您的问题并向我们展示所有内容。