• 쇼핑몰
  • 커뮤니티
  • 북마크

vb6.0/vba




[Q&A] [vba] 품목 사진 리스트 / 사진대지 / 쇼핑몰 사진대지 / 쇼핑몰 품목 사진 관리대장

하나를하더라도최선을
2020.02.15 22:24 784 0
  • - 첨부파일 : 상품DB-TEST.xlsm (69.8K) - 다운로드

본문



Q ::: 엑셀(Excel) 다른시트에서 조건에 부합하는 이미지 불러오기 (매크로)

아래와 같은 "사진"시트에 이미지를 포함한 리스트가 존재합니다.


7676b35c1ce81a898f13b0295c1f8b40_1581772794_1005.png
 


여기서 이미지를 다른 시트로 불러가려면 좀 더 규칙적인 것이 필요하다
우선 이 부분부터 해결을 해보자...
바코드가 유니크한 값이 될 것 같네요.
바코드가 기준이 되어 이미지 및 데이터를 관리하도록 구현해 보겠습니다. 


Sub 삽입된이미지이름을바코드로()
    Application.ScreenUpdating = False
    Dim shp As Shape, C As Range
    For Each shp In Sheet1.Shapes
        Set C = shp.TopLeftCell.MergeArea
        shp.Name = "shp_" & C(11).Offset(, 2).Value
        shp.Top = C.Top + 2
        shp.Left = C.Left + 2
        shp.Width = C.Width - 4
        shp.Height = C.Height - 4
    Next
End Sub


이렇게 작성한 메소드(method)를 실행 하여 이미지를 바코드 기준으로 변경하였습니다.



다음으로 질문 내용으로는 위 "사진"시트의 데이터에서 아래와 같이 정리를 하고 싶은 것 같습니다. 


7676b35c1ce81a898f13b0295c1f8b40_1581772838_791.png
 

"발주표" 시트와 "DATABASE" 시트의 연결고리는 바코드입니다.
바코드를 기준으로 이미지를 불러오는 작업을 구현해보겠습니다. 


Sub 이미지불러오기()
    Dim P As Picture, C As Range
    Sheet2.Pictures.Delete
    Dim i As Integer, n As Integer
    Application.ScreenUpdating = False
    For i = 11 To Sheet2.Cells(Rows.Count, "C").End(3).Row Step 13
        For n = 4 To 16 Step 3
            If Not IsError(Sheet2.Cells(i, n).Value) Then
                Set P = isImage(Sheet2.Cells(i, n).Value)
                If Not P Is Nothing Then
                    Set C = Sheet2.Cells(i + 1, n).MergeArea
                    C.Value = ""
                    C.Select
                    P.Copy
                    Sheet2.Paste Destination:=C
                    With Selection
                        .Width = C.Width - 4
                        .Height = C.Height - 4
                        .Top = C.Top + 2
                        .Left = C.Left + 2
                    End With
                Else
                    Sheet2.Cells(i + 1, n).Value = "이미지 없음"
                End If
            End If
        Next
    Next
End Sub
 
Function isImage(ByVal shpName As StringAs Picture
    On Error GoTo ErrPass
    Set isImage = Sheet1.Pictures("shp_" & shpName)
ErrPass:
    If Err Then Err.Clear
End Function


이렇게 하여 이미지를 쉽게 불러올 수 있게 되었습니다.


아래는 "이미지불러오기" 메소드를 실행한 결과입니다.

7676b35c1ce81a898f13b0295c1f8b40_1581773434_7201.png
 



댓글목록 0

등록된 댓글이 없습니다.