rand(life)
[vba] 다른 시트에 있는 그림 랜덤으로 불러오기(이미지컨트롤) 본문
사용자 정의 폼은 아직 익숙하지 않다
원래는 "어떤 시트에 있는 그림 중 랜덤으로 다른 시트에 불러오고 싶다"는 지식인 질문이 있어서 거기에 대한 답을 하려고했다.
그림 자체만 불러오는 것은 쉽다
Set ws = Sheets("sheet2")
For Each pic In ws.Pictures
ReDim Preserve arr(1, i)
arr(0, i) = pic.Name
arr(1, i) = pic.TopLeftCell.Address
i = i + 1
Next pic
이런 식으로 Sheet2에 있는 그림의 이름을 배열로 받은 다음, 배열의 인수를 랜덤으로 돌려서
그 인수를 가진 배열에서 그림의 이름을 받아와서 시트에 불러오면 된다. (복사 - 붙여넣기)
그런데, 조건이 하나 있었던 것이 "이미지 틀"에 불러오고 싶다는 것이었다.
이 부분이 좀 어려웠다. 대개 이미지 컨트롤에 불러올 때는 URL이나 하드디스크의 경로에서 불러오는 것이지
같은 파일의 다른 시트에 있는 그림을 불러오는 방법은 잘 쓰지 않기 때문이다
구글링을 해보니 두 가지 방법이 나왔다.
1. 시트에 있는 그림을 HDD에 저장했다가, LoadPicture로 불러오면서 해당 그림의 경로를 지정하고,
불러온뒤에는 HDD에 저장했던 이미지를 삭제하는 방법
(예를 들어, 이렇게 할 수 있다)
2. 윈도우 API를 이용하는 방법
2번의 방법은 첨부화일에 있다. 역시 출처는 구글링을 통해 얻었다.
마지막에, 그림 옆에 해당 그림이 있는 셀의 주소를 표시해주는 데서 또 삽질 반복.
처음에는 TextBox를 만들고 거기에 텍스트를 표시하려고 했는데, TextBox는 텍스트의 "입력"을 받는 컨트롤이라는 것을 뒤늦게 알고
Label을 이용하기로 했다.
Controls("Label1").Caption = CStr(arr(1, lpic))
arr은 위에서 그림파일의 이름과 셀주소를 받은 배열이고
lpic은 랜덤으로 뽑은 숫자이다.