2017-06-15 8 views
0

テキストファイルへの接続が1つ含まれるExcelファイルがあります。私はこのファイルへのパスを毎日更新する必要があります(私が制御できない理由でファイル名が変わるため)。私はパスに変更を加えるために次のコードを使用し、素晴らしい動作します。問題は、デリミタの区切りや列のデータ型など、他のすべてのオプションを失うことです。Excel VBA接続パスを変更しますが、区切り文字と列の整形を維持します

パスを変更してフォーマットを維持できる方法はありますか?

ここでは、コードです:

Sub Update_Connection() 

     Dim Conn As Variant 
     Dim ConString As String 
     Dim oldPath As String, NewPath As String 

     NewPath = "\\Reports\Data\dailydata" & (Application.WorksheetFunction.Concat(Format(Now(), "dd"), Format(Now(), "mm"), Format(Now(), "yy")) * 4) & ".txt" 
     Debug.Print NewPath 

     Set Conn = ActiveWorkbook.Connections.Item(1) 

     'Debug.Print Conn.TextConnection.Connection 

     ConString = Conn.TextConnection.Connection 

     oldPath = Split(ConString, ";")(1) 

     ConString = Replace(ConString, oldPath, NewPath) 

     Conn.TextConnection.Connection = ConString 

    End Sub 
+0

End Subの場合はそれが唯一のテキストファイルであれば終了フォルダ内では、テキストファイルの名前とは無関係に、DIR関数を使用してすべての場合に一度これを行うことができます。コードはファイル名を見つけてそこから取得することができます。このテキストファイルの特定のフォルダを作成して、そこに1つのファイルを常に保存できますか?その中に別のフォルダを作成して以前のファイルと呼ぶことができるので、過去のすべてのテキストファイルの記録を保存することもできます。また、テキストファイルの名前が予測可能な文字列で始まる場合は、最新のバージョンをキャプチャするように自動化することもできます。 – Ibo

+0

もう一つの提案は、フォルダ内の最後に作成されたファイルを簡単に見つけることです。ファイルをループして、最近作成されたファイルの名前を取得するだけです。ファイルの作成日時を取得する方法は次のとおりです。https://msdn.microsoft.com/en-us/library/office/gg264090.aspx – Ibo

+0

ありがとうございますが、ファイルを見つけることは問題ではありません。新しいファイルに変更すると、すべてのdelimeter snd列のデータ設定が失われる – Walshie1987

答えて

0

これはあなたの特定の質問に対する答えではないかもしれないが、私は、私はいつも何が起こるかを完全に制御を持っているのではなくExcelのために世話をさせることができますメソッドを使用しますが、バージョンによって異なる場合があります。あなたが制御し変更できる多くの属性があります。あなたが持っているブックにシェイプを挿入し、右クリックしてRunClickサブを割り当てます。テキストファイルからデータを取り出そうとするたびに、それをクリックするだけですべてがうまくいくはずです。唯一の部分は、最新のテキストファイルの完全な名前をキャプチャするために、さらに開発する必要があるため、手動で何もしないでデータをそのままインポートすることです。

Sub RunClick() 
    Dim str As String 
    str = "T:\MyFolder\ABC.txt" 
    Call CreateConnectionToTextFile(str) 
End Sub 

Sub CreateConnectionToTextFile(sTextFileFullName As String) 
    On Error GoTo ErrorHandler 
    With ActiveSheet.QueryTables.Add(Connection:= _ 
     "TEXT;" & sTextFileFullName, Destination:=Range("$A$1")) 
     .Name = "MAKT" 
     .FieldNames = True 
     .RowNumbers = False 
     .FillAdjacentFormulas = False 
     .PreserveFormatting = True 
     .RefreshOnFileOpen = False 
     .RefreshStyle = xlInsertDeleteCells 
     .SavePassword = False 
     .SaveData = True 
     .AdjustColumnWidth = True 
     .RefreshPeriod = 0 
     .TextFilePromptOnRefresh = False 
     .TextFilePlatform = 1252 
     .TextFileStartRow = 1 
     .TextFileParseType = xlDelimited 
     .TextFileTextQualifier = xlTextQualifierDoubleQuote 
     .TextFileConsecutiveDelimiter = False 
     .TextFileTabDelimiter = True 
     .TextFileSemicolonDelimiter = False 
     .TextFileCommaDelimiter = False 
     .TextFileSpaceDelimiter = False 
     .TextFileColumnDataTypes = Array(1, 1, 1) 'we have 3 columns that were imported, and all of them are general 1=general text =2 and so on 
     .TextFileTrailingMinusNumbers = True 
     .Refresh BackgroundQuery:=False 
    End With 

    MsgBox "Now Connected Successfully.", vbInformation, "Success" 

    Exit Sub 

のErrorHandler: Err.Numberに> 0 <はその後 MsgBoxに "接続が確立できませんでした。" 場合は、vbCritical、 "エラー"

関連する問題