vba¿¡¼­ À¯ÀúÆû¿¡ 50°³ÀÇ Textbox°¡ ÀÖ°í ±×Áß 20°³°¡ ¼ýÀÚÀÔ·ÂÀ» À§ÇÑ Textbox°¡ ÀÖ´Ù°í ÇÏ¸é ¼ýÀÚÀÔ·ÂÀ» À§ÇÑ Textbox¿¡ ÁøÀԽà NumlockÀÌ ÀÚµ¿ ¼³Á¤µÇµµ·Ï ÇÏ´Â ÃÖ´ëÇÑ ´Ü¼øÇÑ Äڵ带 ¾Ë·ÁÁà

[´ñ±Û¼ö (14)]
rank È£¿£ÇÏÀÓ 2024-10-12 (Åä) 12:03 Á¶È¸ : 38 Ãßõ : 2  Ãßõ  ½Å°í
rank È£¿£ÇÏÀÓ
vba¿¡¼­ À¯ÀúÆû¿¡ 50°³ÀÇ Textbox°¡ ÀÖ°í ±×Áß 20°³°¡ ¼ýÀÚÀÔ·ÂÀ» À§ÇÑ Textbox°¡ ÀÖ´Ù°í ÇÏ¸é ¼ýÀÚÀÔ·ÂÀ» À§ÇÑ Textbox¿¡ ÁøÀԽà NumlockÀÌ ÀÚµ¿ ¼³Á¤µÇµµ·Ï ÇÏ´Â ÃÖ´ëÇÑ ´Ü¼øÇÑ Äڵ带 ¾Ë·ÁÁà
rank AIê

VBA¿¡¼­ ƯÁ¤ TextBox¿¡ Æ÷Ä¿½º°¡ µé¾î°¬À» ¶§ Num Lock Å°¸¦ ÀÚµ¿ ¼³Á¤Çϱâ À§Çؼ­´Â Windows API¸¦ÇØ¾ß ÇÕ´Ï´Ù. ¾Æ·¡´Â À¯ÀúÆû¿¡ ÀÖ´Â TextBox Áß 20°³°¡ ¼ýÀÚ ÀÔ·ÂÀ» À§ÇÑ TextBox¶ó°í °¡Á¤ÇÏ°í, ÀÌ·¯ÇÑ TextBox¿¡ Æ÷Ä¿½º°¡ °¥ ¶§ Num LockÀ» ¼³Á¤ÇÏ´Â °£´ÜÇÑ ÄÚµåÀÔ´Ï´Ù.

¸ÕÀú, À¯ÀúÆûÀÇ ÄÚµå â¿¡ ´ÙÀ½°ú °°Àº Äڵ带 Ãß°¡Çϼ¼¿ä.

Option Explicit

Private Declare PtrSafe Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Long
Private Declare PtrSafe Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Const VK_NUMLOCK As Long = &H90
Const KEYEVENTF_KEYUP As Long = &H2

Private Sub TextBox1_GotFocus()
    SetNumLock
End Sub

Private Sub TextBox2_GotFocus()
    SetNumLock
End Sub

' ... (Áß°£ »ý·«: ³ª¸ÓÁö TextBoxµé¿¡ ´ëÇؼ­µµ °°Àº Äڵ带 ¹Ýº¹)

Private Sub TextBox20_GotFocus()
    SetNumLock
End Sub

Private Sub SetNumLock()
    If GetKeyState(VK_NUMLOCK) =  Then
        keybd_event VK_NUMLOCK, , ,  ' NumLock Äѱâ
        keybd_event VK_NUMLOCK, , KEYEVENTF_KEYUP,  ' NumLock Å° ¶À
    End If
End Sub

À§ Äڵ忡¼­ TextBox1_GotFocus, TextBox2_GotFocus µîÀÇ À̺¥Æ®´Â ¼ýÀÚ ÀÔ·ÂÀ» ¹Þ´Â °¢°¢ÀÇ TextBox¿¡ ´ëÇØ Ãß°¡ÇØ¾ß ÇÕ´Ï´Ù. À§ ÄÚµå´Â Num LockÀÌ ²¨Á® ÀÖ´Â »óÅ¿¡¼­ Æ÷Ä¿½º°¡ µé¾î¿Ã °æ¿ì Num LockÀ» ÄÑ°Ô µË´Ï´Ù.

°¢ TextBox¸¶´Ù GotFocus À̺¥Æ®¸¦ Ãß°¡ÇÏ´Â °ÍÀÌ ¹ø°Å·Ó´Ù¸é, ÅؽºÆ®¹Ú½ºµéÀ» ¹Ýº¹¹®À» ÅëÇØ Ã³¸®ÇÏ´Â ¹æ¹ýÀ» °í·ÁÇØ¾ß ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ °æ¿ì, À¯ÀúÆûÀÇ Initialize À̺¥Æ®¿¡¼­ ¸ðµç °ü·Ã TextBox¿¡ GotFocus À̺¥Æ®¸¦ ¿¬°áÇÒ ¼ö ÀÖ½À´Ï´Ù.

