Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有用户输入文件名的VBA Excel导入.txt_Vba_Excel - Fatal编程技术网

带有用户输入文件名的VBA Excel导入.txt

带有用户输入文件名的VBA Excel导入.txt,vba,excel,Vba,Excel,我不确定这是否可行,但我想让用户输入要导入excel电子表格的文本文件的文件名(不是整个C:\thing,只是名称)。我已经有了将文本文件(空格分隔)输入到电子表格的代码,但我真的不想在每次导入另一个文本文件时都返回并更改代码。这可能吗?该文件当前名为data.txt,但最有可能的格式是data_MM_DD_YY 我目前的代码如下: Option Explicit Public Sub ImportTextFile(FName As String, Sep As String) Dim R

我不确定这是否可行,但我想让用户输入要导入excel电子表格的文本文件的文件名(不是整个C:\thing,只是名称)。我已经有了将文本文件(空格分隔)输入到电子表格的代码,但我真的不想在每次导入另一个文本文件时都返回并更改代码。这可能吗?该文件当前名为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
选项显式
Public Sub-ImportTextFile(FName作为字符串,Sep作为字符串)
暗淡的RowNdx与长
Dim ColNdx作为整数
Dim TempVal作为变体
像细绳一样模糊的整条线
作为整数的Dim Pos
Dim NextPos作为整数
将SaveColNdx设置为整数
Application.ScreenUpdating=False
SaveColNdx=ActiveCell.Column
RowNdx=ActiveCell.Row
打开FName以读取为#1的输入访问
名称=输入框(“输入文本文件的名称”)
而不是EOF(1)
行输入#1,整行
如果正确(整行,1)则为9月
整条线=整条线和Sep
如果结束
ColNdx=SaveColNdx
位置=1
NextPos=仪表(位置、全线、九月)
而NextPos>=1
TempVal=Mid(全线、Pos、下一个Pos-Pos)
单元格(RowNdx,ColNdx).Value=TempVal
Pos=NextPos+1
ColNdx=ColNdx+1
NextPos=仪表(位置、全线、九月)
温德
RowNdx=RowNdx+1
温德
EndMacro:
错误转到0
Application.ScreenUpdating=True
关闭#1
端接头
子DoTheImport()
ImportTextFile FName:=“C:\Users\A0K045\Documents\Name.txt”,Sep:=”“
端接头

任何帮助都将不胜感激!如果不可能的话,有没有类似的可能

您只想在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
...

谢谢你的快速回复!如果我把它添加到代码的顶部(我把它放在RowNdx=ActiveCell.Row之后),我该如何处理代码的底部?它当前是Sub DoTheImport()ImportTextFile FName:=“C:\thedir\&Name.txt”,Sep:=“End Sub,它说找不到文件,我仔细检查了文件名,不必担心我需要在单元格A1中键入特定的文件名吗?”?我试过data和data.txt以及“data”和“data.txt”,但我总是得到一个下标超出范围的错误。我做错什么了吗?谢谢