이 게시판은 아별닷컴 회원만 질문을 올릴 수 있습니다. 회원에게 주어지는 특권인셈이지요. 회원이 아닌 분들은 열람만 가능합니다.
글 수 113
업무 중에 답답한게 있어서 코드 수정 좀 부탁드리고쟈 이렇게 글을 올립니다. 엑셀2010 32비트, 윈764비트 입니다.
아래코드는 매크를 실행하면 범위설정 대화상자가 뜨는데요.범위를 설정하면 범위 안에 있는 개체가 선택되어집니다.그런데 위 코드는 범위 안에 개체가 전부 들어가 있어야만 하는데요.이런 것을 범위 안에 전부 들어와야만 선택이 되도록 하는 방법과 범위안에 일부라도 들어와도 선택이 되게끔 하는 것이죠.그래서 매크로를 실행하면 나타나는 대화상자에 옵션단추가 두개(즉, 범위 일부, 범위 전부)가 있고범위설정 할 수 있게 구성해서 사용자가 옵션단추를 선택하고 범위를 설정하게 하는 것이죠.어떻게 수정하면 좋을런지요?
Sub 선택영역개체선택()
Dim MyShape As Object
Dim rngSelect As Range
Dim rngMySahpe As Range
Dim rngSelectedCells As Range
Dim arrShape() As Variant
Dim W As Worksheet
Dim i, j
On Error Resume Next
Set W = ActiveSheet
i = W.Shapes.Count
If i > 0 Then
j = 1
Set rngSelectedCells = Application.InputBox(Prompt:=i & " 개가 있습니다. 작업 하고자하는 범위를 선택하세요" _
, Title:="범위 선택", Type:=8)
Application.ScreenUpdating = False
ReDim arrShape(1 To i)
For Each MyShape In W.Shapes
Set rngMySahpe = MyShape.TopLeftCell
Set rngSelect = Application.Intersect(rngSelectedCells, rngMySahpe)
If Not rngSelect Is Nothing Then
arrShape(j) = MyShape.Name
j = j + 1
End If
Next MyShape
If j > 1 Then
ReDim Preserve arrShape(1 To j - 1)
W.Shapes.Range(arrShape).Select
End If
Set rngMySahpe = Nothing
Set rngSelect = Nothing
Set rngSelectedCells = Nothing
Set W = Nothing
Erase arrShape
If j > 1 Then
MsgBox j - 1 & " 개 선택"
End If
Application.ScreenUpdating = True
End If
End Sub
아래코드는 매크를 실행하면 범위설정 대화상자가 뜨는데요.범위를 설정하면 범위 안에 있는 개체가 선택되어집니다.그런데 위 코드는 범위 안에 개체가 전부 들어가 있어야만 하는데요.이런 것을 범위 안에 전부 들어와야만 선택이 되도록 하는 방법과 범위안에 일부라도 들어와도 선택이 되게끔 하는 것이죠.그래서 매크로를 실행하면 나타나는 대화상자에 옵션단추가 두개(즉, 범위 일부, 범위 전부)가 있고범위설정 할 수 있게 구성해서 사용자가 옵션단추를 선택하고 범위를 설정하게 하는 것이죠.어떻게 수정하면 좋을런지요?
Sub 선택영역개체선택()
Dim MyShape As Object
Dim rngSelect As Range
Dim rngMySahpe As Range
Dim rngSelectedCells As Range
Dim arrShape() As Variant
Dim W As Worksheet
Dim i, j
On Error Resume Next
Set W = ActiveSheet
i = W.Shapes.Count
If i > 0 Then
j = 1
Set rngSelectedCells = Application.InputBox(Prompt:=i & " 개가 있습니다. 작업 하고자하는 범위를 선택하세요" _
, Title:="범위 선택", Type:=8)
Application.ScreenUpdating = False
ReDim arrShape(1 To i)
For Each MyShape In W.Shapes
Set rngMySahpe = MyShape.TopLeftCell
Set rngSelect = Application.Intersect(rngSelectedCells, rngMySahpe)
If Not rngSelect Is Nothing Then
arrShape(j) = MyShape.Name
j = j + 1
End If
Next MyShape
If j > 1 Then
ReDim Preserve arrShape(1 To j - 1)
W.Shapes.Range(arrShape).Select
End If
Set rngMySahpe = Nothing
Set rngSelect = Nothing
Set rngSelectedCells = Nothing
Set W = Nothing
Erase arrShape
If j > 1 Then
MsgBox j - 1 & " 개 선택"
End If
Application.ScreenUpdating = True
End If
End Sub
댓글 '5'
제가 답변 드린 것은,
문제 해결을 위한 가이드일뿐입니다. "팁"을 드린 것이지요..
도형 전체가 포함되었는지를 체크하려면 TopLeftCell뿐만아니라 BottomRightCell도 같이 체크해야한다는 "팁"을 드린겁니다.
위 팁을 응용하시면 문제 해결에 한발짝 더 접근할거라 생각했습니다.
제가 드린 팁을 바탕으로 한번 더 고민을 해보시고..
수정하신 코드를 다시 한번 올려주세요.. 그럼 제가 그것을 보고 다시 수정할 방향을 알려드겠습니다.
그렇게 접근하는게 공부하시는데 더 도움이 될 것 같습니다.
혹시라도,
공부하실 생각이 없으시다면 유료로 엑셀 솔루션을 개발해주는 곳을 소개해드리겠습니다.
도움이 되셨기를..
고수가 되고파님..
팁을 드리자면..
'# 아래의 코드를..
Set rngMySahpe = MyShape.TopLeftCell
'# 아래처럼 바꾸세요..
Set rngMySahpe = Range(MyShape.TopLeftCell, MyShape.BottomRightCell)
사용자가 선택한 셀과 rngMySahpe의 intersect한 셀의 갯수가 rngMySahpe의 셀의 갯수와 같으면 완전히 포함되는 것이고, 1보다 크고 rngMySahpe의 갯수보다 작으면 일부만 포함되는 것입니다.
그리고 rngMySahpe는 rngMyShape의 오타인것 같네요.. 타이핑할때마다 헷갈립니다. ^_^;;
도움이 되셨기를..