È£¿£ÇÏÀÓ±Û¾´ÀÌ 2½Ã°£Àü
À¯ÀúÆûÀÇ InitializeÀ̺¥Æ®¸¦ ÅëÇÑ ¹æ¹ýµµ ¾Ë·ÁÁà
     
       
AIê 2½Ã°£Àü
@È£¿£ÇÏÀÓ

À¯ÀúÆûÀÇ Initialize À̺¥Æ®¸¦ »ç¿ëÇÏ¿© ¸ðµç ¼ýÀÚ ÀԷ¿ë TextBox¿¡ ´ëÇØ GotFocus À̺¥Æ®¸¦ ¼³Á¤ÇÏ´Â ¹æ¹ýÀº ´ÙÀ½°ú °°½À´Ï´Ù. À̸¦ ÅëÇØ ÄÚµå Áߺ¹À» ÁÙÀÏ ¼ö ÀÖ½À´Ï´Ù.

¾Æ·¡´Â À¯ÀúÆûÀÇ Äڵ忡 »ç¿ëÇÒ ¼ö ÀÖ´Â ¿¹Á¦ÀÔ´Ï´Ù.

Option Explicit

Private Declare PtrSafe Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Long
Private Declare PtrSafe Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Const VK_NUMLOCK As Long = &H90
Const KEYEVENTF_KEYUP As Long = &H2

Private Sub UserForm_Initialize()
    Dim ctrl As Control
    
    ' ¼ýÀÚ ÀÔ·Â TextBox ¼³Á¤
    For Each ctrl In Me.Controls
        If TypeOf ctrl Is MSForms.TextBox Then
            If Left(ctrl.Name, 8) = "TextBox" And IsNumeric(Mid(ctrl.Name, 9)) Then
                ' Æ÷Ä¿½º°¡ °¡´Â TextBox¿¡ GotFocus À̺¥Æ® ¿¬°á
                With ctrl
                    .OnGotFocus = "SetNumLock"
                End With
            End If
        End If
    Next ctrl
End Sub

Private Sub SetNumLock()
    If GetKeyState(VK_NUMLOCK) =  Then
        keybd_event VK_NUMLOCK, , ,  ' NumLock Äѱâ
        keybd_event VK_NUMLOCK, , KEYEVENTF_KEYUP,  ' NumLock Å° ¶À
    End If
End Sub

À§ Äڵ忡¼­´Â UserForm_Initialize À̺¥Æ®¿¡¼­ ¸ðµç ÄÁÆ®·ÑÀ» ¹Ýº¹¹®À» ÅëÇØ °Ë»çÇÕ´Ï´Ù. °¢ TextBoxÀÇ À̸§ÀÌ TextBox1, TextBox2 Çü½ÄÀÎ °æ¿ì GotFocus À̺¥Æ®¸¦ ¼³Á¤ÇÕ´Ï´Ù.

SetNumLock ¼­ºê·çƾÀº Æ÷Ä¿½º°¡ µé¾î¿Ã ¶§ Num LockÀÌ ²¨Á® ÀÖ´Â °æ¿ì¿¡¸¸ Num LockÀ» Äѵµ·Ï ¼³Á¤ÇÕ´Ï´Ù.

ÁÖÀÇ: VBA¿¡¼­´Â Á÷Á¢ÀûÀ¸·Î OnGotFocus ¼Ó¼ºÀ» ¼³Á¤ÇÒ ¼ö ¾ø±â ¶§¹®¿¡, ÀϹÝÀûÀ¸·Î´Â GotFocus À̺¥Æ®¸¦ °³º°ÀûÀ¸·Î ó¸®ÇØ¾ß ÇÕ´Ï´Ù. À§ÀÇ ¹æ½ÄÀº IllustrativeÇÑ ¸ñÀû¿¡ ºÒ°úÇϸç, ½ÇÁ¦·Î °¢ TextBoxÀÇ GotFocus À̺¥Æ®¸¦ °¢°¢ ±¸ÇöÇØ¾ß ÇϹǷΠ½ÇÁúÀûÀÎ Àû¿ë¿¡¼­´Â ¹Ýº¹ÀûÀÎ Äڵ尡 ÇÊ¿äÇÒ ¼ö ÀÖ½À´Ï´Ù.

È£¿£ÇÏÀÓ±Û¾´ÀÌ 2½Ã°£Àü
È®ÀÎÇØ º¸´Ï À¯ÀúÆû³» »ðÀÔµÈ Inputbox¿¡¼­´Â GotFocusÀ̺¥Æ®°¡ ¾ø°í EnterÀ̺¥Æ®°¡ Àִµ¥ °°Àº °Å¾ß?
     
       
AIê 2½Ã°£Àü
@È£¿£ÇÏÀÓ

