2017-09-22 40 views
0

我的工作簿包含來自另一個Excel工作簿的多個數據連接。我將我的源保存在我的下載文件中。我的代碼刷新數據和填充公式。但是我希望這個代碼能夠被其他用戶使用。如何通過具有數據連接的工作簿中的不同用戶標識運行宏

這個想法是人們將要使用這個宏,將他們的源文件保存在他們自己的下載文件中,並且改變輸入(UserID),代碼可以到達相關位置。但代碼不起作用。這裏是我的代碼(我的用戶名作品):

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 UserID: A1234 and Another UserID: Z4321 

如果我運行上面using Z4321 代碼代碼仍會訪問我的下載文件並導入它不應該包含的數據。我認爲它應該給出一個錯誤。它如何到達我的電腦中不存在的文件?

然後我意識到,如果我用上面的代碼它改變這條道路:

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

link1

但是這條道路仍然與我的用戶名:

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

link2

如何改變途徑link2使用VBA代碼?

回答

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

相關問題