2016-07-03 1 views
0

Excel VBA에서 사용자 정의 함수 (UDF)를 만들었습니다.이 함수는 2 열의 내용을 선택하고 결과로 평가합니다. 다른 통합 문서가 열리지 않으면 UDF가 올바르게 평가되지만 다른 통합 문서가 동시에 열리면 0으로 변경됩니다. 문제가 처음 몇 단계에 있으며 입력을 읽었습니다.다른 통합 문서를 열면 Excel 사용자 정의 함수가 0으로 평가됩니다.

Set Sheet = ThisWorkbook.Worksheets(inputSheet) 
For i = 0 To numrows 
    array_multi(i, 0) = Cells(inputRow1 + i, inputCol1) 
    array_multi(i, 1) = Cells(inputRow2 + i, inputCol2) 
Next 

누군가 내가이 문제를 해결하는 데 도움을 줄 수 있습니까? 자세한 내용이 필요하면 알려주십시오.

+1

_whole_ UDF를 게시하십시오. –

+0

'Cells()'는 그들이 있어야하는 시트에서 참조되어야합니다. 그렇지 않으면 값은'Activesheet'에서 읽혀질 것입니다. –

답변

2

코드에 시트를 사용하면 값을 배열에 할당 할 때 사용하지 않습니다.

Set Sheet = ThisWorkbook.Worksheets(inputSheet) 
array_multi(i, 0) = Cells(inputRow1 + i, inputCol1) 
array_multi(i, 1) = Cells(inputRow2 + i, inputCol2) 

배열은 오른쪽 워크 시트 및 통합 문서에서 값을 읽어 확인하기 위해 Sht.Cells를 사용해보십시오.

Set Sht = ThisWorkbook.Worksheets(inputSheet) 
For i = 0 To numrows 
    array_multi(i, 0) = Sht.Cells(inputRow1 + i, inputCol1) 
    array_multi(i, 1) = Sht.Cells(inputRow2 + i, inputCol2) 
Next 
+0

'ThisWorkbook'은 특별히 다른 값을 가지지 않고 항상 코드가있는 통합 문서라고 생각했습니다. – arcadeprecinct

+0

@arcadeprecinct 당신이 맞습니다. 단지'Sht' 객체에 대한 참조를 고쳐 주어야합니다. –

+0

아 나는 누락 된 시트 참조를 놓쳤습니다. 다음 줄에. 그래서 문제는'Cells '에 의해 사용되는'ActiveSheet'가 변화하고 있다는 것입니다. – arcadeprecinct

0

Cells 객체 규정하지 않는 한 ActiveWorkbook.ActiveSheet을 말한다. 당신은 사용할 수 있습니다

With ThisWorkbook.Worksheets(inputSheet) 
    For i = 0 To numrows 
     array_multi(i, 0) = .Cells(inputRow1 + i, inputCol1) 
     array_multi(i, 1) = .Cells(inputRow2 + i, inputCol2) 
    Next i 
End With 

샤이의 대답은 100 % 맞습니다. 동의하고 upvote 자신의 대답을하시기 바랍니다.

관련 문제