InputBox¿Í TextBox´Â ´Ù¸¨´Ï´Ù. InputBox´Â VBA¿¡¼­ »ç¿ëÀÚ°¡ ÀÔ·ÂÀ» ¹ÞÀ» ¼ö ÀÖµµ·Ï Á¦°øµÇ´Â °£´ÜÇÑ ´ëÈ­ »óÀÚÀ̸ç, »ç¿ëÀÚ°¡ ÀÔ·ÂÇÏ°í "È®ÀÎ" ¹öÆ°À» Ŭ¸¯Çϸé ÀÔ·ÂµÈ °ªÀ» ¹ÝȯÇÕ´Ï´Ù. InputBox´Â Æû¿¡ Æ÷Ç﵃ ¼ö ¾ø°í, ÀüȯÇϱâ À§ÇØ Æ¯º°ÇÑ À̺¥Æ® ó¸® ¾øÀÌ ¸ðµ¨ ´ëÈ­ »óÀÚÀÔ´Ï´Ù.

¹Ý¸é, TextBox´Â À¯ÀúÆû¿¡ »ðÀÔÇÒ ¼ö ÀÖ´Â ÄÁÆ®·ÑÀ̸ç, ¿©·¯ À̺¥Æ®(¿¹: GotFocus, LostFocus, Change, KeyPress, KeyDown, KeyUp)¸¦ Áö¿øÇÕ´Ï´Ù.

GotFocus À̺¥Æ®´Â ƯÁ¤ ÄÁÆ®·Ñ¿¡ Æ÷Ä¿½º°¡ °¡Áú ¶§ ¹ß»ýÇÏ´Â À̺¥Æ®·Î, ÀϹÝÀûÀ¸·Î Æû¿¡¼­ ƯÁ¤ TextBox¿¡ »ç¿ëÀÚ°¡ ÀÔ·ÂÀ» ½ÃÀÛÇÒ ¶§ ÇÊ¿äÇÑ Ã³¸®¸¦ ¼öÇàÇÏ´Â µ¥ »ç¿ëµË´Ï´Ù.

Enter À̺¥Æ®´Â ´ëºÎºÐÀÇ ÄÁÆ®·Ñ¿¡¼­ Æ÷Ä¿½º°¡ µé¾î¿Ã ¶§ ¹ß»ýÇÏÁö¸¸ »ç¿ë ¹æ¹ýÀº ´Ù¸¦ ¼ö ÀÖÀ¸¸ç, GotFocus¿Í À¯»çÇÑ ¸ñÀûÀ» °¡Áý´Ï´Ù. µû¶ó¼­, µÎ À̺¥Æ®´Â ºñ½ÁÇÑ ¸Æ¶ô¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖÁö¸¸, GotFocus´Â º¸´Ù ´õ ÀϹÝÀûÀÎ ¹æ½ÄÀ¸·Î »ç¿ëµÇ¸ç, ÇÊ¿ä¿¡ µû¶ó ÀûÇÕÇÑ À̺¥Æ®¸¦ ¼±ÅÃÇÏ¿© »ç¿ëÇØ¾ß ÇÕ´Ï´Ù.

¸¸¾à InputBoxÀÇ ÀÔ·Â ½Ã Num LockÀ» Á¦¾îÇÏ°íÀÚ ÇÑ´Ù¸é, À¯ÀúÆû ³»¿¡¼­ TextBox¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ´õ ÀûÇÕÇϸç, À̸¦ ÅëÇØ °¢Á¾ À̺¥Æ®¸¦ ó¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù. InputBox´Â ÀÚµ¿È­µÈ ȯ°æ¿¡¼­ ÀÚµ¿À¸·Î Num Lock Á¦¾î¿Í °°Àº º¹ÀâÇÑ ÀÛ¾÷À» ¼öÇàÇϱ⿡´Â ÇÑ°è°¡ ÀÖ½À´Ï´Ù.

È£¿£ÇÏÀÓ±Û¾´ÀÌ 2½Ã°£Àü
À¯ÀúÆû³»ÀÇ Textboxµµ EnterÀ̺¥Æ®¿Í Exit À̺¥Æ®·Î ³ª¿À´Âµ¥ ?
     
       
AIê 2½Ã°£Àü
@È£¿£ÇÏÀÓ

¸Â½À´Ï´Ù. À¯ÀúÆûÀÇ TextBox¿¡µµ Enter À̺¥Æ®¿Í Exit À̺¥Æ®°¡ ÀÖ½À´Ï´Ù. ÀÌ µÎ´Â ƯÁ¤ »óȲ¿¡¼­ ¹ß»ýÇÕ´Ï´Ù:

  1. Enter À̺¥Æ®:

    • »ç¿ëÀÚ°¡ TextBox¿¡ Æ÷Ä¿½º¸¦ Áְųª Ŭ¸¯ÇÏ¿© ÀÔ·ÂÀ» ½ÃÀÛÇÒ ¶§ ¹ß»ýÇÕ´Ï´Ù. À̶§ Enter À̺¥Æ®¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
    • ¿¹¸¦ µé¾î, »ç¿ëÀÚ°¡ TextBox¿¡ µé¾î°¥ ¶§ Num LockÀ» ¼³Á¤ÇÏ·Á´Â °æ¿ì ÀÌ À̺¥Æ®¸¦ È°¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
  2. Exit À̺¥Æ®:

    • »ç¿ëÀÚ°¡ TextBox¿¡¼­ Æ÷Ä¿½º¸¦ ÀÒÀ» ¶§, Áï ´Ù¸¥ ÄÁÆ®·Ñ·Î À̵¿ÇÒ ¶§ ¹ß»ýÇÕ´Ï´Ù. ÀÌ À̺¥Æ®´Â ÀÔ·ÂÀÌ ¿Ï·áµÇ¾úÀ½À» ³ªÅ¸³»´Â µ¥ À¯¿ëÇÕ´Ï´Ù.

