Excel 如何为下一个打开的文件重新分配阵列?
我构建了一个脚本,将其放入Excel 如何为下一个打开的文件重新分配阵列?,excel,vba,Excel,Vba,我构建了一个脚本,将其放入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
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
这是可行的,但现在我需要在使用Redim打印阵列后清除阵列,但这是:
ReDim varArray(1 To UBound(varArray, 1), 1 To 1)
在我将其放置在最后一个结尾处后未清除它
为了大局起见,以下是整个脚本:
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
选项显式
子文件()
调暗k为长、x为长、j为长计数器
Dim varArray()作为变量
ReDim VARRARY(1到13,1到1)
将MyFile设置为字符串
MyFile=Dir(“M:\Merge Files\”)
如果Len(MyFile)为0,则
使用此工作簿。工作表(1)
ReDim varArray(1到UBound(varArray,1),1到1)
对于j=1到.UsedRange.Rows.Count+1
如果.Cells(j,1)“,则
x=x+1
ReDim Preserve varArray(1到UBound(varArray,1),1到x)
对于k=1到UBound(varArray,1)
varArray(k,x)=.个单元(j,k)
下一个
如果结束
下一个
以
工作手册(“master.xlsm”)。工作表(“表2”)
对于j=2到uBond(varArray,2)
对于k=1到UBound(varArray,1)
单元格(j,k)=可变数组(k,j)
下一个
下一个
以
ReDim varArray(1到UBound(varArray,1),1到1)
如果结束
端接头
您已经知道最大元素(.UsedRange.Rows.Count+1
)。为什么不调整数组的最大大小,然后跟踪实际包含数据的索引呢。重复的重新分配并不是真正必要的。在打印到工作表后,您可以使用Erase varArray
吗?这些是一个工作簿的最大元素数。我的目录里还有很多,所以我想我不明白你在评论什么。我有一个从工作簿1生成的数组,我将它打印到master.xlsm,我需要清除数组,然后移动到工作簿2,这样我就可以打印到master.xlsx等等。@nicklanta尝试擦除以清空/清除它:)@nicklanta替换ReDim varArray(1到UBound(varArray,1),1到1)
最后使用擦除varArray
。
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