vba:将文本文件导入到Excel工作表中

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

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 

谢谢!

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

  1. 使用QueryTable
  2. 打开内存中的文本文件,然后写入当前工作表,最后根据需要应用文本到列。
  3. 如果要使用当前使用的方法,则在新工作簿中打开文本文件后,只需使用Cells.Copy将其复制到当前工作表

使用QueryTable

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

 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来select相关的文件。 例如…

 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 

我想我在这里回答自己的问题是你正在尝试做的最简单的解决scheme:

  1. select文件的第一行文本所在的单元格。

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

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

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

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

  6. 每当外部文件更改时,单击Data / Get External Data / Refresh Allbutton。

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

你可以写.WorkbookConnection.Delete后.Refresh BackgroundQuery:= False这将删除文本文件的外部连接。