从 xlsm 复制并粘贴到 csv

时间:2021-07-31 22:09:43

标签: excel vba csv copy-paste xlsm

我正在尝试从启用宏的工作簿复制到 .csv 文件,但由于某种原因,粘贴部分仅将所有内容粘贴到 A 列中。 VBA 编码如下。请帮我弄清楚为什么它不会在复制时粘贴到相同的单元格中。当我逐步运行宏时,它运行良好,但是当它自己运行时,它会将所有数据粘贴到 A 列中。

Sheets("Input").Select

Range("A1").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy
Workbooks.Open Filename:="C:\temp\MyFile.csv"
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Range("A1").Select
Application.CutCopyMode = False

3 个答案:

答案 0 :(得分:1)

将工作表导出为 CSV

另一种选择

  • 如果您尝试选择的是工作表中唯一的数据,您可以只copy the worksheet,这会创建一个仅包含该工作表的新工作簿,并最终将其保存为 CSV 文件。
Option Explicit

Sub ExportWorksheetToCSVtest()
    Const FilePath As String = "C:\temp\MyFile.csv"
    Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("Input")
    ExportWorksheetToCSV ws, FilePath
End Sub

Sub ExportWorksheetToCSV( _
        ByVal ws As Worksheet, _
        ByVal FilePath As String)
    If ws Is Nothing Then Exit Sub
    
    ws.Copy
    With ActiveWorkbook
        Application.DisplayAlerts = False
        .SaveAs FilePath, xlCSV
        Application.DisplayAlerts = True
        .Close SaveChanges:=False
    End With
End Sub
    

答案 1 :(得分:0)

更新了改进的答案。

不确定您的工作表做错了什么,但这会起作用。不要使用选择。

Dim CopyRange As Range, copySheet As Worksheet
Set copySheet = ActiveSheet

Set CopyRange = Intersect(Range("A:C"), copySheet.UsedRange)

Dim theValues()

theValues = CopyRange.Value

Workbooks.Open Filename:="C:\temp\MyFile.csv"
Dim theCSV As Workbook
    Set theCSV = ActiveWorkbook
theCSV.Sheets(1).Range("A1").Resize(UBound(theValues), UBound(theValues, 2)) = theValues

答案 2 :(得分:0)

@PGSystemTester:这段代码做了同样的事情。所有内容仅粘贴在 A 列中。

@VBasic2008:这有效,但也出现了意外错误。

我所做的工作基本上是运行相同的宏两次。我不确定为什么会这样。但宏第一次运行时,它会粘贴 A 列中的所有内容。再次运行时,它会正确粘贴。所以我只是将宏的编码加倍,现在它工作正常。

感谢您的帮助!