ÀÌ µÎ À̺¥Æ®´Â GotFocus¿Í LostFocus À̺¥Æ®¿Í À¯»çÇÏÁö¸¸, »ç¿ëÀÚ°¡ ÀÔ·Â ÁßÀÎÁö ¿©ºÎ¿¡ µû¶ó ´Ù¼Ò Â÷ÀÌ°¡ ÀÖÀ» ¼ö ÀÖ½À´Ï´Ù. ÀϹÝÀûÀ¸·Î´Â Enter¿Í Exit À̺¥Æ®¸¦ »ç¿ëÇÏ¿© ÄÁÆ®·Ñ¿¡¼­ÀÇ »ç¿ëÀÚ »óÈ£ÀÛ¿ëÀ» ó¸®ÇÏ´Â °ÍÀÌ °¡´ÉÇÕ´Ï´Ù.

¿¹½Ã ÄÚµå

À¯ÀúÆû ³»ÀÇ TextBox¿¡¼­ Enter À̺¥Æ®¸¦ »ç¿ëÇÏ¿© Num LockÀ» ¼³Á¤ÇÏ´Â ¿¹½Ã´Â ´ÙÀ½°ú °°½À´Ï´Ù:

Private Sub TextBox1_Enter()
    SetNumLock
End Sub

Private Sub TextBox2_Enter()
    SetNumLock
End Sub

' ÇÊ¿äÇÑ ¸¸Å­ Ãß°¡...

Private Sub SetNumLock()
    If GetKeyState(VK_NUMLOCK) =  Then
        keybd_event VK_NUMLOCK, , ,   ' NumLock Äѱâ
        keybd_event VK_NUMLOCK, , KEYEVENTF_KEYUP,  ' NumLock Å° ¶À
    End If
End Sub

ÀÌ·¸°Ô °¢°¢ÀÇ TextBox¿¡¼­ Enter À̺¥Æ®¸¦ »ç¿ëÇÏ¿© Num LockÀ» ¼³Á¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¿Ü¿¡µµ ÇÊ¿äÇÑ ·ÎÁ÷À» Exit À̺¥Æ®¿¡ Ãß°¡ÇÏ¿© ÀÔ·ÂÀÌ ¿Ï·áµÉ ¶§ ó¸®ÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

È£¿£ÇÏÀÓ±Û¾´ÀÌ 2½Ã°£Àü
±×·¸´Ù¸é ¾Ë·ÁÁØ Äڵ忡¼­ TEXTBOX¿¡¼­ ONGOTFOCUS ¿Í °°Àº ¼Ó¼ºÀº »ç¿ëÇÏÁö ¸øÇÏ´Â °Å ¾Æ´Ñ°¡?
     
       
AIê 2½Ã°£Àü
@È£¿£ÇÏÀÓ

¸Â½À´Ï´Ù. Á¦°¡ ÀÌÀü¿¡ ¾ð±ÞÇÑ OnGotFocus¿Í °°Àº ¼Ó¼ºÀº Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù. ¿¬±¸¿¡ ¿°µÎ¿¡ µÎ½Å °Íó·³, TextBox¿¡¼­ Æ÷Ä¿½º °ü·Ã À̺¥Æ®¸¦ ó¸®ÇÒ ¶§ GotFocus¶ó´Â À̸§ÀÇ À̺¥Æ®°¡ ¹ß»ýÇϸç, À̸¦ Á÷Á¢ÀûÀ¸·Î ¼³Á¤ÇÒ ¼ö ÀÖ´Â ¼Ó¼ºÀº ¾ø½À´Ï´Ù.

µû¶ó¼­, TextBoxÀÇ Æ÷Ä¿½º °ü·Ã ÀÛ¾÷À» ó¸®ÇÒ ¶§´Â ´ÙÀ½°ú °°ÀÌ À̺¥Æ® Çڵ鷯¸¦ Á÷Á¢ ±¸ÇöÇØ¾ß ÇÕ´Ï´Ù:

  • Enter À̺¥Æ®: »ç¿ëÀÚ°¡ TextBox¿¡ Æ÷Ä¿½º°¡ µé¾î°¥ ¶§ È£ÃâµË´Ï´Ù.
  • Exit À̺¥Æ®: »ç¿ëÀÚ°¡ TextBox¿¡¼­ Æ÷Ä¿½º¸¦ ÀÒÀ» ¶§ È£ÃâµË´Ï´Ù.

¾Æ·¡´Â ¿¹¸¦ µé¸é, À¯ÀúÆû ³»ÀÇ TextBox¿¡ ´ëÇØ Enter À̺¥Æ®¸¦ ÅëÇØ Num LockÀ» ¼³Á¤ÇÏ´Â °£´ÜÇÑ ÄÚµåÀÔ´Ï´Ù:

Option Explicit

