2015-10-23 1 views
2

Код для пользовательской формы, который позволяет мне получать информацию с использованием идентификатора проекта в листе Excel книги.Извлечение информации из внешней книги из текущей открытой книги с использованием пользовательской формы

Однако теперь мне нужно будет искать на основе пользовательского ввода для projectID, который находится во внешней книге под названием active master file.

Затем он будет извлекать информацию и помещать ее в форму пользователя и использовать команду добавления, чтобы вставить информацию в новые строки, найденные в текущей книге, называемой файлом отслеживания проекта.

Проблема заключается в том, что я не уверен в том, что код извлекает информацию из внешней книги в пользовательскую форму, которая присутствует в текущей открытой книге.

У меня есть две книги. Эта пользовательская форма найдена в книге под названием project tracker, а внешняя книга, которую я хотел бы получить информацию на основе их идентификатора проекта, называется active master project.

Это код, у меня есть для командной кнопки поиска для меня, чтобы сделать получение и поиск в листе книги под названием project tracker:

Private Sub CommandSearchButton2_Click() 

    Dim lastrow 
    Dim ProjCode As String 
    Dim LabelProjName As String 
    Dim LabelObjective As String 
    Dim LabelProjSponsor As String 
    Dim LabelProjSponsorNew As String 
    Dim LabelProjManager As String 
    Dim LabelRegulatory As String 
    Dim LabelRiskLvl As String 
    Dim LabelDatePar As Date 
    Dim LabelCostPar As Long 
    Dim LabelAffectCust As String 
    Dim LabelCustNonRetail As String 
    Dim LabelCustRetail As String 
    Dim LabOutsourcingImp As String 
    Dim LabelKeyUpdate As String 
    Dim LabelSector As String 



    searchRow = 0 
     lastrow = Sheets("Program Status Summary").Range("B" & Rows.Count).End(xlUp).Row 
     ProjCode = TextBoxProjCode.Text 

    For currentrow = 4 To 100 

     If Cells(currentrow, 2).Text = ProjCode Then 

      searchRow = currentrow 

      TextBoxProjCode.Text = Cells(currentrow, 2).Text 
      TextBoxProjName.Text = Cells(currentrow, 3) 
      TextBoxSector.Text = Cells(currentrow, 4) 
      TextBoxObjective.Text = Cells(currentrow, 5) 
      TextBoxProjSponsor.Text = Cells(currentrow, 7) 
      TextBoxProjSponsorNew.Text = Cells(currentrow, 8) 
      TextBoxProjM.Text = Cells(currentrow, 6) 
      TextBoxRegulatory.Text = Cells(currentrow, 20) 
      TextBoxRiskLvl.Text = Cells(currentrow, 13) 
      TextBoxDatePar.Text = Cells(currentrow, 12) 
      TextBoxCostPar.Text = Cells(currentrow, 10) 
      TextBoxAffectCust.Text = Cells(currentrow, 15) 
      TextBoxCustNonRetail.Text = Cells(currentrow, 16) 
      TextBoxCustRetail.Text = Cells(currentrow, 17) 
      TextBoxOutsourcingImp.Text = Cells(currentrow, 19) 
      TextBoxKeyUpdate.Text = Cells(currentrow, 18) 

     End If 

    Next currentrow 

TextBoxProjCode.SetFocus 

End Sub 

ответ

2

Лучший способ работы с несколькими тетрадей, является использование объекта переменных:

Dim WbPT As Workbook, _ 
    WbAMP As Workbook, _ 
    WsPSS As Worksheet, _ 
    Ws As Worksheet 

'----The SET keyword is only to attribute value to an object variable 
Set WbPT = Workbooks("project tracker") 
Set WbAMP = Workbooks("active master project") 

Set WsPSS = WbPT.Sheets("Program Status Summary") 

'----Use with to have the reference availaible starting with a simple dot "." 
With WsPSS 
    MsgBox .Cells(1, "B") 
End With 

Так что, если я хорошо понимал, что ваш код должен быть таким:

Private Sub CommandSearchButton2_Click() 

    Dim lastrow 
    Dim ProjCode As String 
    Dim LabelProjName As String 
    Dim LabelObjective As String 
    Dim LabelProjSponsor As String 
    Dim LabelProjSponsorNew As String 
    Dim LabelProjManager As String 
    Dim LabelRegulatory As String 
    Dim LabelRiskLvl As String 
    Dim LabelDatePar As Date 
    Dim LabelCostPar As Long 
    Dim LabelAffectCust As String 
    Dim LabelCustNonRetail As String 
    Dim LabelCustRetail As String 
    Dim LabOutsourcingImp As String 
    Dim LabelKeyUpdate As String 
    Dim LabelSector As String 

    Dim WbPT As Workbook, _ 
     WbAMP As Workbook, _ 
     WsPSS As Worksheet, _ 
     Ws As Worksheet 

    Set WbPT = Workbooks("project tracker") 
    Set WbAMP = Workbooks("active master project") 

    Set WsPSS = WbPT.Sheets("Program Status Summary") 

    With WsPSS 
     searchRow = 0 
     lastrow = .Range("B" & .Rows.Count).End(xlUp).Row 
     ProjCode = TextBoxProjCode.Text 

     For currentrow = 4 To lastrow 
      If .Cells(currentrow, 2).Text = ProjCode Then 
       searchRow = currentrow 

       TextBoxProjCode.Text = .Cells(currentrow, 2).Text 
       TextBoxProjName.Text = .Cells(currentrow, 3) 
       TextBoxSector.Text = .Cells(currentrow, 4) 
       TextBoxObjective.Text = .Cells(currentrow, 5) 
       TextBoxProjSponsor.Text = .Cells(currentrow, 7) 
       TextBoxProjSponsorNew.Text = .Cells(currentrow, 8) 
       TextBoxProjM.Text = .Cells(currentrow, 6) 
       TextBoxRegulatory.Text = .Cells(currentrow, 20) 
       TextBoxRiskLvl.Text = .Cells(currentrow, 13) 
       TextBoxDatePar.Text = .Cells(currentrow, 12) 
       TextBoxCostPar.Text = .Cells(currentrow, 10) 
       TextBoxAffectCust.Text = .Cells(currentrow, 15) 
       TextBoxCustNonRetail.Text = .Cells(currentrow, 16) 
       TextBoxCustRetail.Text = .Cells(currentrow, 17) 
       TextBoxOutsourcingImp.Text = .Cells(currentrow, 19) 
       TextBoxKeyUpdate.Text = .Cells(currentrow, 18) 
      End If 
     Next currentrow 
    End With 

    TextBoxProjCode.SetFocus 

End Sub 
+0

Был готов опубликовать мой отзыв. Я бы добавил только, что там, где OP имеет «lastrow = Sheets» («Сводка состояния программы»). Range («B» .... «Я бы добавил« ThisWorkbook.' »перед инструкцией Sheets, чтобы ссылаться на книгу, код сидит. –

+0

Привет, я попробовал код, который вы дали, но он показывает «Подзаголовок вне диапазона» в строке «Установить WbPT = Рабочие книги (« tracker проекта ») ' – nabilah

+0

Итак, 2 возможности для этого: либо книга не открыта (с таким типом утверждения он должен быть открытым), или имя не является точно «отслеживателем проекта», и вам нужно исправить (кепки, пробелы, расширение ('.xls',' .xlsx', '.xlsm' , ...). И вам, вероятно, нужно будет скорректировать все имена между скобками, чтобы они идеально соответствовали тому, что у вас есть!) – R3uK

 Смежные вопросы

  • Нет связанных вопросов^_^