使用vba从ms访问表单文本框中的多个excel文件中检索特定单元格值

问题描述 投票:0回答:2

我有总共171个名为IFSCB2009_01.xls的excel文件到IFSCB2009_171.xls,它们存储在“C:/ IFSC”目录中。所有文件在Sheet1中都有一个名为“IFSC”的列(它是银行代码),E1中的列为“BankName”(银行名称,与该IFSC代码相关)。

我在MS Access中有一个Form,带有一个名为txtIFSC和txtBankName的2个TextBox和一个名为cmdSearchBankName的按钮。如果我在txtIFSC中输入IFSC代码并单击cmdSearchBankName,那么我想通过搜索所有171个Excel文件而不打开来检索txtBankName中的银行名称。我想要来自sheet1的txtBankName值,列BankName,其中IFSC与txtIFSC值匹配。

我不知道上述程序的vba代码。

vba access-vba ms-access-2010
2个回答
1
投票

首先使用MS Access(实际数据库)来存储所有内容而不是Excel。因此,将所有171个工作簿表导入MS Access表。然后,您可以使用表单参数轻松查询表。

此外,假设工作表维护命名列和表结构(相邻行/列)数据,您可以直接从Access SQL查询Excel工作簿而不打开它们。根据需要调整查询中的工作表名称。

SQL(在代码或Access GUI中创建)

CREATE TABLE IFSC (
   ID AUTOINCREMENT PRIMARY KEY,
   IFSC_Code TEXT(50),
   BankName TEXT(255)
)

VBA(遍历所有工作簿和导入数据)

Sub ImportExcelData
   Dim myPath As String, myFile As String
   Dim sql As String

   myPath = "C:\IFSC\"
   myFile = Dir(myPath & "*xlsx")

   ' LOOP THROUGH FOLDER
   Do While Len(myFile) > 0
      sql = "INSERT INTO IFSC (IFSC_Code, BankName) " & _
             "SELECT [IFSC_Code], [BankName] " & _
             " FROM [Excel 12.0 Xml;HDR=Yes;Database=" & myPath & myFile & "].[Sheet1$]"

      CurrentDb.Execute sql   ' RUN APPEND ACTION
      myFile = Dir
   Loop

End Sub

SQL(SELECT查询)

SELECT BankName FROM IFSC WHERE [IFSC_Code] = Forms!myFormName!txtIFSC

DLookup(分配给未绑定的控件或作为VBA变量)

= DLookup("BankName", "IFSC", "[IFSC_Code] ='" &  Forms!myFormName!txtIFSC & "'"

0
投票

谢谢完美。

实际上我在你的代码的帮助下制作了新的代码然后工作得很好..但唯一的问题是使用以下代码检索数据需要5-6秒。

Dim db As Database
Dim rst As Recordset
Dim myPath As String, myFile As String
Dim sql As String    

    myPath = "C:\IFSC\"
    myFile = Dir(myPath & "*xls")
    Set db = CurrentDb

   ' LOOP THROUGH FOLDER
    Do While Len(myFile) > 0
        sql = "SELECT [BANK], [BRANCH],[ADDRESS],[IFSC] FROM [Excel 12.0 Xml;HDR=Yes;Database=" & myPath & myFile & "].[Sheet1$];"

            Set rst = db.OpenRecordset(sql)
             Do While rst.EOF = False
                 If rst!IFSC = Me.Text1.Value Then
                     Text3 = rst!Bank
                     Text5 = rst!Branch
                     Text7 = rst!Address
                 End If
             rst.MoveNext
             Loop
             rst.Close

        myFile = Dir
    Loop

但上面代码的问题是它在Directory中找到所有excel表。如果你可以提供帮助,那么建议我在数据匹配时停止循环。

谢谢

© www.soinside.com 2019 - 2024. All rights reserved.