【问题标题】:Open CSV, Copy Paste Range to Workbook打开 CSV,将粘贴范围复制到工作簿
【发布时间】:2016-11-10 23:43:57
【问题描述】:

我无法将复制的范围粘贴到目标工作簿中。我有一个 .csv 文件,该文件将包含一个工作表,但每次导出 .csv 时工作表名称都会不同。有人可以查看我的代码,如果你看到任何突出的东西会搞砸事情,请告诉我。

代码一直有效到Target.Copy(选择并复制了目标范围)。但是我必须将值粘贴到目标工作簿的代码似乎不起作用。

我有时会收到以下错误消息:

Sub Opencsv()
Dim FilesToOpen
Dim wkbTemp As Workbook, wkbDest As Workbook
Dim sh As Worksheet
Dim Last As Long
Dim Target As Range
Dim LastRow As Long, LastCol As Long

FilesToOpen = Application.GetOpenFilename(Title:="Text Files to Open")
On Error Resume Next
Last = fLastRow(wkbDest)
Set wkbTemp = Workbooks.Open(filename:=FilesToOpen, Format:=4)
Set wkbDest = ThisWorkbook.Worksheets("AdvFilter")


With wkbTemp.Sheets(1)
    LastRow = .Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    LastCol = .Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
    Set Target = .Range(.Cells(1, 1), .Cells(LastRow, LastCol))
End With

Target.Copy

wkbDest.Sheets("AdvFilter").Activate

With wkbDest.Cells(Last + 1, "A")
.PasteSpecial xlPasteValues
.PasteSpecial xlPasteFormats
Application.CutCopyMode = False
End With

wkbTemp.Close
End Sub

'==================
Function fLastRow(sh As Worksheet)
On Error Resume Next
LastRow = sh.Cells.Find(What:="*", _
                        After:=sh.Range("A1"), _
                        Lookat:=xlPart, _
                        LookIn:=xlFormulas, _
                        SearchOrder:=xlByRows, _
                        SearchDirection:=xlPrevious, _
                        MatchCase:=False).Row
On Error GoTo 0
End Function

更新2:

Sub Opencsv2()
    Dim FilesToOpen
    Dim qt As QueryTable
    Dim Last As Long


FilesToOpen = Application.GetOpenFilename(Title:="Text Files to Open")


With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;" & FilesToOpen, Destination:=Cells(Last + 1, "A"))
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 437
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With

For Each qt In ThisWorkbook.Sheets("AdvFilter").QueryTables
       qt.Delete
Next qt
End Sub

【问题讨论】:

    标签: excel vba csv


    【解决方案1】:

    考虑使用QueryTables 导入并避免复制/粘贴到剪贴板:

    Sub Opencsv()
       Dim FilesToOpen
       Dim qt As QueryTable
    
       FilesToOpen = Application.GetOpenFilename(Title:="Text Files to Open")
    
       With ThisWorkbook.Sheets("AdvFilter").QueryTables.Add(Connection:="TEXT;" & FilesToOpen, _
           Destination:=Cells(1, 1))
            .TextFileStartRow = 30
            .TextFileParseType = xlDelimited
            .TextFileConsecutiveDelimiter = False
            .TextFileTabDelimiter = False
            .TextFileSemicolonDelimiter = False
            .TextFileCommaDelimiter = True
            .TextFileSpaceDelimiter = False
            .Refresh BackgroundQuery:=False
       End With
    
       For Each qt In ThisWorkbook.Sheets("AdvFilter").QueryTables
           qt.Delete
       Next qt
    
    End Sub
    

    【讨论】:

    • 谢谢,但唯一发生的事情是我的标题将一列从 A3:D3 移动到 B3:E3。
    • 不太明白。根本没有数据导入电子表格?请发布一些内容以进行复制。您可以在Destination arg 中指定数据导入的左上角,此处为Cells(1,1)。很想知道从B3 开始的数据。 csv 中可能有空行和列。请发布示例。
    • 以上 update2 代码有效。我唯一的问题是在正确的目的地开始。我需要用 AdvFilter 工作表上的数据在最后一行下方开始一两行。感谢您为我指明正确的方向。导入从 A1 开始,这会清除我的标题。
    • 让它工作。 Destination:=Range("A" & Rows.Count).End(xlUp).Offset(3)
    猜你喜欢
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多