У меня есть множество калибровочных тестов. Я храню все разные типы и их даты на одном листе "wsCAL"
. Я хочу заполнить пользовательскую форму самой последней датой одного конкретного типа теста, который хранится в столбце C в wsCAL.
Теоретически, я хочу, чтобы VBA перешел к wsCAL, посмотрел по столбцу C и нашел все экземпляры одного типа теста, нашел самую последнюю дату (или MAX) в столбце B этих экземпляров, а затем заполнил мою пользовательскую форму этой датой. ,
Я пытался использовать функцию rangeCAL = .Find (), чтобы найти все экземпляры тестового типа в столбце C. Эта часть прекрасно работает. Однако application.worksheetfunction.Max (rangeCAL), который я пытаюсь использовать, не удается. Я предполагаю, что это потому, что эта функция приложения работает только с диапазонами листа, а не с Find (). Я пытаюсь взять мои ячейки rangeCAL, создать массив, а затем найти самую последнюю дату (МАКС) из них.
Private Sub UserForm_Initialize() 'Upon opening the userform
Set wb = ThisWorkbook
Set wsHOME = wb.Worksheets("Home")
Set wsCAL = wb.Worksheets("Bottle Calibrations")
Set wsC1T1 = wb.Worksheets("C1T1")
'Last Calibration Date
Label27.Caption = vbNullString
With wsCAL
Dim Cell As Range
Dim myArray As Date
Dim i As Integer
Dim rangeCAL As Range
Dim rangeDateCAL As Date
i = 0
Set rangeCAL = Range("C:C").Find(What:=tank, LookAt:=xlWhole)
If Not rangeCAL Is Nothing Then
For Each Cell In rangeCAL
myArray(i) = .Range(rangeCAL.Row, "A").Value
i = i + 1
Next
Else
MsgBox "Error: no previous Calibration dates loaded."
End If
rangeDateCAL = Application.WorksheetFunction.Max(myArray)
rangeDateCAL = Format(rangeDateCAL, "yymmdd")
End With
Label27.Caption = rangeDateCAL
Я получаю сообщение об ошибке
«Ожидаемый массив»
, как только я доберусь до строки:
myArray(i) = .Range(rangeCAL.Row, "B").Value
ОБНОВЛЕНИЕ:
Label27.Caption = vbNullString
With wsCAL
Dim Cell As Range
Dim myArray(1 To 5) As Date
Dim i As Long
Dim temp As Date
Dim rangeCAL As Range
Dim rangeDateCAL As Date
i = 1
Set rangeCAL = wsCAL.Range("C1", Range("C1").End(xlDown).Address)
For Each Cell In rangeCAL
If Cell <> "" Then
If Cell.Value = tank Then
temp = wsCAL.Cells(Cell.Row, "B").Value
myArray(i) = temp
i = i + 1
End If
End If
Next
rangeDateCAL = Application.WorksheetFunction.Max(myArray)
rangeDateCAL = Format(rangeDateCAL, "yymmdd")
End With
Label27.Caption = rangeDateCAL
Я внес это изменение после прочтения ваших комментариев,Этот код выполняется, но он заполняет Label27.Caption с помощью 11/22/4613 вместо предполагаемого 11/7 / 2019.
Я предполагаю, что значение даты изменяется на шаге функции MAX, но яЯ не уверен, что еще я могу изменить.