2013-11-27 3 views
1

"내 vba 코드에서"ActiveCell.OffSet (1,1)을 반복해서 입력하는 대신 변수를 "x"로 정의하고 사용하십시오Excel에서 셀 위치 변수 정의

이 작업을 수행하려면 dim 명령을 사용해야하지만 데이터 형식이 무엇인지 확실하지 않습니다.

제안 사항?

나는 1004

Private Sub CommandButton1_Click() 
    Dim i As Range 
    Set i = ActiveCell 

    ActiveSheet.Range(ActiveSheet.Range(i), ActiveSheet.Range(i).End(xlUp)).Select 

End Sub 
+0

후 귀하의 편집에 무엇이 잘못되었는지 설명이 예제를 고려, 난 내 대답에 약간의 변화를 만들었습니다. 페이지를 새로 고침해야 볼 수 있습니다. –

답변

0
Dim x As Range 
Set x = ActiveCell.OffSet(1,1) 

편집 런타임 오류를 얻을 아래 나는 코드를 사용하여 테스트 할 때 : 당신의 코멘트 님의 질문에 답변

응답에서
Private Sub CommandButton1_Click() 
    Dim i As Range 
    Set i = ActiveCell 
    ActiveSheet.Range(i, i.End(xlUp)).Select 
End Sub 
+0

범위가 의미가 있습니다. 내 질문을 업데이트하여 사용하려고하는 컨텍스트를 볼 수 있습니다. 내 목표는 활성 셀 위의 연속 범위를 선택하는 것입니다. 이견있는 사람? – user3033634

3

당신의 편집에

.Select/Activate의 사용을 피하고 개체의 자격을 완전히 부여하십시오. 당신은 여전히 ​​다음이 참조 코드를 잘못 무엇인지 알고 싶다면 INTERESTING READ

는 귀하의 코드는

Private Sub CommandButton1_Click() 
    Dim ws As Worksheet 
    Dim rng1 As Range, rng2 As Range 

    '~~> Change as applicable 
    Set ws = ThisWorkbook.Sheets("Sheet1") 

    With ws 
     Set rng1 = ws.Range("A10") 

     Set rng2 = .Range(rng1, rng1.End(xlUp)) 

     With rng2 
      Debug.Print .Address 
      ' 
      '~~> Do something with the range 
      ' 
     End With 
    End With 
End Sub 

과 같이 쓸 수있다.

범위를 이미 정의했습니다. ActiveSheet.Range()을 다시 추가 할 필요가 없습니다. 실제로 문제가하거나 중복 ActiveSheet.Range() 귀하의 코드를 주석

에서

Private Sub CommandButton1_Click() 
    Dim i As Range 

    Set i = ActiveCell 

    ActiveSheet.Range(i, i.End(xlUp)).Select 
End Sub 

편집

후속 조사로 기록 할 수 있었나요? - user3033634 14 분 전

이것은 problematic입니다. 다양한 개체의 기본 속성은 .Value

이 코드

Sub Sample() 
    Dim ws As Worksheet 
    Dim rng As Range 

    Set ws = ThisWorkbook.Sheets("Sheet1") 

    With ws 
     Set rng = .Range("A1") 

     rng.Value = "Blah" 

     MsgBox rng   '<~~ This will give you "Blah" 
     MsgBox rng.Value  '<~~ This will give you "Blah" 
     MsgBox rng.Address '<~~ This will give you "$A$1" 

     MsgBox ws.Range(rng) '<~~ This will give you an error 
     '~~> Why? Becuase the above is evaluated to 
     'MsgBox ws.Range("Blah") 

     MsgBox ws.Range(rng.Address) '<~~ This will give you "Blah" 
    End With 
End Sub 
+0

ActiveSheet.Range()가 실제로 문제가 있거나 중복 되었습니까? – user3033634

+0

'problematic' :) –

+1

설명해 드리겠습니다. 범위의 기본 속성은'.Value'이므로'ActiveSheet.Range (i)'라고하면 ActiveSheet.Range (I의 주소)가 아니라'ActiveSheet.Range (VALUE OF I)'를 의미합니다 –