excel - una - vinculacion de datos definicion
Permitir al usuario de Access seleccionar la hoja de trabajo de Excel para vincular (1)
No veo por qué necesita almacenar los nombres de las hojas en una matriz. Puede almacenarlos como una lista en una variable de cadena. Luego, podría asignar esa cadena como la propiedad RowSource
de un cuadro combinado que le permite al usuario seleccionar una de las hojas disponibles.
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)
Después de haber recopilado los nombres de las hojas, aplíquelos como fuente de cuadro combinado.
'' ComboName should have Value List as Row Source Type
Me.ComboName.RowSource = strSheets
Así que estoy usando VBA en Access para crear tablas vinculadas entre Excel y Access. Bastante simple y como algunos recursos en línea me guiaron, decidí utilizar el comando TransferSpreadsheet . Así que ejecuté un código para probar si tenía la sintaxis correcta y obtuve esto
DoCmd.TransferSpreadsheet acLink, acSpreadsheetTypeExcel12, _
"Link Name", "File Path", True, "Sheet Name!"
Eso funcionó perfectamente, pero quería automatizarlo para que alguien que no entiende cómo codificar pueda usar la función. Entonces, para la ruta del archivo configuro un cuadro de diálogo de archivo para que el usuario pueda seleccionar el archivo de Excel. Otra vez funcionó muy bien.
Entonces, al punto, quiero crear un cuadro de diálogo para que los usuarios seleccionen la hoja de Excel para vincular también. Entonces, esencialmente, el usuario seleccionaría primero el archivo de Excel y luego seleccionaría en un cuadro desplegable la hoja que desea vincular. es posible? Si es así, ¿cómo podría hacerlo? Aquí está mi código hasta ahora:
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
Para agregar más a esto, estaba intentando utilizar este código que encontré para obtener los nombres, pero no estoy seguro de cómo almacenarlos como variables para usar.
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
Lo que hace el código anterior es enumerar cada nombre de hoja en la ventana de depuración, solo me resulta difícil insertar esos valores en una matriz.