2017-12-27 24 views
0

클라이언트 정보가 들어있는 통합 문서가 있습니다. 각 클라이언트마다 시트가 있으며 각 시트에는 클라이언트의 고유 ID가 표시됩니다. 사용자가 cobo 상자에서 클라이언트를 선택할 사용자 정의 폼을 시작하려고합니다. 그런 다음 적절한 시트의 마지막 행에서 데이터 사용자 정의 폼을 채 웁니다.사용자 정의 올바른 시트 cobo 값을 기준으로

동일한 통합 문서 내의 다른 코드에서 스크립팅 사전을 사용하고 있지만 특정 시트의 특정 범위에 해당합니다. 모든 시트를 통해 사용자 정의 폼을 검색하여 cobo_ClientID 필드의 값과 동일한 이름을 가진 사용자 시트를 찾은 다음 MAX 업데이트 날짜가있는 행에서 올바른 데이터 요소를 가져 오는 방법에 대한 단서가 없습니다.

가 여기에 다른 지역에서 사용하고 스크립팅 사전의 예 : 다른 포럼에서 제공 한 LastRow 링크, 그리고 몇 가지 조언 사이

Set coboDict = CreateObject("Scripting.Dictionary") 
With coboDict 
    For Each cStatsClientID In ws1.Range("StatsClientID") 
     If Not .exists(cStatsClientID.Value) Then 
      .Add cStatsClientID.Value, cStatsClientID.Row 
     Else 
      If CLng(cStatsClientID.Offset(, -2).Value) > CLng(ws1.Range("B" & .Item(cStatsClientID.Value))) Then 
      .Item(cStatsClientID.Value) = cStatsClientID.Row 
      End If 
     End If 
    Next cStatsClientID 
    Me.cobo_ClientID.List = Application.Transpose(.keys) 
    End With 
+0

올바른 워크 시트를 얻으려면 Worksheet.Name 속성을 사용하고 마지막 행을 검색하려면 [lastRow] (https://www.rondebruin.nl/win/s9/win005.htm) 계산을 사용할 수 있습니까? – QHarr

+0

솔직히 말하면, 나는 아직도 VBA에 비교적 익숙하지 않고 이전에 그 속성을 사용하지 않았기 때문에 확실하지 않습니다.그것을 보면서, 나는 그것이 어떻게 가능할 지 확신하지 못한다. - cobo_ClientID 또는 B의 값에 기초하여 올바른 시트를 확인한다. - 올바른 시트의 값을 가져올 수 있어야한다. MAX 업데이트 날짜 – Rodger

+0

각 클라이언트 시트의 이름은 클라이언트 ID와 동일합니다. ID가 각각 "RB1", "RB2"및 "QJ4"인 3 개의 클라이언트가있는 경우 "RB1", "RB2"및 "QJ4"라는 클라이언트 시트가 3 개 있습니다. 올바른 시트를 식별하는 코드를 얻을 수 있었지만 마지막 시트의 시트에서 셀의 데이터를 가져 오는 코드를 가져올 수 없습니다. – Rodger

답변

0

, 나는 해결책을 가지고 있습니다 생각합니다. 이 문제는 LastRow를 설정하는 방법과 올바른 시트를 찾는 것과 같았습니다.

Private Sub cobo_ClientID_Change() 

Dim Sht As String 
Dim LastRow As Long 

Sht = Me.cobo_ClientID 

With ActiveSheet 
LastRow = .Cells(.Rows.Count, "E").End(xlUp).Row 
End With 

txt_Name = Sheets(Sht).Range("E" & LastRow).Value 
txt_DPPymtAmt = Sheets(Sht).Range("H" & LastRow).Value 

End Sub 
0

이 코드는 각 시트 이름을보고 콤보 상자에 나열합니다. 시트 중 하나를 선택하면 마지막 행의 값을 가져 와서 양식의 텍스트 상자에 배치합니다.

는 사용자 정의 폼에 이러한 컨트롤을 추가

  • 콤보 상자가 txtColA, txtColBtxtColC 이름 cmbSheets
  • 세 개의 텍스트 상자를했다.

    Private Sub UserForm_Initialize() 
    
        Dim wrkSht As Worksheet 
    
        'Populate the combo-box with sheet names. 
        For Each wrkSht In ThisWorkbook.Worksheets 
         With Me.cmbSheets 
          .AddItem wrkSht.Name 
         End With 
        Next wrkSht 
    
    End Sub 
    
    
    'Will place the values from the last row columns A:C in textboxes on the form. 
    Private Sub cmbSheets_Change() 
        Dim rLastCell As Range 
        Dim shtSelected As Worksheet 
    
        'Set a reference to the sheet selected by the combo box. 
        Set shtSelected = ThisWorkbook.Worksheets(cmbSheets.Value) 
    
        Set rLastCell = LastCell(shtSelected) 
    
        With shtSelected 
         Me.txtColA = .Cells(rLastCell.Row, 1) 
         Me.txtColB = .Cells(rLastCell.Row, 2) 
         Me.txtColC = .Cells(rLastCell.Row, 3) 
        End With 
    End Sub 
    
    'This function can be placed in a normal module. 
    'Finds the last cell given a worksheet reference. 
    Public Function LastCell(wrkSht As Worksheet) As Range 
    
        Dim lLastCol As Long, lLastRow As Long 
    
        On Error Resume Next 
    
        With wrkSht 
         lLastCol = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column 
         lLastRow = .Cells.Find("*", , , , xlByRows, xlPrevious).Row 
    
         If lLastCol = 0 Then lLastCol = 1 
         If lLastRow = 0 Then lLastRow = 1 
    
         Set LastCell = wrkSht.Cells(lLastRow, lLastCol) 
        End With 
        On Error GoTo 0 
    
    End Function 
    

    주 - -

값 중 하나를 복사 할 때 FORMAT 명령을 사용하여 추가해야 다음 특정 형식을 필요로합니다.
예. 셀에 01/05/2016의 경우 2016 년 5 월 1 일에 텍스트가 5/1/2016 (미국 날짜 형식으로 변환 됨)으로 표시됩니다.
코드 Me.txtColC = Format(.Cells(rLastCell.Row, 3), "dd-mmm-yy")을 사용하면 양식에 01-5 월 -16으로 날짜가 표시됩니다.
마찬가지로 통화는 Me.txtColB = Format(.Cells(rLastCell.Row, 2), "Currency")으로 추가해야합니다. 그렇지 않으면 £ 15은 으로 표시됩니다.

특정 시트를 제외하려면

당신이 콤보 상자에서 다른 값을 선택으로 변경 시트를 원한다면 단지의 끝에 shtSelected.Select를 추가 SELECT CASE...END SELECT 코드 블록 (또는 IF...ELSE...END IF)

를 보라 cmbSheets_Change() 이벤트.