2012-06-29 114 views
15

我正在写一个vba代码,它应该删除选定Excel表格上的数据,打开文本文件选择对话框,然后将该文本文件中的数据导入到同样的确切表我已经删除了数据。到目前为止,我只能将文本文件打开到新的工作簿中,但无法将其打开到我从中删除数据的同一张工作表。 这是我带着到目前为止,会感谢您的帮助:vba:将文本文件导入到excel表

Dim Filt As String 
Dim FilterIndex As Integer 
Dim Title As String 
Dim FileName As Variant 

Filt = "Cst Files (*.prn),*.prn" 
Title = "Select a cst File to Import" 
FileName = Application.GetOpenFilename(FileFilter:=Filt, Title:=Title) 

If FileName = False Then 
MsgBox "No File Was Selected" 
Exit Sub 
End If 

With Application.ActiveSheet 
    Cells.Select 
Selection.QueryTable.Delete 
Selection.ClearContents 
End With 

Workbooks.Open FileName 

谢谢!

回答

33

有很多方法可以将文本文件导入当前工作表。这里有三个(包括您正在上面使用该方法)

  1. 使用的QueryTable
  2. 打开文本存储器中的文件,然后写入到当前片,如果需要最后施加文本到列。
  3. 如果你希望你在新的工作簿打开文本文件后,使用您当前正在使用,则该方法,简单地将其复制到使用Cells.Copy

当前工作表使用的QueryTable

这是我录制的一个简单的宏。请修改它以适应您的需求。

Sub Sample() 
    With ActiveSheet.QueryTables.Add(Connection:= _ 
     "TEXT;C:\Sample.txt", Destination:=Range("$A$1") _ 
     ) 
     .Name = "Sample" 
     .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 = True 
     .TextFileSemicolonDelimiter = False 
     .TextFileCommaDelimiter = True 
     .TextFileSpaceDelimiter = False 
     .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1) 
     .TextFileTrailingMinusNumbers = True 
     .Refresh BackgroundQuery:=False 
    End With 
End Sub 

打开内存

Sub Sample() 
    Dim MyData As String, strData() As String 

    Open "C:\Sample.txt" For Binary As #1 
    MyData = Space$(LOF(1)) 
    Get #1, , MyData 
    Close #1 
    strData() = Split(MyData, vbCrLf) 
End Sub 

一旦你的阵列中的数据的文本文件,可以将其导出到当前工作表。

使用您已经使用

Sub Sample() 
    Dim wbI As Workbook, wbO As Workbook 
    Dim wsI As Worksheet 

    Set wbI = ThisWorkbook 
    Set wsI = wbI.Sheets("Sheet1") '<~~ Sheet where you want to import 

    Set wbO = Workbooks.Open("C:\Sample.txt") 

    wbO.Sheets(1).Cells.Copy wsI.Cells 

    wbO.Close SaveChanges:=False 
End Sub 

随访

可以使用Application.GetOpenFilename来选择相关的文件的方法。例如...

Sub Sample() 
    Dim Ret 

    Ret = Application.GetOpenFilename("Prn Files (*.prn), *.prn") 

    If Ret <> False Then 
     With ActiveSheet.QueryTables.Add(Connection:= _ 
     "TEXT;" & Ret, Destination:=Range("$A$1")) 

      '~~> Rest of the code 

     End With 
    End If 
End Sub 
+0

看起来像QueryTable方法是最直接的,但有没有办法给它添加一个对话框,所以我可以选择从不同来源选择文本文件? –

+0

是的。一会儿......更新帖子 –

+0

更新了帖子:)请参阅'FOLLOWUP' –

0

我觉得这里my answer to my own question是你正在尝试做的最简单的办法:

  1. 选择单元格,其中文本从文件的第一行应该是。

  2. 使用Data/Get External Data/From File对话框来选择要导入的文本文件。

  3. 根据需要格式化导入的文本。

  4. 在打开的Import Data对话框中,单击Properties...

  5. 取消选中Prompt for file name on refresh框。

  6. 每当外部文件更改时,请单击“Data/Get External Data/Refresh All”按钮。

注意:就你而言,你可能应该跳过第5步。

+0

但它总是要求您在按刷新时再次选择文件 – Damian

1

后就可以 .REFRESH BackgroundQuery写 .WorkbookConnection.Delete :=假 这将删除文本文件的外部连接。

相关问题