Excel Can';t工作簿。是否打开XLS文件类型?

Excel Can';t工作簿。是否打开XLS文件类型?,excel,vba,Excel,Vba,在这一条上卡住了。我正在创建一个2016 Excel宏,该宏(希望)将循环遍历文件夹中的所有.xls文件并进行一些格式更改,但是my workbook.open不会打开.xls文件。好像它只是扫了一眼?我已经检查了信任中心中的所有框,那么为什么不在我的VBA代码中打开.xls文件呢?还有什么我可以试试的吗?如果文件是.xlsx格式,但由于某种原因不是.xls格式,则该方法有效。代码的相关部分如下。谢谢 更新 按照要求,我将尝试在这里获得更多的技术。我在这里添加了一个完整的脚本(没有任何格式化的东

在这一条上卡住了。我正在创建一个2016 Excel宏,该宏(希望)将循环遍历文件夹中的所有.xls文件并进行一些格式更改,但是my workbook.open不会打开.xls文件。好像它只是扫了一眼?我已经检查了信任中心中的所有框,那么为什么不在我的VBA代码中打开.xls文件呢?还有什么我可以试试的吗?如果文件是.xlsx格式,但由于某种原因不是.xls格式,则该方法有效。代码的相关部分如下。谢谢

更新

按照要求,我将尝试在这里获得更多的技术。我在这里添加了一个完整的脚本(没有任何格式化的东西),以便有人与我一起解决问题

值得注意的是:

尽管我将其设置为仅在循环中查找
.xls
文件类型,但出于某种原因,它执行当前宏
.xlsm
工作簿中的所有格式化命令,而它不应该执行这些命令。因此,作为一种解决方法,我还包括了这一行

' Start a loop for all .xlsx files in the folder (defined in the last step)
Do While Filename <> "" And Filename <> "Bid_Report_Macro.xlsm" ' This workbook's name

也许您的Do循环应该更像这样:

' Start a loop for all .xlsx files in the folder (defined in the last step)
Do While Filename <> ""
    If Filename <> ThisWorkbook.Name Then 'This workbook's name
        ' Open a workbook in the folderPath
        Set wb = Workbooks.Open(folderPath & Filename, CorruptLoad:=xlRepairFile)
        ' Always start on the first worksheet of the opened workbook
        wb.Worksheets(1).Activate
    End If
    'get the next file in the folder which matches the Directory search
    Filename = Dir
Loop
”为文件夹中的所有.xlsx文件启动循环(在上一步中定义)
文件名“”时执行此操作
如果文件名为ThisWorkbook.Name,则为“此工作簿的名称”
'在folderPath中打开工作簿
设置wb=Workbooks.Open(folderPath&Filename,CorruptLoad:=xlRepairFile)
'始终从打开工作簿的第一个工作表开始
wb.工作表(1).激活
如果结束
'获取文件夹中与目录搜索匹配的下一个文件
Filename=Dir
环

也许您的Do循环应该更像这样:

' Start a loop for all .xlsx files in the folder (defined in the last step)
Do While Filename <> ""
    If Filename <> ThisWorkbook.Name Then 'This workbook's name
        ' Open a workbook in the folderPath
        Set wb = Workbooks.Open(folderPath & Filename, CorruptLoad:=xlRepairFile)
        ' Always start on the first worksheet of the opened workbook
        wb.Worksheets(1).Activate
    End If
    'get the next file in the folder which matches the Directory search
    Filename = Dir
Loop
”为文件夹中的所有.xlsx文件启动循环(在上一步中定义)
文件名“”时执行此操作
如果文件名为ThisWorkbook.Name,则为“此工作簿的名称”
'在folderPath中打开工作簿
设置wb=Workbooks.Open(folderPath&Filename,CorruptLoad:=xlRepairFile)
'始终从打开工作簿的第一个工作表开始
wb.工作表(1).激活
如果结束
'获取文件夹中与目录搜索匹配的下一个文件
Filename=Dir
环

我想出来了。虽然这不是一个很好的解决方案,但我通过实际定义我希望使用的.xls文件的完整文件名来实现它。这不是很好,因为它无法识别文件夹中的所有.xls文件,从而使循环变得无用,但现在它可以工作。这是工作代码。总有一天我会尝试为它建立一个工作循环。谢谢

' Run it in the background.
Application.ScreenUpdating = False

' Directory of this macro that has the other .xls files
folderPath = Application.ActiveWorkbook.Path

' A conditional for finding the directory with proper structure
If Right(folderPath, 1) <> "\" Then folderPath = folderPath & "\"

