2017-12-27 11 views
0

私はクライアント情報を格納するブックを持っています。各クライアントにはシートがあり、各シートにはクライアントの一意のIDがラベルされています。私は、ユーザがコボボックスからクライアントを選択するユーザフォームを起動したいと思っています。その後、適切なシートの最後の行からのデータがユーザーフォームに入力されます。ユーザーフォーム正しいシートを特定するcobo値

同じブック内の他のコードでは、スクリプト辞書を使用していますが、これらはすべて特定の範囲の特定のシートに関連付けられています。私はどのようにcobo_ClientIDフィールドの値と同じ名前を持つものを見つけるために、すべてのシートを検索するUserFormのコードをして、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

このコードでは、各シート名がコンボボックス内に表示されます。いずれかのシートを選択すると、最後の行の値がフォームのテキストボックスに配置されます。

ユーザーフォームにこれらのコントロールを追加します。

  • コンボボックスがtxtColAtxtColBtxtColCという名前cmbSheets
  • 3つのテキストボックスと呼ばれます。

    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-May-16と表示されます。
同様に通貨はMe.txtColB = Format(.Cells(rLastCell.Row, 2), "Currency")として追加する必要があります。それ以外の場合は£15はと表示されます。

あなたが特定のシートを除外したい場合はSELECT CASE...END SELECTコードブロック(またはIF...ELSE...END IF)を見て

あなたが別の値を選択するように、シートは、コンボボックスに変更したい場合は、単にの最後にshtSelected.Selectを追加cmbSheets_Change()イベント。

関連する問題