[英]VBA Excel Import .txt with User-Input file name
我不确定这是否可行,但我想让用户输入要导入excel电子表格的文本文件的文件名(不是整个C:\\的东西,而只是名称)。 我已经有了用于将文本文件(以空格分隔)输入到电子表格的代码,但我真的想不回头,每次想导入另一个文本文件时都更改代码。 这可能吗? 该文件当前称为data.txt,但最有可能采用Data_MM_DD_YY的形式
我当前的代码如下:
Option Explicit
Public Sub ImportTextFile(FName As String, Sep As String)
Dim RowNdx As Long
Dim ColNdx As Integer
Dim TempVal As Variant
Dim WholeLine As String
Dim Pos As Integer
Dim NextPos As Integer
Dim SaveColNdx As Integer
Application.ScreenUpdating = False
SaveColNdx = ActiveCell.Column
RowNdx = ActiveCell.Row
Open FName For Input Access Read As #1
Name = InputBox("Enter the name of the text file")
While Not EOF(1)
Line Input #1, WholeLine
If Right(WholeLine, 1) <> Sep Then
WholeLine = WholeLine & Sep
End If
ColNdx = SaveColNdx
Pos = 1
NextPos = InStr(Pos, WholeLine, Sep)
While NextPos >= 1
TempVal = Mid(WholeLine, Pos, NextPos - Pos)
Cells(RowNdx, ColNdx).Value = TempVal
Pos = NextPos + 1
ColNdx = ColNdx + 1
NextPos = InStr(Pos, WholeLine, Sep)
Wend
RowNdx = RowNdx + 1
Wend
EndMacro:
On Error GoTo 0
Application.ScreenUpdating = True
Close #1
End Sub
Sub DoTheImport()
ImportTextFile FName:="C:\Users\A0K045\Documents\Name).txt", Sep:=" "
End Sub
任何帮助将不胜感激! 如果不可能,那么有没有可能做到这一点?
您只想在VBA外部更改文件名? 当然,那没问题。
您可以为文件名创建一个带有文本框的表单,然后将目录附加到字符串。
或者,您可以让用户将文件名输入电子表格单元格,然后从中获取名称。
这是在工作表中输入的情况下的工作方式:
Sub DoTheImport(ByVal strFilename As String)
strFilename = "C:\Users\A0K045\Documents\" & strFilename
ImportTextFile FName:=strFilename, Sep:=" "
End Sub
Sub getFilenameFromSheetAndGo()
Dim strFilename As String
strFilename = ActiveWorkbook.Worksheets("InputFilename").Cells(1, 1).Value 'Cell A1
Call DoTheImport(strFilename)
End Sub
询问名称并在目录前;
Name = InputBox("Enter the name of the text file")
If (Name = "") Then Exit Sub
open "c:\thedir\" & name for input as #1
...
或者,您可以使用文件选择对话框;
Dim result As Variant
ChDir "c:\thedir\"
result = Application.GetOpenFilename("Text Files (*.txt),*.txt")
If (result = False) Then Exit Sub
open result for input as #1
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.