如果从Excel中打开文件,则代码仅在Excel 2007上运行

时间:2015-09-24 14:51:47

标签: excel-vba excel-2007 excel-2013 vba excel

我有一些相对简单的代码循环遍历文件夹中的多个文件,打开每个文件并将一系列数据复制到新工作表中。我使用Excel 2013编写了代码。有些用户在他们的盒子上有2007。如果2007用户从Excel中打开文件(即文件打开,并导航到该目录),它运行正常。如果2007用户从Windows资源管理器中打开文件,则所有宏都会运行,但我在循环中使用的文件名变量“myFile”始终为EMPTY。它就像它不会导航到目录。我没有得到任何错误,它只是执行代码并直接循环结束(当“myFile”为空时表示停止) - 然后继续下一个宏。使用Excel 2013,程序运行正常,无论它如何打开。我认为我的答案可能包含在这个帖子中:Excel Workbook Open Event macro doesn't always run但是Q& A似乎并不直接适用于我的问题,因为宏实际运行。它似乎只是导航到文件位置不起作用。以下是运行循环的代码片段:

    Dim myfile As String
Dim wb As Workbook
Dim ws As Worksheet
Dim DataBlock As Range

'Optimize Macro Speed
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual

Set wb = Workbooks("ComboFile.xlsm")
Set ws = wb.Sheets("Sheet1")    'change desired sheet

ChDir "r:\BSI\Sys9000"
myfile = Dir("*.xlsx")

Do Until myfile = ""
    Workbooks.Open Filename:=myfile
    Set DataBlock = Range("A2").CurrentRegion
    DataBlock.Copy ws.Cells(ws.Rows.Count, "A").End(xlUp).Offset(1)
    Windows(myfile).Close
    myfile = Dir
Loop

'Reset Macro Optimization Settings
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    Application.Calculation = xlCalculationAutomatic

欢迎任何建议。谢谢。

1 个答案:

答案 0 :(得分:1)

我建议你更换一下:

ChDir "r:\BSI\Sys9000"
myfile = Dir("*.xlsx")

只有这个:

myfile = Dir("r:\BSI\Sys9000\*.xlsx")

ChDir无法更改驱动器,因此如果当前目录不在R驱动器上,则代码将失败。

您还需要更改此内容:

Workbooks.Open Filename:=myfile

包含路径:

Workbooks.Open Filename:="r:\BSI\Sys9000\" & myfile