允许Access用户选择Excel工作表进行链接

时间:2013-11-19 19:04:02

标签: excel vba ms-access access-vba

所以我在Access中使用VBA在Excel和Access之间创建链接表。很简单,当一些在线资源引导我时,我决定使用 TransferSpreadsheet 命令。所以我运行了一些代码来测试我的语法是否正确并得到了这个

DoCmd.TransferSpreadsheet acLink, acSpreadsheetTypeExcel12, _
        "Link Name", "File Path", True, "Sheet Name!"

这样就完美了,但是我想自动化它,所以不懂代码的人可以使用这个功能。因此,对于文件路径,我设置了一个文件对话框,以便用户可以选择excel文件。再次工作得很好。

现在,我想创建一个对话框供用户选择要链接的Excel工作表。因此,用户基本上首先选择excel文件,然后从下拉框中选择他们想要链接的工作表。这可能吗?如果是这样,我将如何去做呢。到目前为止,这是我的代码:

Public Sub linksheet()

Dim fd As FileDialog
Dim strpath As String
Set fd = Application.FileDialog(msoFileDialogFilePicker)
fd.AllowMultiSelect = False
fd.Title = "Select Routing File"



'get the number of the button chosen
Dim FileChosen As Integer

FileChosen = fd.Show

If FileChosen <> -1 Then

Else

strpath = fd.SelectedItems(1)
DoCmd.TransferSpreadsheet acLink, acSpreadsheetTypeExcel12, _
        "Test Link", strpath, True, "Current!"

End If


End Sub

为了进一步增加这一点,我试图利用我发现的代码来获取名称,但我不确定如何将它们存储为变量来使用。

Public Function WorkSheetNames(strwspath As String) As Boolean
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim strarray(25)

Set xlApp = CreateObject("Excel.application")
Set xlBook = xlApp.Workbooks.Open(strwspath, 0, True)
For Each xlSheet In xlBook.Worksheets
Debug.Print xlSheet.Name

Next xlSheet
xlBook.Close False
xlApp.Quit
Set xlBook = Nothing
Set xlApp = Nothing
Set xlSheet = Nothing
End Function

上面的代码所做的是将每个工作表名称列入调试窗口,我发现很难将这些值推送到数组中。

1 个答案:

答案 0 :(得分:2)

我不明白为什么需要将工作表名称存储在数组中。您可以将它们存储为字符串变量中的列表。然后,您可以将该字符串指定为组合框的RowSource属性,该属性允许用户选择一个可用的工作表。

Dim strSheets As String
' adapt your existing code to use this ...
For Each xlSheet In xlBook.Worksheets
    'Debug.Print xlSheet.Name
    strSheets = strSheets & ";" & xlSheet.Name
Next xlSheet
' discard leading semi-colon
strSheets = Mid(strSheets, 2)

收集工作表名称后,将其应用为组合框源。

' ComboName should have Value List as Row Source Type
Me.ComboName.RowSource = strSheets