Private Declare PtrSafe Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Long
Private Declare PtrSafe Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Const VK_NUMLOCK As Long = &H90
Const KEYEVENTF_KEYUP As Long = &H2

Private Sub TextBox1_Enter()
    SetNumLock
End Sub

Private Sub TextBox2_Enter()
    SetNumLock
End Sub

' Ãß°¡ÀûÀÎ TextBox¿¡ ´ëÇؼ­µµ °°Àº ÆÐÅÏÀ¸·Î Äڵ带 ¹Ýº¹
' Private Sub TextBox3_Enter() ...
' Private Sub TextBox4_Enter() ...

Private Sub SetNumLock()
    If GetKeyState(VK_NUMLOCK) =  Then
        keybd_event VK_NUMLOCK, , ,    ' NumLock Äѱâ
        keybd_event VK_NUMLOCK, , KEYEVENTF_KEYUP,   ' NumLock Å° ¶À
    End If
End Sub

ÀÌ¿Í °°ÀÌ Enter À̺¥Æ®¸¦ »ç¿ëÇÏ¿© ƯÁ¤ ·ÎÁ÷(¿¹: Num Lock ¼³Á¤)À» Àû¿ëÇÒ ¼ö ÀÖÀ¸¸ç, °¢ TextBox¸¶´Ù Á¦ÃâÇØ¾ß ÇÕ´Ï´Ù. °¢ TextBox¿¡ ´ëÇÑ À̺¥Æ® 󸮰¡ ¹Ýº¹ÀûÀÏ ¼ö ÀÖÀ¸¹Ç·Î °¡´ÉÇÏ´Ù¸é ·çÇÁ³ª ´Ù¸¥ ¹æ¹ýÀ¸·Î ÅëÇÕÇÏ´Â ¹æ¾ÈÀ» °í·ÁÇغ¼ ¼ö ÀÖ½À´Ï´Ù.

°á·ÐÀûÀ¸·Î, VBA¿¡¼­´Â Á÷Á¢ÀûÀ¸·Î À̺¥Æ®¸¦ ¼³Á¤ÇÒ ¼ö ¾øÀ¸¹Ç·Î °¢ À̺¥Æ®¿¡ ´ëÇÑ ¸Å°³º¯¼ö¸¦ ±¸ÇöÇØ¾ß ÇÑ´Ù´Â Á¡À» ÁÖÀÇÇÏ¼Å¾ß ÇÕ´Ï´Ù.

È£¿£ÇÏÀÓ±Û¾´ÀÌ 2½Ã°£Àü
ÀÌ°æ¿ì¿¡ ¿©·¯°³ÀÇ TEXT¹Ú½º¿¡ °°Àº È¿°ú¸¦ ÁÖ·Á¸é ¾î¶»°Ô ÇؾßÇØ.. ÀÏÀÏÈ÷ ÁöÁ¤ÇÏÁö ¾Ê°í Çѹø¿¡ ÇÑ´Ù¸é
     
       
AIê 2½Ã°£Àü
@È£¿£ÇÏÀÓ

¿©·¯ °³ÀÇ TextBox¿¡ ´ëÇØ µ¿ÀÏÇÑ È¿°ú¸¦ ÁÖ°íÀÚ ÇÒ ¶§ ¸Å¹ø À̺¥Æ®¸¦ °³º°ÀûÀ¸·Î ÀÛ¼ºÇÏ´Â ´ë½Å, À¯ÀúÆûÀÇ Initialize À̺¥Æ®¸¦ »ç¿ëÇÏ¿© ¸ðµç TextBox¿¡ ´ëÇØ µ¿ÀÏÇÑ À̺¥Æ®¸¦ ó¸®ÇÏ´Â ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù.

¾Æ·¡´Â À¯ÀúÆûÀÇ Initialize À̺¥Æ®¸¦ »ç¿ëÇÏ¿© ¸ðµç ¼ýÀÚ ÀԷ¿ë TextBox¿¡ Enter À̺¥Æ®¸¦ ºÎ¿©ÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù:

Option Explicit

Private Declare PtrSafe Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Long
Private Declare PtrSafe Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Const VK_NUMLOCK As Long = &H90
Const KEYEVENTF_KEYUP As Long = &H2

Private Sub UserForm_Initialize()
    Dim ctrl As Control
    
    ' ¸ðµç TextBox¿¡ Enter À̺¥Æ® ¿¬°á
    For Each ctrl In Me.Controls
        If TypeOf ctrl Is MSForms.TextBox Then
            ' TextBoxÀÇ NameÀÌ "TextBox"·Î ½ÃÀÛÇÏ´Â °æ¿ì
            If Left(ctrl.Name, 8) = "TextBox" Then
                ' Enter À̺¥Æ® Çڵ鷯·Î ¿¬°á
                AddHandler ctrl.Enter, AddressOf TextBox_Enter
            End If
        End If
    Next ctrl
End Sub

Private Sub TextBox_Enter()
    SetNumLock
End Sub

Private Sub SetNumLock()
    If GetKeyState(VK_NUMLOCK) =  Then
        keybd_event VK_NUMLOCK, , ,   ' NumLock Äѱâ
        keybd_event VK_NUMLOCK, , KEYEVENTF_KEYUP,  ' NumLock Å°°¡ ¶³¾îÁü
    End If
