我正在创建一个宏来计算我在一个月内分配给一份工作的小时数。我有工作列表的代码和每个工作所花费的时间,这保存了每个工作名称和数组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
答案 0 :(得分:1)
感谢@Rory我发现用户表单本身的文本字段被称为JobHours
,这导致了错误。它已被标记为Job_Hours
并且一切正常:)
感谢大家的意见和帮助。
丹
答案 1 :(得分:0)
因此,我们没有看到您的所有代码以及如何填充数组,我们只能做猜测。
我的猜测是您的问题是,2
UBound(JobHours, 2)
Debug.Print "Upper Bound of JobHours() = " & UBound(JobHours, 2)
Ubound()
的第二个参数是optionnaly指定维度。只有拥有多维数组时,这才有用。我相信这不是你的情况,你告诉VBA访问一个确实存在的维度。
如果我错了,请编辑您的问题并向我们展示一切。