Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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
File Vba从文件夹中打开不带扩展名的文件,并另存为其他格式_File_Vba_Excel_Type Conversion - Fatal编程技术网

File Vba从文件夹中打开不带扩展名的文件,并另存为其他格式

File Vba从文件夹中打开不带扩展名的文件,并另存为其他格式,file,vba,excel,type-conversion,File,Vba,Excel,Type Conversion,我正在尝试编写一个宏来打开文件夹中的每个文件,然后另存为xlsx文件。我正在处理的文件没有文件扩展名,数据以制表符分隔,可以手动打开。我有这个代码来打开文件夹中的每个文件,但是我无法让它打开没有文件扩展名的文件 Sub Open_All_Files() Dim oWbk As Workbook Dim sFil As String Dim sPath As String sPath = "E:\Macro" 'location of files ChDir sPath sFil = Dir("

我正在尝试编写一个宏来打开文件夹中的每个文件,然后另存为xlsx文件。我正在处理的文件没有文件扩展名,数据以制表符分隔,可以手动打开。我有这个代码来打开文件夹中的每个文件,但是我无法让它打开没有文件扩展名的文件

Sub Open_All_Files()
Dim oWbk As Workbook
Dim sFil As String
Dim sPath As String

sPath = "E:\Macro" 'location of files
ChDir sPath
sFil = Dir("*.xlsx") 'change or add formats
Do While sFil <> "" 
Set oWbk = Workbooks.Open(sPath & "\" & sFil) 'opens the file

'Code to save as different file extension would go here

oWbk.Close True 'close the workbook, saving changes
sFil = Dir
Loop ' End of LOOP
End Sub
子打开所有文件()
将oWbk设置为工作簿
将sFil设置为字符串
像细绳一样暗淡
sPath=“E:\Macro”'文件的位置
克迪尔斯帕斯
sFil=Dir(“*.xlsx”)”更改或添加格式
当sFil“”时执行
Set oWbk=Workbooks.Open(sPath&“\”&sFil)”打开文件
'保存为不同文件扩展名的代码将出现在此处
oWbk.Close True“关闭工作簿,保存更改”
sFil=Dir
循环的结束
端接头
我也不知道如何将每个文件保存为xlsx文件

我是vba的新手,因此非常感谢您的帮助。
谢谢

您当前的代码只查找扩展名为.xlsx的文件。试试
Dir('*')

如果您只是重命名文件,那么我不会尝试打开它们。我会使用
FileCopy

FileCopy source, destination
其中,源和目标都是字符串。例如,以下内容适用于我(在Windows XP上):

然后可以使用
Kill
删除旧文件

Kill pathname

您当前的代码只查找扩展名为.xlsx的文件。试试
Dir('*')

如果您只是重命名文件,那么我不会尝试打开它们。我会使用
FileCopy

FileCopy source, destination
其中,源和目标都是字符串。例如,以下内容适用于我(在Windows XP上):

然后可以使用
Kill
删除旧文件

Kill pathname

我知道这是您正在寻找的代码:

Sub Open_All_Files()
   Dim oWbk As Workbook
   Dim sFil As String
   Dim sPath As String

   sPath = "E:\Macro" 'location of files
   ChDrive "E" '-> if E is different than the current drive (if you didn't change it before, it is the drive where Office is installed)
   ChDir sPath
   sFil = Dir("*.*") 'change or add formats
   Do While (sFil <> ""  And InStr(sFil, ".") = 0)
      NewFileName = sPath & "\" & sFil & ".xlsx"

      On Error Resume Next
      Name sFil As NewFileName 'Add extension to file

      Set oWbk = Workbooks.Open(NewFileName) 'Open file as XLSX

      'Do anything with the workbook

      oWbk.Close True 'close the workbook, saving changes

      sFil = Dir("*.*")
   Loop ' End of LOOP
End Sub
子打开所有文件()
将oWbk设置为工作簿
将sFil设置为字符串
像细绳一样暗淡
sPath=“E:\Macro”'文件的位置
ChDrive“E”->如果E与当前驱动器不同(如果您以前没有更改它,则它是安装Office的驱动器)
克迪尔斯帕斯
sFil=Dir(“*.”)更改或添加格式
执行时(sFil“”和仪表(sFil“”)=0)
NewFileName=sPath&“\”&sFil&“.xlsx”
出错时继续下一步
将sFil命名为NewFileName“将扩展名添加到文件”
设置oWbk=Workbooks.Open(NewFileName)'将文件打开为XLSX
'对工作簿执行任何操作
oWbk.Close True“关闭工作簿,保存更改”
sFil=Dir(“***”)
循环的结束
端接头

