У меня есть скрипт, созданный для входа в файл в dir
и формирования массива на основе данных.
Как мне напечатать это:
Dim k As Long, x As Long, j As Long ' counters
Dim varArray() As Variant
ReDim varArray(1 To 13, 1 To 1)
ReDim varArray(1 To UBound(varArray, 1), 1 To 1)
For j = 1 To .UsedRange.Rows.Count + 1
If .Cells(j, 1) <> "" Then
x = x + 1
ReDim Preserve varArray(1 To UBound(varArray, 1), 1 To x)
For k = 1 To UBound(varArray, 1)
varArray(k, x) = .Cells(j, k)
Next
End If
Next
Это создает массив, но теперь мне нужно, чтобы он был напечатан на листе, поэтому я написал это:
With Workbooks("master.xlsm").Worksheets("Sheet2")
For j = 2 To UBound(varArray, 2)
For k = 1 To UBound(varArray, 1)
ActiveSheet.Cells(j, k) = varArray(k, j)
Next
Next
End With
Это работает, но теперь мне нужно очистить массив после его печати с помощью Redim, но это:
ReDim varArray(1 To UBound(varArray, 1), 1 To 1)
не очищает его после того, как я поместил его после последнего end with
Вот целый сценарий ради большей картины:
Option Explicit
Sub Stuff()
Dim k As Long, x As Long, j As Long ' counters
Dim varArray() As Variant
ReDim varArray(1 To 13, 1 To 1)
Dim MyFile As String
MyFile = Dir("M:\Merge Files\")
If Len(MyFile) <> 0 Then
With ThisWorkbook.Worksheets(1)
ReDim varArray(1 To UBound(varArray, 1), 1 To 1)
For j = 1 To .UsedRange.Rows.Count + 1
If .Cells(j, 1) <> "" Then
x = x + 1
ReDim Preserve varArray(1 To UBound(varArray, 1), 1 To x)
For k = 1 To UBound(varArray, 1)
varArray(k, x) = .Cells(j, k)
Next
End If
Next
End With
With Workbooks("master.xlsm").Worksheets("Sheet2")
For j = 2 To UBound(varArray, 2)
For k = 1 To UBound(varArray, 1)
ActiveSheet.Cells(j, k) = varArray(k, j)
Next
Next
End With
ReDim varArray(1 To UBound(varArray, 1), 1 To 1)
End If
End Sub