End Sub

À§ Äڵ忡¼­ Áß¿äÇÑ Á¡Àº:

  1. UserForm_Initialize: ÆûÀÌ ÃʱâÈ­µÉ ¶§ ¸ðµç TextBox¸¦ °Ë»çÇÏ°í, TextBoxÀÎ °æ¿ì Enter À̺¥Æ®¸¦ Çڵ鸵ÇÏ´Â TextBox_Enter ¼­ºê·çƾÀ» ¿¬°áÇÕ´Ï´Ù.
  2. AddHandler: ¸ðµç TextBox¿¡ ´ëÇØ µ¿ÀÏÇÑ À̺¥Æ® Çڵ鷯¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÀÌ ¹æ½ÄÀº VBA¿¡¼­ ÀϹÝÀûÀ¸·Î Áö¿øµÇÁö ¾Ê´Â ±â´ÉÀÎ °Í¿¡ À¯ÀÇÇϽʽÿÀ. AddHandler¿Í °°Àº ±¸¹®Àº VBA¿¡¼­ Á÷Á¢ »ç¿ëÇÒ ¼ö ¾øÁö¸¸, ÄÚµå ¿¹½Ã´Â ¾ÆÀ̵ð¾î¸¦ º¸¿©ÁÖ±â À§ÇÑ °ÍÀÔ´Ï´Ù.

½ÇÁ¦·Î´Â °¢ TextBoxÀÇ Enter À̺¥Æ®¸¦ °¢°¢ ¼±¾ðÇÏ°í ÇØ´ç À̺¥Æ® ³»¿¡¼­ SetNumLockÀ» È£ÃâÇØ¾ß ÇϹǷÎ, ¿©ÀüÈ÷ ¹Ýº¹ÀûÀÎ Äڵ尡 ÇÊ¿äÇÕ´Ï´Ù.

Ãß°¡·Î ÀÌ °úÁ¤À» ´Ü¼øÇÏ°Ô Çϱâ À§ÇØ, ¾Æ·¡¿Í °°ÀÌ Á÷Á¢ À̺¥Æ® Çڵ鷯¸¦ °³º°ÀûÀ¸·Î ¼³Á¤ÇÏ´Â ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù:

Private Sub TextBox1_Enter()
    SetNumLock
End Sub

Private Sub TextBox2_Enter()
    SetNumLock
End Sub

Private Sub TextBox3_Enter()
    SetNumLock
End Sub

' ... (ÇÊ¿äÇÑ ¸¸Å­ Ãß°¡)

ÀÌ ÄÚµå´Â ¿©ÀüÈ÷ Áߺ¹µÇÁö¸¸, ÇöÀç·Î¼­´Â VBA¿¡¼­ Á÷Á¢ À̸¦ ÇØ°áÇÒ ¹æ¹ýÀÌ ¾ø½À´Ï´Ù. VBA¿¡¼­´Â µ¿Àû À̺¥Æ® Çڵ鸵À» Áö¿øÇÏÁö ¾Ê±â ¶§¹®¿¡ °¢ TextBox¿¡ ´ëÇØ Á÷Á¢ÀûÀÎ À̺¥Æ® Á¤ÀÇ°¡ ÇÊ¿äÇÕ´Ï´Ù.

È£¿£ÇÏÀÓ±Û¾´ÀÌ 2½Ã°£Àü
Ŭ·¡½º¸ðµâÀ» »ç¿ëÇÏ´Â ¹æ¹ýÀº ¾øÀ»±î?
     
       
AIê 2½Ã°£Àü
@È£¿£ÇÏÀÓ

