Получить конкретное значение ячейки из нескольких файлов Excel в текстовом поле формы доступа MS с помощью VBA - PullRequest
0 голосов
/ 19 мая 2018

У меня есть 171 файл Excel, названный как IFSCB2009_01.xls в IFSCB2009_171.xls, которые хранятся в каталоге "C: / IFSC".У всех файлов есть столбец с именем «IFSC» в B1 (который является кодом банка) в Sheet1 и столбец «BankName» в E1 (который является названием банка, связанного с этим кодом IFSC).

У меня естьФорма в MS Access с 2 TextBox с именем txtIFSC и txtBankName и 1 кнопка с именем cmdSearchBankName.Если я введу код IFSC в txtIFSC и нажму на cmdSearchBankName, я хочу получить имя банка в txtBankName, выполнив поиск по всем 171 файлам Excel без открытия.Мне нужно значение в txtBankName из листа1, столбца BankName, где IFSC совпадает со значением txtIFSC.

Я не имею представления о коде VBA для вышеуказанной процедуры.

Ответы [ 2 ]

0 голосов
/ 19 мая 2018

Спасибо Parfait.

На самом деле я создал новый код с помощью вашего кода, затем работал нормально ... но единственная проблема в том, что для получения данных с использованием следующего кода требуется 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

Но проблема с приведенным выше кодом заключается в том, что он находит все таблицы Excel в каталоге.Если вы можете помочь, то предложите мне остановить цикл при совпадении данных ..

Спасибо

0 голосов
/ 19 мая 2018

Сначала используйте MS Access, фактическую базу данных, чтобы хранить весь ваш контент, а не в Excel.Следовательно, импортируйте все 171 лист книги в таблицу MS Access.Затем вы можете легко запросить таблицу с параметрами формы.

Также используйте тот факт, что вы можете напрямую запрашивать книги Excel из Access SQL, не открывая их, предполагая, что лист поддерживает именованные столбцы и структуру таблицы (смежные строки / столбцы) данных.При необходимости измените имя листа в запросе.

SQL (создать в коде или в графическом интерфейсе Access)

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 & "'"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...