VBA Excel宏通过外部文件更新列表

时间:2015-06-30 14:10:20

标签: excel vba excel-vba excel-2010

我有一张excel表,有两张纸。隐藏一张表,其中包含一个名为“位置”的值列表。在主页上,我创建了一个从隐藏表中拉出的下拉菜单。

如何将这些值存储在外部文件(Excel,.txt等)中,这样我就可以点击宏按钮(VBA),用任何/所有新的位置值替换/更新隐藏工作表上的列表那将存储在外部文件中?

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

假设包含位置的外部文件的文件路径是: “d:\ Location.xls”

Location.xls只有一个名为'sheet1'的Sheet,它具有以下结构:

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

和具有两个WorkSheets的工作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