我有总共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代码。
首先使用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 & "'"
谢谢完美。
实际上我在你的代码的帮助下制作了新的代码然后工作得很好..但唯一的问题是使用以下代码检索数据需要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表。如果你可以提供帮助,那么建议我在数据匹配时停止循环。
谢谢