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
谢谢!
有很多方法可以将文本文件导入当前工作表。 这里有三个(包括你在上面使用的方法)
- 使用QueryTable
- 打开内存中的文本文件,然后写入当前工作表,最后根据需要应用文本到列。
- 如果要使用当前使用的方法,则在新工作簿中打开文本文件后,只需使用
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:
-
select文件的第一行文本所在的单元格。
-
使用“
Data
/Get External Data
/From File
对话框select要导入的文本文件。 -
根据需要格式化导入的文本。
-
在打开的
Import Data
对话框中,点击Properties...
-
取消选中
Prompt for file name on refresh
框Prompt for file name on refresh
。 -
每当外部文件更改时,单击
Data
/Get External Data
/Refresh All
button。
注意:就你而言,你可能应该跳过第5步。
你可以写.WorkbookConnection.Delete后.Refresh BackgroundQuery:= False这将删除文本文件的外部连接。