2017-09-22 6 views
0

私のブックには、別のExcelワークブックからのいくつかのデータ接続があります。自分のソースをダウンロードファイルに保存します。私のコードは、データと埋め込み式をリフレッシュします。しかし、私はこのコードを他のユーザーが使用できるようにしたい。データ接続でブック内の異なるユーザーIDでマクロを実行する方法

このマクロを使用し、ソースファイルを独自のダウンロードファイルに保存し、入力(UserID)を変更する予定のユーザーは、コードが関連する場所に到達することができます。しかし、コードは機能していません。ここに私のコードは、(私のユーザーIDで動作します)です:私はusing Z4321 上記のコードを実行した場合

を想定

My UserID: A1234 and Another UserID: Z4321 

できるようにします:

UserID = InputBox("Your UserID:") 

For i = 1 To 4 
    With ActiveWorkbook.Connections(i).OLEDBConnection 
     .SourceDataFile = "C:\Users\" & UserID & "\Downloads\Source.xlsx" 
     .SourceConnectionFile = "C:\Users\" & UserID & "\Downloads\Source.xlsx" 
     .BackgroundQuery = False 
     .Refresh 
    End With 
    Application.CalculateUntilAsyncQueriesDone 
    Range("Table" & i & "[[ColumnName1]:[ColumnName2]]").FillDown 
    Range("Table" & i).Calculate 
Next i 

ここで私は私がやっていることは何の非常に基本を作成しましたコードは依然としてMYダウンロードファイルにアクセスして、それがSHOULD NOTであるデータをインポートします。私はそれがエラーを与えるべきだと思います。どのように私のコンピュータに存在しないファイルに到達することができますか?

その後、私は、私はそれより上のコードを使用している場合、このパスに変更することを実現:

Excel> Data> Connections> Properties> Definition> Connection File 
it writes C:\Users\Z4321\Downloads\Source.xlsx 

link1

をしかし、このパスはまだ私のユーザーIDに残る:

Excel>Data>New Query> Data Source Settings 
it still writes C:\Users\A1234\Downloads\Source.xlsx 

link2

どのように経路を変更できますかVBAコードを使用してlink2?

答えて

0

なぜユーザー名によって変数を設定しないのですか?

Sub test() 
Dim userName As String, userFolder As String 

' Get userName 
userName = Application.userName ' Or use the inputbox if you prefer. 

Select Case userName 
Case "BruceWayne" 
    userFolder = "C:\Users\Bruce\myFiles\" 
Case "Alfred" 
    userFolder = "C:\Users\Admin\Alfred\Files\" 
Case Else 
    userFolder = "C:\Users\Guest\Files\" 
End Select 

For i = 1 To 4 
    With ActiveWorkbook.Connections(i).OLEDBConnection 
     .SourceDataFile = userFolder & "Source.xlsx" 
     .SourceConnectionFile = userFolder & "Source.xlsx" 
     .BackgroundQuery = False 
     .Refresh 
    End With 
    'etc etc 
Next i 
End Sub 
+0

これは私の職場では、すべての従業員がログインするために使用するID番号(A74892、E38523など)を持っている状況です。私は問題は可変セットではなく、forループそのものであると考えています。プロパティ.SourceDataFileと.SourceConnectionFileが機能しません。または、おそらく私は間違ったオブジェクトを使用しています。私はlink2の経路を変更することができるはずですが、私はそれを行う方法がわかりません。 – Raxian

+0

私が別の言い方をすると、上のコードは接続名(link1)を変更しますが、興味深いことに接続先(link2)は変更しません – Raxian

関連する問題