Извлечение данных из рабочей книги в форму пользователя в другой рабочей книге - PullRequest
2 голосов
/ 27 сентября 2019

У меня есть рабочая книга Excel, которая действует как база данных, и пользовательская форма, которая действует как пользовательский интерфейс.Оба находятся в разных книгах.

Я хочу заполнить пользовательскую форму данными из книги Excel.

Private Sub CommandButton4_Click()
    Dim n As Long, i As Long
    n = 0
    Dim mydata1 As Workbook        

    Set mydata1 = Workbooks.Open("\\NTSYDFSP150\Shared\fmd\credit\LEM_Reports\SV References\SV Entry Form Input.xlsx")

    mydata1.Worksheets("sheet1").Activate
    mydata1.Worksheets("sheet1").Range("A1").Select

    n = Worksheets("sheet1").Range("a1").CurrentRegion.Rows.Count

    For i = 2 To n 
        If Trim(Sheet1.Cells(i, 1)) <> Trim(UserForm1.TextBox157.Text) And i = n Then
            MsgBox ("Name not found") 
        End If

        If Trim(Sheet1.Cells(i, 1)) = Trim(UserForm1.TextBox157.Text) Then
            UserForm1.TextBox1.Text = Sheet1.Cells(i, 1)
            Exit For
        End If
    Next i

    mydata1.Save
    mydata1.Close

    MsgBox "Data searched successfully", 0, vbNullString
End Sub

Проблема: при запуске кода не удается получить данные из базы данных Excel.

Sheet1.Cells(i, 1): - это поле по-прежнему относится к Shee1 из рабочей книги формы пользователя, покаэто должно относиться к рабочей книге на общем диске, так как я активировал и открыл ее.

Примечание: n рассчитан правильно.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2019

Это просто рекомендуемый способ предотвратить открытие другой книги:

Private Sub CommandButton4_Click()

Dim wbPath As String: wbPath = "\\NTSYDFSP150\Shared\fmd\credit\LEM_Reports\SV References\"
Dim wbName As String: wbName = "SV Entry Form Input.xlsx"
Dim wsName As String: wsName = "sheet1"
Dim arrList As Object: Set arrList = CreateObject("System.Collections.ArrayList")
Dim lr As Long, x As Long

'Get the last row from A column, notice we need R1C1 notation for Excel4Macro
lr = ExecuteExcel4Macro("MATCH(""zzz"",'" & wbPath & "[" & wbName & "]" & wsName & "'!C1)")

'Let's use an ArrayList to get our validation list
For x = 2 To lr
    arrList.Add Trim(ExecuteExcel4Macro("'" & wbPath & "[" & wbName & "]" & wsName & "'!R" & x & "C1"))
Next x

'Check if ArrayList contains your lookup value
If arrList.Contains(Trim(UserForm1.TextBox157.Text)) Then
    UserForm1.TextBox1.Text = UserForm1.TextBox157.Text
Else
    MsgBox ("Name not found")
End If

MsgBox "Data searched successfully"

End Sub
0 голосов
/ 27 сентября 2019

Я очистил ваш код и уточнил диапазоны, где это необходимо.Несоответствие диапазонов, скорее всего, ошибка здесь.Пример: Worksheets("sheet1").Range("a1"). ... должно быть mydata1.Worksheets("sheet1").Range("a1"). ....Попробуйте следующий код:

Private Sub CommandButton4_Click()
Dim n As Long, i As Long
n = 0
Dim mydata1 As Workbook        

Set mydata1 = Workbooks.Open("\\NTSYDFSP150\Shared\fmd\credit\LEM_Reports\SV References\SV Entry Form Input.xlsx")


n = mydata1.Worksheets("sheet1").Range("a1").CurrentRegion.Rows.Count

For i = 2 To n 
    If Trim(mydata1.Sheet1.Cells(i, 1)) <> Trim(UserForm1.TextBox157.Text) And i = n Then
        MsgBox ("Name not found") 
    End If

    If Trim(mydata1.Sheet1.Cells(i, 1)) = Trim(UserForm1.TextBox157.Text) Then
        UserForm1.TextBox1.Text = mydata1.Sheet1.Cells(i, 1)
        Exit For
    End If
Next i

mydata1.Save
mydata1.Close

MsgBox "Data searched successfully", 0, vbNullString
End Sub

Обратите внимание, что активация рабочей книги и .Select использование Range в этом случае не являются необходимыми (поэтому я удалил их), и их следует избегать в целом (см. Комментарий выше).за дополнительные советы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...