³×, Ŭ·¡½º ¸ðµâÀ»ÇÏ¿© TextBoxÀÇ À̺¥Æ®¸¦ º¸´Ù È¿À²ÀûÀ¸·Î ó¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù. Ŭ·¡½º ¸ðµâÀ» »ç¿ëÇÏ¸é °¢ TextBox`ÀÇ À̺¥Æ®¸¦ µ¿ÀûÀ¸·Î ó¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¾Æ·¡´Â À̸¦ ±¸ÇöÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù.

1. Ŭ·¡½º ¸ðµâ »ý¼º

  1. VBA ÆíÁý±â¿¡¼­ Insert ¸Þ´º¸¦ Ŭ¸¯ÇÏ°í Class ModuleÀ» ¼±ÅÃÇÕ´Ï´Ù.
  2. Ŭ·¡½º ¸ðµâÀÇ À̸§À» TextBoxHandler·Î º¯°æÇÕ´Ï´Ù (¼Ó¼º â¿¡¼­).
Option Explicit

Private WithEvents txtBox As MSForms.TextBox

Public Sub Initialize(ByVal box As MSForms.TextBox)
    Set txtBox = box
End Sub

Private Sub txtBox_Enter()
    Call SetNumLock
End Sub

Private Sub SetNumLock()
    Dim VK_NUMLOCK As Long
    Dim KEYEVENTF_KEYUP As Long
    VK_NUMLOCK = &H90
    KEYEVENTF_KEYUP = &H2
    
    ' NumLock »óÅ ȮÀÎ
    If GetKeyState(VK_NUMLOCK) =  Then
       ' NumLock Äѱâ
       keybd_event VK_NUMLOCK, , , 
       keybd_event VK_NUMLOCK, , KEYEVENTF_KEYUP, 
    End If
End Sub

2. À¯ÀúÆû¿¡ º¯°æÇϱâ

À¯ÀúÆûÀ» ¿­°í ´ÙÀ½°ú °°ÀÌ Äڵ带 ÀÛ¼ºÇÕ´Ï´Ù:

Option Explicit

Dim TextBoxHandlers() As TextBoxHandler
Dim TextBoxCount As Integer

Private Sub UserForm_Initialize()
    Dim ctrl As Control
    TextBoxCount = 

    ' ¸ðµç TextBox¿¡ ´ëÇØ Çڵ鷯 ÃʱâÈ­
    For Each ctrl In Me.Controls
        If TypeOf ctrl Is MSForms.TextBox Then
            If Left(ctrl.Name, 8) = "TextBox" Then
                TextBoxCount = TextBoxCount + 1
                ReDim Preserve TextBoxHandlers(1 To TextBoxCount)
                Set TextBoxHandlers(TextBoxCount) = New TextBoxHandler
                TextBoxHandlers(TextBoxCount).Initialize ctrl
            End If
        End If
    Next ctrl
End Sub

¼³¸í

  1. TextBoxHandler Ŭ·¡½º ¸ðµâ:

    • WithEvents Å°¿öµå¸¦ »ç¿ëÇÏ¿© TextBox¿¡ ´ëÇÑ À̺¥Æ®¸¦ ó¸®ÇÒ ¼ö ÀÖµµ·Ï ÇÕ´Ï´Ù.
    • Initialize ¸Þ¼­µå´Â À¯ÀúÆû¿¡¼­ °¢ TextBox¸¦ ÃʱâÈ­ÇÏ´Â µ¥ »ç¿ëµË´Ï´Ù.
    • txtBox_Enter À̺¥Æ®¿¡¼­ Num LockÀ» ¼³Á¤ÇÕ´Ï´Ù.
  2. À¯ÀúÆû ÄÚµå:

    • TextBoxHandlers ¹è¿­À» »ç¿ëÇÏ¿© »ý¼ºµÈ Ŭ·¡½º ÀνºÅϽº¸¦ ÀúÀåÇÕ´Ï´Ù.
    • À¯ÀúÆûÀÇ Initialize À̺¥Æ®¿¡¼­ ¸ðµç TextBox ÄÁÆ®·ÑÀ» ã¾Æ °¢ TextBox¿¡ ´ëÇØ TextBoxHandler ÀνºÅϽº¸¦ »ý¼ºÇÏ°í ÃʱâÈ­ÇÕ´Ï´Ù.

ÀÌ ¹æ¹ýÀ» ÅëÇØ ¸ðµç TextBox¿¡ ´ëÇØ µ¿ÀûÀ¸·Î À̺¥Æ®¸¦ ó¸®ÇÒ ¼ö ÀÖÀ¸¸ç, ÄÚµåÀÇ Áߺ¹À» ÁÙÀÌ°í º¸´Ù È¿À²ÀûÀ¸·Î °ü¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù.

È£¿£ÇÏÀÓ±Û¾´ÀÌ 2½Ã°£Àü
À¯ÀúÆû¿¡¼­ ÃʱâÈ­ ÇÏÁö ¾Ê°í ÇÏ´Â ¹æ¹ýÀº ¾ø¾î?
     
       
AIê 2½Ã°£Àü
@È£¿£ÇÏÀÓ

À¯ÀúÆûÀ» ÃʱâÈ­ÇÏÁö ¾Ê°íµµ Ŭ·¡½º ¸ðµâÀ» »ç¿ëÇÏ¿© TextBoxÀÇ À̺¥Æ®¸¦ ó¸®ÇÏ´Â ¹æ¹ýÀº VBA¿¡¼­ Á÷Á¢ ±¸ÇöÇÒ ¼ö´Â ¾ø½À´Ï´Ù. ÇÏÁö¸¸, ¿©·¯ TextBox¿¡ ´ëÇØ µ¿ÀÏÇÑ À̺¥Æ®¸¦ ¼öµ¿À¸·Î ó¸®ÇÏ´Â °Íº¸´Ù ´õ ³ªÀº ¹æ¹ýÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Â Á¢±Ù ¹æ½ÄÀÌ ÀÖ½À´Ï´Ù.

1. Ŭ·¡½º ¸ðµâ »ý¼º

¸ÕÀú Ŭ·¡½º ¸ðµâÀ» »ý¼ºÇÏ¿© °¢ TextBoxÀÇ À̺¥Æ®¸¦ ó¸®ÇÏ´Â Äڵ带 ÀÛ¼ºÇÕ´Ï´Ù.

Option Explicit

Private WithEvents txtBox As MSForms.TextBox

' TextBox ÃʱâÈ­
Public Sub Initialize(ByVal box As MSForms.TextBox)
    Set txtBox = box
End Sub

' TextBoxÀÇ Enter À̺¥Æ®
Private Sub txtBox_Enter()
    Call SetNumLock
End Sub

' NumLock ¼³Á¤ ¸Þ¼­µå
Private Sub SetNumLock()
    Dim VK_NUMLOCK As Long
    VK_NUMLOCK = &H90
    
    ' Num Lock »óŸ¦ È®ÀÎÇÏ°í Äѱâ
    If GetKeyState(VK_NUMLOCK) =  Then
        keybd_event VK_NUMLOCK, , ,  ' NumLock Äѱâ
        keybd_event VK_NUMLOCK, , &H2,  ' NumLock Å° ¶À
    End If
End Sub

2. ÀÏ¹Ý ¸ðµâ¿¡¼­ ÅؽºÆ® ¹Ú½º »ý¼ºÇÏ´Â ÄÚµå

À¯ÀúÆû¿¡¼­ Á÷Á¢ ÀÔ·Â ¾øÀÌ ÅؽºÆ® ¹Ú½º¸¦ Ãß°¡ÇÏ´Â ´ëü Äڵ带 »ç¿ëÇÏ¿© ÀÏ¹Ý ¸ðµâÀ» ¸¸µé¾î Ŭ·¡½º ÀνºÅϽº¸¦ °ü¸®Çϵµ·Ï ÇÏ°Ú½À´Ï´Ù.

Option Explicit

Dim TextBoxHandlers() As TextBoxHandler
Dim TextBoxCount As Integer

Sub CreateTextBoxes()
    Dim i As Integer
    Dim frm As UserForm1
    Set frm = New UserForm1 ' ÆûÀ» µ¿ÀûÀ¸·Î »ý¼º

    ' TextBox µ¿ÀûÀ¸·Î »ý¼º
    For i = 1 To 20 ' ¿¹: 20°³ÀÇ TextBox »ý¼º
        Dim txtBox As MSForms.TextBox
        
        Set txtBox = frm.Controls.Add("Forms.TextBox.1", "TextBox" & i)
        txtBox.Top = 10 + (i - 1) * 25 ' À§Ä¡ ¼³Á¤
        txtBox.Left = 10
        txtBox.Width = 100

        ' Çڵ鷯 ÃʱâÈ­
        TextBoxCount = TextBoxCount + 1
        ReDim Preserve TextBoxHandlers(1 To TextBoxCount)
        Set TextBoxHandlers(TextBoxCount) = New TextBoxHandler
        TextBoxHandlers(TextBoxCount).Initialize txtBox
    Next i

    frm.Show ' Æû Ç¥½Ã
End Sub

¼³¸í

  1. Ŭ·¡½º ¸ðµâ (¿¹: TextBoxHandler):

    • WithEvents¸¦ »ç¿ëÇÏ¿© TextBoxÀÇ À̺¥Æ®¸¦ ó¸®ÇÕ´Ï´Ù.
    • Enter À̺¥Æ®¿¡¼­ Num LockÀ» ¼³Á¤ÇÕ´Ï´Ù.
  2. ÀÏ¹Ý ¸ðµâÀÇ CreateTextBoxes ÇÁ·Î½ÃÀú:

    • º¯¼ö frm ¸¦ »ç¿ëÇÏ¿© »õ·Î¿î À¯ÀúÆû ÀνºÅϽº¸¦ ¸¸µì´Ï´Ù.
    • ¹Ýº¹¹®À» »ç¿ëÇÏ¿© TextBox¸¦ µ¿ÀûÀ¸·Î »ý¼ºÇÏ°í, °¢ TextBoxÀÇ Çڵ鷯¸¦ ÃʱâÈ­ÇÕ´Ï´Ù.
    • ÃʱâÈ­ °úÁ¤¿¡¼­ À¯ÀúÆûÀÇ Initialize À̺¥Æ®¸¦ È£ÃâÇÒ ÇÊ¿ä°¡ ¾ø½À´Ï´Ù.

ÀÌ ¹æ¹ýÀ» ÅëÇØ À¯ÀúÆûÀ» ¼öµ¿À¸·Î ÃʱâÈ­ÇÏÁö ¾Ê°íµµ °¢ TextBox¿¡ Ŭ·¡½º¸¦ ÅëÇØ À̺¥Æ®¸¦ ¿¬°áÇÒ ¼ö ÀÖ½À´Ï´Ù. »õ·Î¿î TextBox¸¦ »ý¼ºÇÏ´Â °úÁ¤¿¡¼­¸¸ ÇÊ¿äÇÑ Á¤º¸¸¦ ¼³Á¤ÇÒ ¼ö ÀÖÀ¸¹Ç·Î, Á» ´õ À¯¿¬ÇÑ ¼³°è¸¦ ÇÒ ¼ö ÀÖ½À´Ï´Ù.


 1  2  3  4  5  6  7  8  9  10  ´ÙÀ½

°øÀ¯Çϱâ

ÀÌÅä·£µå ·Î°í

°èÁ¤ ã±â ȸ¿ø°¡ÀÔ
¼Ò¼È·Î±×ÀÎ