2016-07-29 3 views
0

나는 3 개의 필드 (COMNAME; COMCOMPANY; TXTVALUE)를 가진 userform을 가지고있다 COMNAME과 COMCOMPANY (콤보 상자) 값이 C와 C의 행 값과 일치 할 때 열 F에서 TXTVALUE (텍스트 상자)로 값을 전달하려고했다. PA (COMCOMPANY)와 CT (COMNAME)를 선택하는 경우 내가 txtvalue의 결과가 좋은이 매크로를 실행하면 D.에서 데이터 전달하기

Dim var1 As Integer 
Dim var2 As Integer 

With Application.WorksheetFunction 

var1 = .Match(Me.COMCOMPANY.Value, sheet.range("C7:C10"), 0) 
var2 = .Match(Me.COMNAME.Value, sheet.range("D7:D10"), 0) 

TXTVALUE.Value = .Index(sheet.range("F7:F10"), var1, var2) 

End With 

표이

column C |column D |Column F 
PA  | CT | 750 
RS  | HA | 550 
PA  | CS | 358 

처럼 보이는 - tXTVALUE이 750 만시 PA (COMCOMPany) 및 CS (COMNAME) - 매크로 반환 오류 "를 선택할 수 없습니다. 인덱스 p를 가져올 수 없습니다. WorksheetFunction 클래스의 roperty ".

이 코드 또는 코드를 어떻게 작동시키는 지 확인하십시오. 고마워요

답변

0

색인 기능 (및 가능한 경우 일치 기능)이 어떻게 작동하는지 혼란 스러울 것 같습니다.

경기 기능은 다음과 같이 작동

MATCH(x, rng, intExact)

의 범위 rng의 첫 번째 값 x을 찾기 위해 수단과 intExact 매개 변수는 정확하게 일치보다 첫 번째 값 덜할지 여부를 정의하고, 또는 x보다 큰 값이어야합니다. 귀하의 경우 intExact = 0이고 정확하게 동일한 값을 찾고 있습니다. 이 함수는 첫 번째 일치 항목이 발견 된 행 번호를 범위의 맨 처음부터 반환합니다.

셀에 D6:F9을 표시한다고 가정하면 var1은 PA에 대해 1을 반환합니다. Var2는 CT의 경우 1을, CS의 경우 3을 반환합니다. 두 변수 사이에는 아무런 관련이 없습니다. Var1은 사용자의 입력에 대해 D 열에서 검색하고 Var2는 두 번째 입력에 대해 F 열에서 검색합니다.

INDEX 기능은 다음과 같이 작동

INDEX(rng, lngRow, lngCol)

rng에 가서 지정된 행, 범위의 상단 왼쪽부터 lngrow 및 열 lngcol을 얻을 것을 의미합니다. 첫 번째 경우 행 1과 열 1을 F7:F10 범위에서 선택하면 750이됩니다. 우연의 일치는 E 칼럼의 일치가 첫 번째 행에 있기 때문에 발생합니다.

두 번째 경우 행 1과 열 3의 값을 선택하려고하지만 범위에 열이 하나만 있으므로 오류가 발생합니다.

조회 열과 결합해야합니다.

column C |column D |Column F | Column Z 
PA  | CT | 750  | PACT 
RS  | HA | 550  | RSHA 
PA  | CS | 358  | PACS 

그리고 기능을 사용 :

Var1 = .Match(Me.COMCOMPANY.Value & Me.COMNAME.Value, _ 
        sheet.range("Z7:Z10"), 0) 

TXTVALUE.Value = .Index(sheet.range("F7:F10"), var1) 

당신은 지수 함수의 열 매개 변수를 생략 할 수 있습니다.

무슨 일이 일어나고 있는지 확실하지 않으면 변수가 무엇인지 알면서 코드를 단계별로 실행하는 것이 가장 좋습니다.WorksheetFunction 함수의 경우 실제로 함수를 셀에 넣고 변수가 문제를 해결할 수있는 값을 제공 할 수 있습니다.

0

사용 Application.Match 기능은 가능한 오류가 발생되는 것을 방지하고 Variant 유형의 반환 변수를 처리하는

Dim var1 As Variant 
Dim var2 As Variant 

With Application 
    var1 = .Match(Me.COMCOMPANY.Value, sheet.range("C7:C10"), 0) 
    If Not IsError(var1) Then 
     var2 = .Match(Me.COMNAME.Value, sheet.range("D7:D10"), 0) 
     If Not IsError(var2) And var1 = var2 Then Me.TXTVALUE.Value = sheet.range("F7:F10").Rows(var1) 
    End If 
End With