2017-10-02 3 views
0

서브 사이에서 값을 앞뒤로 전달하는 방법을 배우려고합니다. 나는 궁극적으로 동일한 코드 라인을 반복적으로 사용하는 매크로 서브를 몇 개 만들었습니다. 시작하려면 열과 행 수를 조회/계산할 수 있어야합니다. 이것은 내가 지금까지 가지고 있지만 작동하지 않습니다.VBA 서브 사이의 패스 값

또한 행을 넘어서 확장하고 싶습니다.

Public Sub main() 
Dim lCols As Integer 
Dim lRows As Integer 

    lCols = countCols(Sheet1) 

    Sheet1.Range("M2").Value = lCols 

End Sub 

Public Function countCols(sheetValue As Worksheet) As Variant 
     countCols = sheetValue.Cells(Rows.Count, 1).End(x1Up).Row 
    Exit Function 
End Function 

는 지금 그것이 sheetValue에 "시트 1"을 통과하지 않는 나타납니다 ... 함수 내 달려 있습니다.

+3

'x1Up'이'가'1'하지 L''소문자를 xlUp'해야합니다. –

+0

참고로이 질문에 대답하기 전에 다음 링크를 참조하십시오. https://stackoverflow.com/questions/17998773/set-a-variable-in-one-sub-and-use-in-another/17999208# 17999208 –

+0

Scott 님의 의견으로는 문제가 해결되지 않는 경우 질문이 "중단됩니다"라는 의미에 대한 자세한 내용으로 업데이트하십시오. ('xlUp' 대신에'x1Up'을 사용하면 일반적으로 "응용 프로그램 정의 또는 객체 정의 오류"로 코드가 충돌하거나 hang이 아닌 잘못된 값을 반환합니다. – YowE3K

답변

2

몇 가지 포인트 :

  1. 그것은 긴으로 행과 열 변수를 선언하는 것이 좋습니다. this을 참조하십시오. Integer
  2. 당신이 선언 한 변수는 lCols, lRows 다음 기능의 유형도 Integer
  3. 귀하의 경우 Exit Function를 사용 할 필요가 없어야합니다 돌아갑니다. Exit Function은 함수를 종료하고 함수 호출 다음의 명령문을 실행하는 데 사용됩니다. 그러나 귀하의 경우에는 기능 자체가 종료되므로 출구가 필요하지 않습니다.

다음 시도

Public Sub main() 
    Dim lCols As Long, lRows As Long 'declared as long 
    Dim ws As Worksheet 

    Set ws = ThisWorkbook.Sheets("Sheet2") 'change Sheet2 to your data sheet 

    lCols = countCols(ws) 
    lRows = countRows(ws) 

    ws.Range("M2").Value = lCols 
    ws.Range("N2").Value = lRows 

End Sub 

Public Function countCols(sheetValue As Worksheet) As Long 'should return long 
     countCols = sheetValue.Cells(1, sheetValue.Columns.Count).End(xlToLeft).Column 
End Function 

Public Function countRows(sheetValue As Worksheet) As Long 'should return long 
     countRows = sheetValue.Cells(sheetValue.Rows.Count, 1).End(xlUp).Row 
End Function 
+0

자주 새로 고침해야합니다 .. @ c3nixon 그의 코드는'Option Explicit'과 Sheet1 객체가 없어서 깨집니다. countCols가 Null을 얻을 수있는 기회가 있습니까? 아니면주의해야합니까? – BitAccesser

+1

@BitAccesser - 데이터가있는 행이나 열이 없으면 '셀 (행 번호, 1). 끝 (열 번만). 로우'및 '셀 (열 번호, 열 개수). 끝 (xlToLeft). 열'이 반환됩니다. '1'. – Mrig

+0

@BitAccesser 함수가'Long'을 반환하면'Null'을 얻을 수 없습니다. –