Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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
Vba 将一系列单元格的Xls转换为Csv_Vba_Excel_Csv_Vbscript - Fatal编程技术网

Vba 将一系列单元格的Xls转换为Csv

Vba 将一系列单元格的Xls转换为Csv,vba,excel,csv,vbscript,Vba,Excel,Csv,Vbscript,我有一个VBA宏,可以将文件夹中的所有.xls文件转换为.csv文件,但还有一些额外的要求需要完成 我必须选择一系列列(如从a到AQ和所有行)并将它们保存到.CSV文件中,我尝试了宏录制,但没有帮助 Sub ConvertXLStoCSVNoRules(mySourcePath) Set MyObject = New Scripting.FileSystemObject Set strInputFolder = MyObject.GetFolder(mySourcePath) 'Set strO

我有一个VBA宏,可以将文件夹中的所有.xls文件转换为.csv文件,但还有一些额外的要求需要完成

我必须选择一系列列(如从a到AQ和所有行)并将它们保存到.CSV文件中,我尝试了宏录制,但没有帮助

Sub ConvertXLStoCSVNoRules(mySourcePath)
Set MyObject = New Scripting.FileSystemObject
Set strInputFolder = MyObject.GetFolder(mySourcePath)
'Set strOutputFolder = MyObject.GetFolder(myKeywordPath)
'Call DelFolder
strInputFolder = strInputFolder & "\"
MkDir (ThisWorkbook.Path & "\Sales")
MkDir (ThisWorkbook.Path & "\Group")
strOutputFolderGroup = ThisWorkbook.Path & "\Group\"
strOutputFolderSales = ThisWorkbook.Path & "\Sales\"
strXLSFile = Dir(strInputFolder & "*.xls*")
counter = 0
row = 24
Worksheets("Main").Cells(row, 1).Value = "Files processed at " & Now
row = row + 1
On Error Resume Next
Do While strXLSFile <> ""
counter = counter + 1
row = row + 1

If InStr(1, strXLSFile, "Sales") <> 0 Then
    'strCSVFile contains Sales Then
    'strCSVFile = Left(strXLSFile, InStrRev(strXLSFile, ".")) & "csv"
    On Error Resume Next
    strCSVFile = Left(strXLSFile, 4) & " Sales" & ".csv"

    'Add into the first sheet for recording purpose
    Worksheets("Main").Cells(row, 1).Value = strXLSFile

    Workbooks.OpenText strInputFolder & strXLSFile
    Range("A1:AQ1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Workbooks.Add
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveWorkbook.SaveAs strOutputFolderSales & strCSVFile, xlCSV, CreateBackup:=False
    ActiveWindow.Close
    Application.DisplayAlerts = False
    ActiveWorkbook.Close False
    strXLSFile = Dir

ElseIf InStr(1, strXLSFile, "Group") <> 0 Then

    strCSVFile = Left(strXLSFile, 4) & " Group" & ".csv"

    'Add into the first sheet for recording purpose
    Worksheets("Main").Cells(row, 1).Value = strXLSFile

    Workbooks.OpenText strInputFolder & strXLSFile
    Range("A1:AQ1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Workbooks.Add
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveWorkbook.SaveAs strOutputFolderSales & strCSVFile, xlCSV, CreateBackup:=False
    ActiveWindow.Close
    Application.DisplayAlerts = False
    ActiveWorkbook.Close False
    strXLSFile = Dir

Else

    Worksheets("Main").Cells(row, 1).Value = strXLSFile & " Not Processed"

End If
Loop
 'MsgBox ("Files completed " & counter)
 row = row + 1
Worksheets("Main").Cells(row, 1).Value = "Files completed " & counter & " at " & Now
End Sub
子转换器xlstocsvnorules(mySourcePath)
设置MyObject=New Scripting.FileSystemObject
设置strInputFolder=MyObject.GetFolder(mySourcePath)
'Set strOutputFolder=MyObject.GetFolder(myKeywordPath)
'调用文件夹
strInputFolder=strInputFolder&“\”
MkDir(thishworkbook.Path&“\Sales”)
MkDir(thishworkbook.Path&“\Group”)
strOutputFolderGroup=此工作簿。路径&“\Group\”
strOutputFolderSales=此工作簿。路径&“\Sales”
strXLSFile=Dir(strInputFolder&“*.xls*”)
计数器=0
行=24
工作表(“主”).Cells(第1行).Value=“文件处理时间”&Now
行=行+1
出错时继续下一步
当strXLSFile“”时执行
计数器=计数器+1
行=行+1
如果InStr(1,strXLSFile,“Sales”)为0,则
'strCSVFile则包含销售
'strCSVFile=Left(strXLSFile,InStrRev(strXLSFile,“.”)和'csv'
出错时继续下一步
strCSVFile=Left(strXLSFile,4)和“Sales”和“.csv”
'添加到第一页以供记录
工作表(“主”)。单元格(第1行)。值=strXLSFile
Workbooks.OpenText strInputFolder和strXLSFile
范围(“A1:AQ1”)。选择
范围(选择,选择。结束(xlDown))。选择
选择,复制
工作手册。添加
活动表。粘贴
Application.CutCopyMode=False
ActiveWorkbook.SaveAs strOutputFolderSales&strCSVFile,xlCSV,CreateBackup:=False
活动窗口,关闭
Application.DisplayAlerts=False
ActiveWorkbook.Close为False
strXLSFile=Dir
ElseIf InStr(1,strXLSFile,“组”)0然后
strCSVFile=Left(strXLSFile,4)和“Group”和“.csv”
'添加到第一页以供记录
工作表(“主”)。单元格(第1行)。值=strXLSFile
Workbooks.OpenText strInputFolder和strXLSFile
范围(“A1:AQ1”)。选择
范围(选择,选择。结束(xlDown))。选择
选择,复制
工作手册。添加
活动表。粘贴
Application.CutCopyMode=False
ActiveWorkbook.SaveAs strOutputFolderSales&strCSVFile,xlCSV,CreateBackup:=False
活动窗口,关闭
Application.DisplayAlerts=False
ActiveWorkbook.Close为False
strXLSFile=Dir
其他的
工作表(“主”)。单元格(第1行)。值=strXLSFile&“未处理”
如果结束
环
'MsgBox(“文件已完成”&计数器)
行=行+1
工作表(“主”).Cells(第1行).Value=“文件已完成”&计数器和“在”&现在
端接头
执行代码时没有错误。数据不会从excel文件复制到.csv文件。为复制而打开的Excel文件未关闭

任何解决方案都会有帮助

评论:

我有完整的代码块,现在包含xls文件的文件夹在转换为csv后将根据名称(如sales和group)进行隔离,但转换后的csv文件为1kb,除少量垃圾外没有任何数据


提前感谢

您当前选择的是最后一行,而不是所有行。你可以写
范围(“A1:AQ”和lnDyRw)。选择将选择A1和AQ lnDyRw之间的所有内容

或选择可以写入的列范围:
范围(“A:AQ”)。选择

现在你应该在新工作簿的某个地方有最后一行了