¿Es posible buscar, luego leer en valores específicos de un archivo Excel usando Access VBA?
-
21-12-2019 - |
Pregunta
He tenido que leer en valores de un archivo de Excel antes, pero fue un archivo separado por Excel Coma. Esta vez tengo un archivo de Excel con un gráfico y dos tablas. Solo quiero leer en los valores en una columna de una tabla específica. Aquí hay una imagen del diseño del archivo Excel. Me gustaría leer en la columna marcada "cantidad" en la mesa inferior marcada por una flecha roja. No quiero leer en el total de todas las cantidades debajo.
Cuando estaba leyendo en todos los valores de un archivo separado por Excel Comma, utilicé este código. Las inicializaciones y la lógica innecesaria se han eliminado solo para mostrar el código relevante a esta pregunta.
Set objconnection = CreateObject("ADODB.connection")
Set objRecordset = CreateObject("ADODB.recordset")
objconnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strpathtotextfile & ";Extended Properties=""Text;HDR=YES;FMT=Delimited"""
objRecordset.Open "SELECT * FROM [" & ThisFileName & "]", objconnection, adOpenStatic, adLockOptimistic, adCmdText 'select all text lines from the file
Do While Not objRecordset.EOF 'read lines until end of file
'Clear out all the local objects so prior values aren't left there'
SampleName = ""
DateTimeAcquired = ""
Analyte = ""
Concentration = ""
'reads in each value according to column name and save to variable'
SampleName = objRecordset.Fields("Sample Name").Value
DateTimeAcquired = objRecordset.Fields("Date and Time Acquired").Value
Analyte = objRecordset.Fields("Element Full Name").Value
Concentration = objRecordset.Fields("Concentration").Value
'other logic'
objRecordset.MoveNext
Loop
¿Hay algo similar que pueda hacer para el archivo de Excel, actualmente estoy tratando de importar? ¿Hay alguna manera de importar solo una columna?
Actualización: los archivos de Excel siempre están siempre en el mismo diseño que en I Siempre estoy recuperando la información de las ranuras 29G-34G.
Solución
Necesitará ajustar la ruta del archivo y el nombre de la hoja, pero algo así debería funcionar:
Sub Tester()
Dim cn As New ADODB.Connection
Dim rs As ADODB.Recordset
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:\Users\thisuser\Desktop\test.xlsx;" & _
"Extended Properties=""Excel 12.0 Xml;HDR=NO"""
Set rs = cn.Execute("select * from [Sheet1$G29:G34]")
Do While Not rs.EOF
Debug.Print rs(0).Value
rs.MoveNext
Loop
End Sub