안녕하세요?
VBA에서 아래와 같이 구현하려고 합니다.
sub main()
dim sset as acadselectionset
set ssetObj = ThisDrawing.SelectionSets.Add(“SSET”)
ssetObj.SelectOnScreen
kkk(sset)
end sub
function kkk(byrefl sset As acadselectionset)
Dim Ent As AcadEntity
For Each Ent In sset
Next Ent
end function
위와 같이 하면 오류가 납니다.
함수에 전달하는 다른 방법이 있는것 같은데 아시는분 답변 부탁드립니다.
공유
저도 많이는 모르지만 기초적인 부분이 좀 마음에 걸립니다.
선언한 변수 sset 와 사용한 변수 ssetobj 가 다르고
function을 리턴값을 받지 않으시고
에라발생 및 종료시 ThisDrawing.SelectionSets(“SSET”).Delete 로 지워야
재수행시 지장이 없을텐데 안하시고
무엇을 하시려는지 모르겟지만 저는 아래처럼 변경해보았습니다.
Sub main()
On Error Resume Next
ThisDrawing.SelectionSets(“SSET”).Delete
On Error GoTo 0
Dim sset As AcadSelectionSet
Set sset = ThisDrawing.SelectionSets.Add(“SSET”)
sset.SelectOnScreen
n = kkk(sset)
ThisDrawing.SelectionSets(“SSET”).Delete
End Sub
Function kkk(sset)
Dim Ent As AcadEntity
For Each Ent In sset
Ent.color = 1
Next Ent
End Function
감사합니다.
n=kkk(sset)
call kkk(sset) 가 같은건가요?
우선 다릅니다.
n = kkk(sset)은 kkk루틴의 결과를 n에 넣어주는 것이고
call kkk(sset)은 루틴의 속성에 따라 sset에 결과를 넣을 수도 있고 그냥 어떠한 행위(메서드)를 하고 끝날 수도 있습니다.
기본이 많이 부족하신 것 같네요. 좀 더 공부하시여 기본은 갖추시고 질문하시면 좋겠습니다.
지금은 간단하게
function은 값을 되돌려 받기 위한것이고
Sub는 call로 실행만 한다고 기억하십시오.
님이 용감하게 시도하시는 것은 잘하시는 것입니다.
하지만 너무 급하게 하시려고 하는 것이 보입니다.
자신이 만든 것을 고치고 반성하면서 실력이 늘게 됩니다.
님이 올린 코드는 인용을 하면서 검토를 충분하게 하지 않았다는
표시가 나기에 뭐하남님께서 공부를 하라고 하는 것입니다.
앞의 댓글에 언급을 하지는 않았지만
function kkk(byrefl sset As acadselectionset)에서 변수선언도 잘못 하셧는데
byref나 byval로 하셔야 합니다.
익숙하지 않은 지금은
다른분의 코드를 많이 보시고 너무 많이 선언하지 마시고
꼭 필요한 것을 한줄 한줄 찾아가셔야 합니다.