Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.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在循环中的简单VBA(打开文件、复制、粘贴、关闭)过程中崩溃_Vba_Excel - Fatal编程技术网

Excel在循环中的简单VBA(打开文件、复制、粘贴、关闭)过程中崩溃

Excel在循环中的简单VBA(打开文件、复制、粘贴、关闭)过程中崩溃,vba,excel,Vba,Excel,我是一名新的Excel 2013 vba程序员。我已经编写了代码来循环遍历文件夹中的每个文件,打开它,复制单元格,然后粘贴到一个新文件,向下递增一行,然后对文件夹中的每个文件执行此操作 在循环到下一个文件之前,关闭上一个文件。文件夹中大约有120个文件。这最终是在单个文件中创建文件夹中数据的索引 当我“单步执行”时,它似乎运行良好,但如果我只是F5它运行的宏一段时间,我看到它运行良好,然后在部分过程中崩溃Excel“Excel已停止工作…”它只是关闭 你以前遇到过这个吗?有什么建议吗?下面是完成

我是一名新的Excel 2013 vba程序员。我已经编写了代码来循环遍历文件夹中的每个文件,打开它,复制单元格,然后粘贴到一个新文件,向下递增一行,然后对文件夹中的每个文件执行此操作

在循环到下一个文件之前,关闭上一个文件。文件夹中大约有120个文件。这最终是在单个文件中创建文件夹中数据的索引

当我“单步执行”时,它似乎运行良好,但如果我只是F5它运行的宏一段时间,我看到它运行良好,然后在部分过程中崩溃Excel“Excel已停止工作…”它只是关闭

你以前遇到过这个吗?有什么建议吗?下面是完成此工作的代码子集:

Sub WorkHorse()
    ' Application.DisplayAlerts = False 'large amount of data in clipboard, do you want to keep..." message_ *MUST TURN BACK ON SEE BELOW!!

    ChDir "R:\ISO\Sticks\307M"
    myFile = Dir("*.xlsx")


    Do Until myFile = ""
        Workbooks.Open Filename:=myFile
        If Range("A3") = "" Then
            Range("A2").Select
            Range(Selection, Selection.End(xlToRight)).Select
        End If
        If Range("A3") <> "" Then
            Range("A2").Select
            Range(Selection, Selection.End(xlToRight)).Select
            Range(Selection, Selection.End(xlDown)).Select
        End If
        Selection.Copy
        Windows("Test for Possanza Aug 2015.xlsm").Activate
        ActiveSheet.Paste
        Range("A1").Select
        ActiveSheet.Range("A1").Copy
        Selection.End(xlDown).Select
        ActiveCell.Offset(1, 0).Range("a1").Select
        Windows(myFile).Close
        myFile = Dir
    Loop

    ' Application.DisplayAlerts = True 'this re-enables Display Alerts in MSOffice. *CRITICAL TO TURN BACK ON!

End Sub

可以是多个选择,也可以是正在选择的范围

像这样的东西怎么样,这样你就不必使用它了

Dim wb As Workbook, ws As Worksheet
Dim rng2 As Range
Dim Crng As Range


Set wb = Workbooks("Test for Possanza Aug 2015.xlsm")
Set ws = wb.Sheets("Sheet1")    'change desired sheet

'other code


Do Until myFile = ""
    Workbooks.Open Filename:=myFile
    Set rng2 = Range("A2")
    If rng2 = "" Then
        Set Crng = Range(rng2, rng2.End(xlToRight))
    Else
        r = Cells(Rows.Count, "A").End(xlUp).Row
        c = Cells(2, Columns.Count).End(xlToRight).Column
        Set Crng = Range(Cells(2, 1), Cells(r, c))
    End If

    Crng.Copy ws.Cells(ws.Rows.Count, "A").End(xlUp).Offset(1)


    Windows(myFile).Close
    myFile = Dir
Loop
可能的用途

myfile.close true

那么你就不必担心“显示警报”了,不过你必须测试它。

避免使用
Select
:修复
Set Crng=Range(单元格(2,1),单元格(r,c))
大家好,谢谢大家的帮助。我最终遵循了DaveXcel代码,但发现了一个“选择当前区域”函数,它似乎大大简化了代码。它只有一个例外——我不知道如何消除标题行。另外,我也不明白为什么一行的语法(因为我找到了解决方法,所以我把它注释掉了)不起作用。只是想知道将来的参考。如何将我的新代码粘贴到此字符串中,它会告诉我此注释框中的字符已用完?您可以编辑原始问题并在其中添加代码。
myfile.close true