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