GRRR VBA公共数组变量在userform

时间:2016-03-22 06:39:13

标签: arrays vba excel-vba userform excel

我正在创建一个宏来计算我在一个月内分配给一份工作的小时数。我有工作列表的代码和每个工作所花费的时间,这保存了每个工作名称和数组JobHours(i,j)中的相关时间。一旦我尝试在userform中访问此数组,它就不可用。

我在模块中的代码

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

如果我没有在第一个UBound行中对Debug.Print命令发表评论,则会收到以下错误:

Compile Error: Expected Array

我的理解是,如果将Array声明为公共变量,它将传递给用户表单 - 实际上我有这个工作!然后我保存了工作簿,关闭它并重新打开,现在有了问题??

我不知道为什么这不起作用 - 这是我第一次尝试使用数组。如果您有任何想法,我们将不胜感激。

谢谢,Dan

2 个答案:

答案 0 :(得分:1)

感谢@Rory我发现用户表单本身的文本字段被称为JobHours,这导致了错误。它已被标记为Job_Hours并且一切正常:)

感谢大家的意见和帮助。

答案 1 :(得分:0)

因此,我们没有看到您的所有代码以及如何填充数组,我们只能做猜测。

我的猜测是您的问题是,2

中的UBound(JobHours, 2)
Debug.Print "Upper Bound of JobHours() = " & UBound(JobHours, 2)

Ubound()的第二个参数是optionnaly指定维度。只有拥有多维数组时,这才有用。我相信这不是你的情况,你告诉VBA访问一个确实存在的维度。

如果我错了,请编辑您的问题并向我们展示一切。