2016-09-05 30 views
0

數據我已經在VBA創建的用戶窗體如下: enter image description here查找在VBA基於多個變量用戶窗體

一旦用戶填寫表單,該記錄將被保存在「Sheet2的」。對於每個控制ID,應該有3個可能的活動。我想要做的是在用戶輸入控件ID和活動名稱後,表單將填充來自「Sheet2」的現有數據。這是我用「索引」/「匹配」提出的,但它返回「類型不匹配」錯誤。

Private Sub Reg3_AfterUpdate() 

With Me 
.Reg2 = Application.WorksheetFunction.Index(Sheet2.Columns(3), Application.WorksheetFunction.Match(1, (Sheet2.Columns(2) = CLng(Me.Reg1)) * (Sheet2.Columns(4) = CLng(Me.Reg3)), 0)) 

End With 

End Sub 

Reg1是位於第2列的控制ID; Reg2是位於第3列的全名;和 Reg3是位於第4列的活動。

有人可以幫我嗎?

回答

0

像這樣的東西可以讓你在賽道

      '-- lets assume you want value from row 1, column 3 
          ' from "Sheet2" 
Dim wb As Workbook 
Dim ws As Worksheet 

Dim row As Integer, column As Integer 

Set wb = ActiveWorkbook 
Set ws = wb.Sheets("Sheet2") 
row = 1 
col = 3 

Me.Reg2.Text = ws.Cells(row, col) 
+0

感謝您的回覆。但是,你所做的假設太僵化了。我只知道每個變量的列,但我不知道行。這就是我使用「索引/匹配」的原因。我需要根據兩個條件查找值(控制ID和活動) – Cypress

+0

托馬斯有很好的解決方案,你也可以設置一個循環 – Felix

1

托馬斯有一個很好的解決方案。如果你希望只使用VBA(沒有Excel函數),你還可以設置這樣的搜索循環:

With ws 
    For row = fisrtRow To lastRow 
     val = .Cells(row, col) 
     If val = controlID And val = activity Then 
      '.... 
     Else 
      '... 
     End If 
    Next row 
End With 
+0

實際上我沒有考慮第二個條件。你的解決方案是正確的+1 –

0
here is the best solution for you 


write the following code ih the after update event 

Private Sub Reg3_AfterUpdate() 
SheetS("SHEET2").Range("A1:C4").Select 
Selection.AutoFilter 
    SheetS("SHEET2").Range("$A$1:$C$4").AutoFilter Field:=1, Criteria1:="=Product no", Operator:=xlAnd 

    SheetS("SHEET2")..Range("$A$1:$C$4").AutoFilter Field:=1, Criteria1:="=Activity", Operator:=xlAnd 

'add your code to get the value from range(a2:c2) like the following 
FULLNAME.TEXT=SHEETS("sheet2").range("B2) 
End Sub 



'in this example I assume that the data is stored in range(A1:C4) 
'SO AFTER YOU APPLY THE FILTER YOU WILL GET ONE UNIQUE ROW REPRESENTING 
'YOUR 'DATA .THEN YOU JUST NEED TO IMPORT THE DATA FROM THE sheet2 CELLs 

'and so on