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

  • 질문

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

    Sub No()

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


    • 편집됨 HJ Jang 2015년 3월 25일 수요일 오후 11:50
    2015년 3월 25일 수요일 오후 11:49

모든 응답

  • 현재 주신 소스는 Sheet 아무런 작동하지 않는게 맞는것 같은데...출력 또는 메시지를 띄우는 코드가 보이지 않습니다.

    어떻게 작동되길 원하시는 것인가요?

    [참고자료]

    http://www.excel-easy.com/vba/range-object.html

    제시해 드린 답변이 도움이 되었기를 바랍니다.
       
    답변이 문제 해결에 도움이 되었다면 답변으로 채택을 부탁드립니다.
    하지만 문제 해결이 되지 않아서 정확한 답변을 원하는 경우에는 문제의 정보를 더 자세하게 답변으로 제공해주시기 바랍니다

    2015년 3월 26일 목요일 오전 8:09
    중재자
  • 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가 오류 없이 작동하게 할수 있는 방안은 없나요?


    • 편집됨 HJ Jang 2015년 3월 26일 목요일 오후 10:59
    2015년 3월 26일 목요일 오후 10:50
  • 아래와 같이 해보시길 바랍니다.

    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월 5일 일요일 오후 11:58
    중재자
  • 감사합니다.

    하지만 여전히 sheet에서는 값을 인식하지 못합니다.

    이유는 모르지만 sheet에 있는 "NO macro"를 module로 옮겨서 실행하니 작동 되네요.

    즉 모두 sheet에 있던 macro를 다음과 같이 분리하면, A 값을 인식하여 오류가 발생되지 않네요.

    원래 sheet에서는 값을 인식하지 못하는 것인가요?????

    sheet에 기록

    =======================

    Private Sub Worksheet_Change(ByVal Target As Range)  

      Dim KeyCells_I As Range 

      Set KeyCells_I = Range("I897:I5000")

      No

    End sub

    Module 에 기록

    =====================

    Sub No()

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

    End Sub


    • 편집됨 HJ Jang 2015년 4월 6일 월요일 오후 11:08
    2015년 4월 6일 월요일 오후 11:07
  • 해당 파일을 클라우드 서비스를 이용하여 OneDrive나 개인 블로그에 첨부하셔서 공유해주시면 Test를 진행해보겠습니다.

    정보 제공 부탁드리겠습니다.

    감사합니다.

    2015년 4월 9일 목요일 오전 1:26
    중재자
  • 안녕하세요. 

    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 인지를 

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

    좋은하루 되세요.


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

    2015년 4월 15일 수요일 오전 6:48