将文本文件导入excel工作表
我正在编写一个VBA代码,该代码应该删除选定excel工作表上的数据,打开一个文本文件选择对话框,然后将该文本文件中的数据导入到我从中删除数据的相同工作表中。到目前为止,我只能将文本文件打开到新工作簿中,但无法将其打开到删除数据的同一工作表中 以下是我到目前为止的收获,非常感谢您的帮助:将文本文件导入excel工作表,excel,vba,Excel,Vba,我正在编写一个VBA代码,该代码应该删除选定excel工作表上的数据,打开一个文本文件选择对话框,然后将该文本文件中的数据导入到我从中删除数据的相同工作表中。到目前为止,我只能将文本文件打开到新工作簿中,但无法将其打开到删除数据的同一工作表中 以下是我到目前为止的收获,非常感谢您的帮助: Dim Filt As String Dim FilterIndex As Integer Dim Title As String Dim FileName As Variant Filt = "Cst Fi
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
有许多方法可以将文本文件导入当前工作表。这里有三种方法,包括您在上面使用的方法 使用查询表 在内存中打开文本文件,然后写入当前工作表,最后在需要时将文本应用于列。 如果要使用当前使用的方法,则在新工作簿中打开文本文件后,只需使用单元格将其复制到当前工作表。复制 使用查询表 这是我录制的一个简单宏。请根据您的需要修改一下
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
在内存中打开文本文件
一旦阵列中有数据,就可以将其导出到当前工作表
使用您已经使用的方法
我认为以下是解决您试图做的事情的最简单的方法:
选择文件中第一行文本所在的单元格
使用“数据/获取外部数据/来自文件”对话框选择要导入的文本文件
根据需要设置导入文本的格式
在打开的“导入数据”对话框中,单击“属性…”
取消选中“刷新时提示输入文件名”框
每当外部文件更改时,单击数据/获取外部数据/全部刷新按钮
注意:在您的情况下,您可能需要跳过步骤5。您可以编写
.WorkbookConnection.Delete
之后
.Refresh BackgroundQuery:=False
这将删除文本文件的外部连接。看起来QueryTable方法是最直接的方法,但是否有方法向其中添加对话框,以便我可以选择来自不同来源的文本文件?是的。等一下。。。更新职位的假设更新:请参阅FOLLOWUP@SiddharthRout嗨,我是wondrin,这是上述方法中最快的一种。我只是希望你已经有了答案,而不是我一个接一个地尝试?因为我当前的代码很长,要适应每个示例,我需要调整整个代码以使其对齐。“我希望跳过决定部分,以最快的方式继续,并相应地调整我的代码。”悉达多已经解决了这个问题。最快的是第三个样品。使用Workbook.Open或Workbook.OpenText方法。如果这与你的结论不一致,请通知我。谢谢。但是当你按“刷新”时,它总是要求你再次选择文件
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
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