【问题标题】:Macro saved as CSV stops Macro from working保存为 CSV 的宏会阻止宏工作
【发布时间】:2020-12-07 13:13:40
【问题描述】:

我正在开发一个宏,它可以在应用过滤器的同时从某个区域生成多个 CSV 文件。有两个问题。

  1. 工作簿将保存为从其名称检索的文件格式(单元格 B15 和单词“周”)
  2. 在单元格 B15 为空之前,我无法找到循环此宏的方法。

有人可以帮忙吗?提前致谢。

错误格式示例:

Sub CSVMaker()
'
' CSVMaker Macro
'

'
    ActiveSheet.Range("$A$17:$M$240000").AutoFilter Field:=2, Criteria1:="<>"
    Range("A18:B18").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Sheets.Add.Name = Range("A10").Value & "." & Range("A7").Value & "." & "Week" & Range("B15").Value
        ActiveSheet.Paste
    Application.CutCopyMode = False
    Application.DisplayAlerts = False
    ActiveSheet.Copy
    ActiveWorkbook.SaveAs Filename:=ActiveSheet.Name, FileFormat:=xlCSV, CreateBackup:=True
    ActiveWorkbook.Close
    Application.DisplayAlerts = True
    Sheets("Input").Select
    Columns("B:B").Select
    Range("B6").Activate
    Selection.Delete Shift:=xlToLeft
End Sub

【问题讨论】:

  • 那么您的文件名可能应该有一个.csv 文件扩展名Filename:=ActiveSheet.Name &amp; ".csv" • 请显示您尝试循环的内容?此外,还不清楚您在每个循环中到底想做什么。 • 请阅读How to avoid using Select in Excel VBAWhy is “Can someone help me?” not an actual question? 以改进您的问题。
  • 您好,我发现了错误。我已经去掉了名字(&“.”&)之间的点。这对我有用。我尝试循环整个序列,直到单元格 B15 为空。
  • @嗯,这句话解释得不够充分,而且你已经写了。您需要提供更多信息并相应地edit您的问题。请参阅minimal reproducible example 以了解一个好的示例应该是什么样子。阅读How to Ask 也可能有所帮助。请改进您的问题并提供尽可能多的信息。请记住,除了您告诉我们的内容外,我们对您的项目一无所知。屏幕截图和好的示例也可能有所帮助。
  • 到目前为止,您没有循环来继续该过程。 CSV 文件是从同一个工作表创建的吗?你有可以附上的例子吗?
  • 您好,我添加的循环函数很简单:Do Until IsEmpty("B15") (...) Loop 由于格式错误,它不起作用。随着这个问题的解决,循环的问题也得到了解决。感谢大家的帮助!

标签: excel vba loops export-to-csv


【解决方案1】:

所以最后的答案是文件名需要一个正确的扩展名,比如Filename:=ActiveSheet.Name &amp; ".csv"

我建议避免使用.Select 并执行以下操作:

Option Explicit

Public Sub CSVMaker()
    Dim ws As Worksheet
    Set ws = ActiveSheet 'better ThisWorkbook.Worksheets("your-sheet-name")

    ws.Range("$A$17:$M$240000").AutoFilter Field:=2, Criteria1:="<>"

    ws.Range("A18:B18", ws.Range("A18:B18").End(xlDown).End(xlDown)).Copy

    Dim SheetName As String
    SheetName = ws.Range("A10").Value & "." & Range("A7").Value & "." & "Week" & Range("B15").Value

    ThisWorkbook.Sheets.Add.Name = SheetName
    ThisWorkbook.Sheets(SheetName).Paste

    Application.CutCopyMode = False
    Application.DisplayAlerts = False

    ThisWorkbook.Sheets(SheetName).Copy
    ActiveWorkbook.SaveAs Filename:=SheetName & ".csv", FileFormat:=xlCSV, CreateBackup:=True
    ActiveWorkbook.Close
    Application.DisplayAlerts = True

    ThisWorkbook.Sheets("Input").Columns("B:B").Delete Shift:=xlToLeft
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多