Problema: Desenvolver um subprocedimento para colar uma matriz de dados em um intervalo de células (sem loop) em uma planilha do MS Excel.
Nota: as funções build_date_array e populate_date_array trabalham juntas para criar e armazenar dados em um array. O subprocedimento paste_array chama essas funções antes de tentar colar dados na planilha "test". O subprocedimento as-is está colando incorretamente o primeiro elemento do array no exemplo codificado abaixo. Veja as duas imagens anexadas.
build timeline data storage array
Function build_date_array(length As Integer) As Variant
' declare array variable
Dim eNumStorage() As String ' initial storage array to take values
' dimension the array
ReDim eNumStorage(1 To length)
' set empty array to variable to pass back to module
build_date_array = eNumStorage
End Function
' Populate a date array
Function populate_date_array(dimed_array As Variant, start As Variant) As Variant
Dim i As Long
' iterate through dimension empty array to populate it with data
For i = LBound(dimed_array) To UBound(dimed_array)
If i = LBound(dimed_array) Then
' first element of array needs to be the desired start
dimed_array(i) = Format(WorksheetFunction.EDate(start, 0), "MM/DD/YYYY")
Else
' kick in function for 2nd element to end of array
dimed_array(i) = Format(WorksheetFunction.EDate(start, i - 1), "MM/DD/YYYY") ' https://learn.microsoft.com/en-us/office/vba/api/excel.worksheetfunction.edate
End If
Next i
populate_date_array = dimed_array
End Function
Sub paste_array()
Dim wb As Workbook, sh As Worksheet, date_array As Variant, horizon As Integer
Set wb = ActiveWorkbook ' instance of workbook
Set sh = wb.Sheets("test") ' instance of sheet
horizon = 5 ' time increment in months
date_array = build_date_array(horizon) ' build empty array
date_array = populate_date_array(date_array, "10/01/2024") ' populate array
LastRow = sh.Cells(sh.Rows.Count, 1).End(xlUp).Row + 1 ' get last row
'sh.Range("A2").Resize(UBound(date_array), 1).Value = date_array
sh.Range(sh.Cells(LastRow, 1), sh.Cells(UBound(date_array), 1)).Value = date_array
End Sub