我知道这是您正在寻找的代码:

Sub Open_All_Files()
   Dim oWbk As Workbook
   Dim sFil As String
   Dim sPath As String

   sPath = "E:\Macro" 'location of files
   ChDrive "E" '-> if E is different than the current drive (if you didn't change it before, it is the drive where Office is installed)
   ChDir sPath
   sFil = Dir("*.*") 'change or add formats
   Do While (sFil <> ""  And InStr(sFil, ".") = 0)
      NewFileName = sPath & "\" & sFil & ".xlsx"

      On Error Resume Next
      Name sFil As NewFileName 'Add extension to file

      Set oWbk = Workbooks.Open(NewFileName) 'Open file as XLSX

      'Do anything with the workbook

      oWbk.Close True 'close the workbook, saving changes

      sFil = Dir("*.*")
   Loop ' End of LOOP
End Sub
子打开所有文件()
将oWbk设置为工作簿
将sFil设置为字符串
像细绳一样暗淡
sPath=“E:\Macro”'文件的位置
ChDrive“E”->如果E与当前驱动器不同(如果您以前没有更改它,则它是安装Office的驱动器)
克迪尔斯帕斯
sFil=Dir(“*.”)更改或添加格式
执行时(sFil“”和仪表(sFil“”)=0)
NewFileName=sPath&“\”&sFil&“.xlsx”
出错时继续下一步
将sFil命名为NewFileName“将扩展名添加到文件”
设置oWbk=Workbooks.Open(NewFileName)'将文件打开为XLSX
'对工作簿执行任何操作
oWbk.Close True“关闭工作簿,保存更改”
sFil=Dir(“***”)
循环的结束
端接头

这确实会创建一个具有正确名称的新文件,但excel会抛出错误“excel无法打开该文件,因为文件格式或文件扩展名无效”。我想这可能是因为当我手动打开文件时,我必须通过几个对话框告诉excel数据是如何分隔的。也许我需要打开每个文件才能将其保存为新格式?这确实会创建一个具有正确名称的新文件,但excel会抛出错误“excel无法打开文件,因为文件格式或文件扩展名无效”。我想这可能是因为当我手动打开文件时,我必须通过几个对话框告诉excel数据是如何分隔的。也许我需要打开每个文件才能将它们保存为新格式?我已经尝试过了,但不起作用。当我尝试使用它将.xlsx文件更改为.xls时,它不起作用,所以我不认为这只是没有扩展名的文件的问题。你说的“不起作用”是什么意思?这个代码应该很好。你能告诉我你得到了什么错误或者你是如何准确地使用它的吗?我知道所有没有扩展名的文件都在文件夹“E:\Macro”中。请您一步一步地执行,查看每个变量的值,并告诉我这些值是什么?请记住,它不查找xls文件,只查找没有扩展名的文件。如果要查找xls文件,应将Dir(“.”)转换为Dir(*.xls),并删除and InStr(sFil,“.”)=0位。让我们一步一步来避免任何误解。上面的代码查找文件夹“E:\Macro”中所有没有扩展名的文件;对于它们中的每一个,它都会添加扩展名(xlsx)并打开它们。如果这正是您想要的,请在您的过程中更加详细,因为这段代码很好,您应该做错事。如果这不完全是你想要的,请告诉我它是什么,我会相应地修改代码。当我运行宏时,什么都没有发生,没有扩展名的文件没有更改,也没有错误消息。谢谢你的帮助。我试过了,但不起作用。当我尝试使用它将.xlsx文件更改为.xls时,它不起作用,所以我不认为这只是没有扩展名的文件的问题。你说的“不起作用”是什么意思?这个代码应该很好。你能告诉我你得到了什么错误或者你是如何准确地使用它的吗?我知道所有没有扩展名的文件都在文件夹“E:\Macro”中。你能一步一步地执行吗,看看e所取的值