Bir ay içinde bir işe kaç saat çalıştığımı gösteren bir makro oluşturuyorum. Her işin çalışmasında harcanan zaman ve işlerin listesi için kodum var, bu da her iş adını ve ilgili saatleri JobHours(i,j)
dizisinde kaydeder. Bu diziye kullanıcı formunda erişmeye çalıştığımda mevcut değildir. modülGRRR VBA Kullanıcı dizisinde çalışmayan genel dizi değişkeni
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
ve benim userform içinde
Kodum:
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
ben aşağıdaki hatayı alıyorum ilk Debug.Print
doğrultusunda UBound
komutu açıklama yoksa:
Compile Error: Expected Array
bir kamu değişkeni olarak bir kullanıcı formuna geçecek - Aslında bu işe yaramıştım! Daha sonra çalışma kitabını kurtardım, kapattım ve tekrar açıldı ve şimdi sorun var mı?
Bunun neden çalışmadığı hakkında hiçbir fikrim yok - bir dizi kullanma konusundaki ilk gerçek girişimim. Herhangi bir fikriniz varsa, büyük takdir edilecektir.
Teşekkürler Dan
Hangi kod, değeri "JobHours" a atar? Ubound nerede kullanılıyor? – shahkalpesh
"JobHours" dizininizi (en az bir "ReDim" ifadesiyle), kabul etmeden önce tanımlamanız gerekir (sınırlarını almaya çalıştığınızda olduğu gibi). Makrodan çıktığınızda, tüm değişken değerlerini kaybedersiniz, bunlar “Public” olsun ya da olmasınlar. Değişken değerlerini bir makro oturumdan diğerine saklamak isterseniz, bunları (muhtemelen bir sayfada veya bir txt dosyasında) saklamak ve daha sonra – user3598756
almanız gerekir. Bu hatayı aldığınızı görebilmemin tek yolu şudur: "JobHours", rutin/modül adı olarak başka bir yerde kullanılır. – Rory