2015-06-30 31 views
0

我有一張有兩張紙的Excel表。隱藏一張表,其中包含名爲「位置」的值列表。在主表上,我創建了一個從隱藏表單中拉出的下拉菜單。VBA Excel宏通過外部文件更新列表

如何將這些值存儲在外部文件(Excel,.txt等)中,這樣我就可以打開一個宏按鈕(VBA),它將使用任何/所有新位置替換/更新隱藏工作表上的列表將存儲在外部文件中的值?

+1

你有沒有編寫任何代碼了嗎?你有沒有試過從外部文件讀取數據?以較小的步驟拆分任務並嘗試從中解決。 – gipadm

+0

構建連接到外部工作簿的Microsoft查詢可能更容易,然後所有宏都必須刷新查詢。需要思考的東西。 –

回答

2

我相信這是你在找什麼:

Dim intPointer as Integer 
Dim strFileToImport as String 
Dim strLine as String 

intPointer = FreeFile() 
Open strFileToImport For Input Access Read Lock Read As #intPointer 
Do Until EOF(intPointer) 
    Line Input #intPointer, strLine 
    SheetWithLocations.Cells(lngRow, 1).Value2 = strLine 
    lngRow = lngRow + 1 
Loop 

它打開名爲strFileToImport外部txt文件,並從txt文件的讀取一行行並將其寫入SheetWithLocations。

0

讓它以爲它是一個包含位置的外部文件的文件路徑是: 「d:\ Location.xls」

Location.xls只有命名爲具有以下結構「工作表Sheet1」一個表:

 
Locations 
E:\123.txt 
C:\MyFolder\MyOtherFile.xls 
D:\MyFile.xls 
. 
. 
etc. 

和具有兩個工作表(如你上面討論的)工作Excel文件的文件路徑是 「d:\ MyWokingFileName.xls」

正如你說「MyWokingFileName.xls」具有Ť我們假設這些表是'sheet1'和'sheet2',而sheet2是隱藏的。

現在您希望sheet1上的MacroButton更新MyWokingFileName.xls的sheet2中的值。

所以對於宏的代碼如下:

Private Sub macroUpdateLocations() 
    Dim myCon As New ADODB.Connection 
    Dim myRs As New ADODB.Recordset 
    Dim iCounter As Long 
    myCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Location.xls;Extended Properties=" & """Excel 8.0;HDR=Yes;IMEX=1;""" & ";" 
    Set myRs = myCon.Execute("SELECT * FROM `Sheet1$`") 
    Worksheets("sheet2").Range("A:A").ClearContents 
    Worksheets("sheet2").Range("A1").Value = "Locations" 
    iCounter = 2 
    Do While Not myRs.EOF 
     Worksheets("sheet2").Range("A" & CStr(iCounter)).Value = myRs(0) 
     iCounter = iCounter + 1 
     myRs.MoveNext 
    Loop 
End Sub 
myRs.Close 
Set myRs = Nothing 
myCon.Close 
Set myCon = Nothing 
+0

不要忘記從VB宏編輯器窗口的參考庫中添加''microsoft activex數據對象2.1庫''作爲項目參考。 – PankajExplorer

+0

希望這會有所幫助,而且你需要它... – PankajExplorer