簡體   English   中英

VBA Excel導入具有用戶輸入文件名的.txt

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM