GRRR VBA 公共数组变量在用户表单中不起作用



我正在创建一个宏,用于计算我在一个月内分配给工作的时间。我有每个作业所花费的作业列表和时间的代码,它将每个作业名称和相关小时数保存在数组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 访问不存在的维度。

如果我错了,请编辑您的问题并向我们展示所有内容。

最新更新