Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何为下一个打开的文件重新分配阵列?_Excel_Vba - Fatal编程技术网

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