본문 바로가기
카테고리 없음

[vba] UserForm에 이름을 입력하면 해당하는 열을 찿아서 메모 삽입 및 읽어오기

by IT HUB 2020. 9. 5.
728x90
반응형

http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=102020101&docId=247755252&ref=me2lnk

본 질문에 답변을 달면서 글로 남겨 봅니다.

 

질문의 내용은 이해할 수 없지만...

나름 심심해서 몇줄 코딩을 해보았습니다.

 

아래사진처럼 이름을 입력하면 해당 열이 자동으로 선택되게 했습니다.

아래 사진에서는"하" 가 되겠지요...

 

입력 버튼을 누렴 아래 사진처럼 셀에 내용이 입력되고 메모가 삽입됩니다.

 

다른 이름도 하나 더해볼까요?

아래 사진처럼 메모가 삽입됩니다.

 

나머지 설명 안한 기능들은 테스트를 하면서 공부해보세요 ^^

시골이라 네트워크 상황이 너무 안좋아서 테더링으로 사용하고 있는데 무지 불편하네요 ...ㅠ.ㅠ

 

 

 

아래는 폼 모듈의 소스입니다.

Private Sub CommandButton1_Click()
    Dim C As Range, T As String
    If Len(TextBox1) = 0 Then MsgBox "이름을 입력하세요": Exit Sub
    If ComboBox1.ListIndex = -1 Then MsgBox "열을 선택하세요": Exit Sub
    Set C = Sheets("sheet1").Columns(ComboBox1.ListIndex + 4).Find(TextBox1, , , 1'// 입력된 이름을 찿는다.
    If C Is Nothing Then    '// 찿는 이름이 없을경우
'        Set C = Sheets("Sheet1").Cells(Rows.Count, "C").End(3)(2).Offset(, ComboBox1.ListIndex + 1)
        On Error Resume Next
        Set C = Sheets("Sheet1").Cells(7, ComboBox1.ListIndex + 4).Resize(Rows.Count - 7).SpecialCells(xlCellTypeBlanks)    '// 빈셀이 있으면
        If Err Then Set C = Sheets("Sheet1").Cells(Rows.Count, ComboBox1.ListIndex + 4).End(3)(2)   '// 빈셀이 없으면 마지막 셀 다음셀
        On Error GoTo 0
    End If
    With C
        .Value = TextBox1   '// 셀에 이름을 넣고
        If .Comment Is Nothing Then '// 메모가 없으면
            .AddComment '// 메모를 생성
            T = Now() & ":" & vbCrLf    '// 매모에 넣을 내용
        Else
            T = .Comment.Text   '// 매모의 내용을 T변수에 넣고
            T = T & vbCrLf & vbCrLf & Now() & ":" & vbCrLf  '// 추가되는 날자와 시간
        End If
        .Comment.Text T & TextBox2  '// 메모에 내용을 넣음
        
        .Comment.Visible = True '// 메모를 활성화 하고
        .Comment.Shape.Select True  '// 메모를 선택
 
        With Selection.ShapeRange   '// 선택된 메모
            .Width = 966 * 0.5  '// 이미지 넓이의 50%
            .Height = 155 * 0.5 '// 이미지 높이의 50%
            .Fill.Visible = msoTrue '// 좌우 비율고정
            '// 이미지를 넣고
            .Fill.UserPicture _
                "http://blogskthumb.phinf.naver.net/20160111_271/program114_1452516785624M2d5t_JPEG/%C4%B8%C3%B3.jpg?type=crop966"
            .ScaleWidth 2, msoFalse, msoScaleFromTopLeft    '// 도형의 넓이를 조정
            .ScaleHeight 2, msoFalse, msoScaleFromTopLeft   '// 도형의 높이를 조정
            .IncrementLeft -125 '// 도형을 수평이동
            .IncrementTop 4 '// 도형을 수직이동
        End With
        .Comment.Shape.AutoShapeType = msoShapeRoundedRectangle '// 도형의 모양
        .Comment.Visible = False   '// 메모를 숨김
        .Offset(, -(ComboBox1.ListIndex + 1)).Value = .Row - 6  '// Data 인덱스 넣음
    End With
End Sub
 
'// 이름을 입력하는 텍스트박스에서 키를 눌렀다 띨경우 이름을 찿아 메모를 텍스트 박스로 넣어줌
Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Dim i As Integer, C As Range
    i = ChoSung(TextBox1)
    If ComboBox1.ListCount < i Then Exit Sub
    ComboBox1.ListIndex = i - 1
    Set C = Sheets("Sheet1").Columns(ComboBox1.ListIndex + 4).Find(TextBox1, , , 1)
    If C Is Nothing Then Exit Sub
    If C.Comment Is Nothing Then Exit Sub
    TextBox2 = C.Comment.Text
End Sub
 
Private Sub UserForm_Initialize()
    Dim T As Variant
    T = Sheets("Sheet1").Range("D6").Resize(, 14).Value
    With ComboBox1
        .List = Application.Transpose(T)
        .ListIndex = -1
        .MatchRequired = True
        .ListWidth = .Width
    End With
End Sub
 

 

아래는 일반 모듈의 소스입니다.

Sub Macro()
  UserForm1.Show 0
End Sub
 
Function ChoSung(T As String)
    Dim k As Long
    ChoSung = 0
    If Mid(T, 11) Like "[가-힣]" Then
        k = AscW(Mid(T, 11))
        k = k - &HAC00
        k = Int(k / (21 * 28))
        ChoSung = Choose(k + 1112334566778991011121314)
    End If
End Function
 

 

 

반응형


댓글