2016-11-10 127 views
1

我在将复制的范围粘贴到目标工作簿时遇到问题。我有一个.csv文件,它有一个工作表,但每次导出.csv时,工作表名称都会有所不同。有人可以看看我的代码,并让我知道,如果你看到任何突出的东西,将会把事情搞砸。打开CSV,将粘贴范围复制到工作簿

代码运行到Target.Copy(选择并复制目标范围)。但是,我必须将这些值粘贴到目标工作簿的代码似乎不能正常工作。

我有时会收到此错误信息: enter image description here

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 

UPDATE2:

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 

回答

2

考虑使用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 
+0

谢谢,但唯一发生的事情是我的h eader将一列从A3:D3移至B3:E3。 – DigitalSea

+0

不太理解。没有任何数据导入电子表格?请张贴一些内容来重现。您可以在'Destination' arg中指定数据导入的左上角,这里是'Cells(1,1)'。好奇听到数据从'B3'开始。您可能在csv中有空行和列。请张贴样本。 – Parfait

+0

上面的update2代码有效。我遇到的唯一问题就是在正确的目的地开始。我需要它使用AdvFilter工作表上的数据在最后一行下面开始一行或两行。感谢您指点我正确的方向。导入从A1开始,消除了我的标题。 – DigitalSea

相关问题