' Do this for each xls workbooks in the folder
Filename = Dir(folderPath & "translate_quote_42666432_v6_all.xls")

' Start a loop for all .xlsx files in the folder (defined in the last step)
Do While Filename <> ""

    ' Open a workbook in the folderPath
    Set wb = Application.Workbooks.Open(folderPath & Filename)

    ' Always start on the first worksheet of the opened workbook
    wb.Worksheets(1).Activate
”在后台运行它。
Application.ScreenUpdating=False
'包含其他.xls文件的此宏的目录
folderPath=Application.active工作簿.Path
'查找具有适当结构的目录的条件
如果正确(folderPath,1)“\”则folderPath=folderPath&“\”
'对文件夹中的每个xls工作簿执行此操作
Filename=Dir(folderPath和“translate\u quote\u 42666432\u v6\u all.xls”)
'为文件夹中的所有.xlsx文件启动循环(在上一步中定义)
文件名“”时执行此操作
'在folderPath中打开工作簿
设置wb=Application.Workbooks.Open(folderPath和Filename)
'始终从打开工作簿的第一个工作表开始
wb.工作表(1).激活

我想出来了。虽然这不是一个很好的解决方案,但我通过实际定义我希望使用的.xls文件的完整文件名来实现它。这不是很好,因为它无法识别文件夹中的所有.xls文件,从而使循环变得无用,但现在它可以工作。这是工作代码。总有一天我会尝试为它建立一个工作循环。谢谢

' Run it in the background.
Application.ScreenUpdating = False

' Directory of this macro that has the other .xls files
folderPath = Application.ActiveWorkbook.Path

' A conditional for finding the directory with proper structure
If Right(folderPath, 1) <> "\" Then folderPath = folderPath & "\"

' Do this for each xls workbooks in the folder
Filename = Dir(folderPath & "translate_quote_42666432_v6_all.xls")

' Start a loop for all .xlsx files in the folder (defined in the last step)
Do While Filename <> ""

    ' Open a workbook in the folderPath
    Set wb = Application.Workbooks.Open(folderPath & Filename)

    ' Always start on the first worksheet of the opened workbook
    wb.Worksheets(1).Activate
”在后台运行它。
Application.ScreenUpdating=False
'包含其他.xls文件的此宏的目录
folderPath=Application.active工作簿.Path
'查找具有适当结构的目录的条件
如果正确(folderPath,1)“\”则folderPath=folderPath&“\”
'对文件夹中的每个xls工作簿执行此操作
Filename=Dir(folderPath和“translate\u quote\u 42666432\u v6\u all.xls”)
'为文件夹中的所有.xlsx文件启动循环(在上一步中定义)
文件名“”时执行此操作
'在folderPath中打开工作簿
设置wb=Application.Workbooks.Open(folderPath和Filename)
'始终从打开工作簿的第一个工作表开始
wb.工作表(1).激活

旁注-如果您只看
.xls
,为什么要使用
文件名“Bid\u Report\u Macro.xlsm”
?@BigBen我把它放在那里了,因为我最初使用了“(star).xls(star)”作为故障排除的一部分,并且不希望在循环中考虑已打开的带有宏按钮的工作簿。@Matt Wilson我已经尝试了你的代码,效果很好。我使用Excel 2016并使用msgBox读取单元格(1)。在.xls文件的单元格(1)中,我编写了测试。在代码的最后一行,我添加了这个代码MsgBox wb.Worksheets(1.Cells(1.Value),得到了“test”。在这个链接中有一个例子。我希望这对你有所帮助。我实际上没有看到一个“正确”的循环来遍历文件夹中的文件。@Ferdinando谢谢,但这对我来说不起作用。如果它尝试循环使用.xlsx文件,而不是.xls文件,它将起作用。我认为问题是因为.xls文件是旧的93-97格式,或者不管年份是什么。我在一台工作机器上运行这个,所以我的想法是,它只是自动选择不打开.xls文件作为信任中心的一部分,但就像我说的,我检查了那个部分,仍然什么都没有。任何其他想法都会很棒。ThanksSide note-如果您只查看
.xls
,为什么要使用
文件名“Bid\u Report\u Macro.xlsm”
?@BigBen我把它放在那里,因为我最初使用了“(star).xls(star)”作为故障排除的一部分,并且不希望在循环中考虑已打开的带有宏按钮的工作簿。@Matt Wilson我已经尝试了你的代码,效果很好。我使用Excel 2016并使用msgBox读取单元格(1)。在.xls文件I的单元格(1)中