none
•_같은 macro가 모듈에서는 작동되는데 sheet에서는 작동 안됨. 해결 방법은? RRS feed

  • 질문

  • 답변이 없어서 다시 올립니다.

    • 다음과 같이 A값이 VBAProject Module에서는 정상적으로 나오나, sheet 에서 작동는 작동되지 않습니다. 해결 방법은 없나요?

    Sub No()

    Dim A As Integer
    Sheets("
    분석").Select
    A = Range("T17").Value

    End Sub

    • A 값을 취하여 다음과 같이 지정 영역을 정하여 조건부 서식에 사용하려고 합니다.

    Private Sub Worksheet_Change(ByVal Target As Range)

    Dim KeyCells_I As Range

    Set KeyCells_I = Range("I897:I5000")

    No

    Range("I" & A & ":I10000").Select ' 지정 영역

    '그리고 조건부서식 실행하려고 하나 이단계에서 A 값이 o으로 계속 인식되어 1004 런타임 오류 발생됩니다.

    " ' Range' 메서드('_worksheet' 개체의)에서 오류가 발생하였습니다."

    Module에서와 같이 No macro 실행되어 A 값이 인식되듯이, sheet에서도 A값이 o 아니라 정상적으로 인식되어 range 오류 없이 작동하게 할수 있는 방안은 없나요?

    2015년 4월 1일 수요일 오전 2:54

답변

  • 아래와 같이 해보시길 바랍니다.

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells_I As Range
    Dim A As Long
    
    A = Sheets("분석").Range("t17").Value
    Set KeyCells_I = Range("I897:I5000")
    
    Range("I" & A & ":I10000").Select
    End Sub

    감사합니다.

    2015년 4월 3일 금요일 오전 8:49
    중재자

모든 응답

  • 리턴 값을 사용하려면 "함수"를 사용해야 하지 않을까 싶네요..
    2015년 4월 1일 수요일 오전 3:17
  • 어떤 함수를 사용한다는 의미인지요? 보다 자세한 설명을 하여 줄수 있나요?

    2015년 4월 1일 수요일 오전 7:45
  • 그건, 본인이 더 잘 아시겠죠..

    A 값을 "취"하려면, 리턴 말고 다른 방법이 있는가요 ?

    프로시줘는 리턴 값 없습니다. 그러니까, 함수죠..

    2015년 4월 1일 수요일 오전 10:45
  • 아래와 같이 해보시길 바랍니다.

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells_I As Range
    Dim A As Long
    
    A = Sheets("분석").Range("t17").Value
    Set KeyCells_I = Range("I897:I5000")
    
    Range("I" & A & ":I10000").Select
    End Sub

    감사합니다.

    2015년 4월 3일 금요일 오전 8:49
    중재자
  • 안녕하세요. 

    VB MVP 고성만 입니다.

    아래와같이 한번 해보세요.

    # 시트에 정의

    Private Sub Worksheet_Change(ByVal Target As Range)
    
      Dim KeyCells_I As Range
    
      Set KeyCells_I = Range("I897:I5000")
    
      No
    
    End Sub
    

    #모듈에 정의

    Sub No()
       Dim A As Integer
       Sheets("분석").Select
       A = Range("T17").Value
       ActiveSheet.Range("I" & A & ":I10000").Select
    End Sub

    모듈에서는 시트를 오브젝트로만 보는것이 아니므로 

    Range의 경우에는 시트를 지정해주어야 합니다.

    모듈에서 보면, 시트는 WorkBook 전체에 있는것들이기 때문에 대상을 특정하여 실행할수가 없기때문이죠.

    바꾸어서 말하자면,

    작성하신 모듈부 (No 메소드) 에서는 

    분석이라는 시트를 선택하고 있으므로, 

    ActiveSheet 라는 오브젝트 지정을 통하여, 현재 Range 지정해야하는 시트가 어디의 Range 인지를 

    분명하게 명시하여 줌으로써 이 문제를 해결할수 있습니다.

    좋은하루 되세요.


    프로그램 개발에는 정답이 없다.


    • 편집됨 Sungman KOMVP 2015년 4월 15일 수요일 오전 6:50
    2015년 4월 15일 수요일 오전 6:49