[¼ö°­±â°£] 2010. 11. 1 ~ 2011. 10. 31
½Åû¹®ÀÇ : À¥Å¸ÀÓ±³À°¼¾ÅÍ 02-3477-8300, ¿î¿µ°ü¸® : ¿ÀÇǽºÆ©ÅÍ 070-7098-2554

±³À°°úÁ¤ ³ªÀÇÇнÀ ¿ÀÇǽºÆÁ °Ë»ö ¹«·á°­ÁÂ
Home ·Î±×ÀΠȸ¿ø°¡ÀÔ °í°´¼¾ÅÍ »çÀÌÆ®¸Ê
¿ÀÇǽºÆ©ÅÍ ±â¾÷ASP¼­ºñ½º > ¹«·á°­ÁÂ
¿¢¼¿ 2000 µû¶óÇϱâ
Ȩ·¯´× ¿¢¼¿ 2000°­ÁÂ
À繫 ÇÔ¼ö °­ÁÂ
¿¢¼¿ 2002 »õ·Î¿î ±â´É
Ȳ±â¼º´ÔÀÇ VBA°­ÁÂ
°û½ÂÁÖ´ÔÀÇ VBAÀ̾߱â
Home > ¹«·á°­Á > ¿¢¼¿
¿¢¼¿, °û½ÂÁÖ´ÔÀÇ ¿ÀÆ©°ø±¸ÇÔ Á¦ÀÛÀ¸·Î ¹è¿öº¸´Â VBA À̾߱â, Excel
  

13. Áߺ¹ µ¥ÀÌÅÍ Ã³¸® - ¸¶¹«¸®

ÀÚ·á´Ù¿î·Îµå : ¿ÀÆ©°ø±¸ÇÔ013.xls 
ÀÚ·á´Ù¿î·Îµå : Áߺ¹µ¥ÀÌÅÍ_¿¬½ÀÆÄÀÏ.xls

¾È³çÇϼ¼¿ä ¿ÀÆ© °¡Á· ¿©·¯ºÐ

¿À´ÃÀº Áߺ¹µ¥ÀÌÅ͸¦ ó¸®ÇÏ´Â ¹æ¹ýÀ» ´Ù·ê Â÷·ÊÀÔ´Ï´Ù. ±×·±µ¥ Áö³­ Ä÷³¿¡¼­ Á¦°¡ 3ºÎÀÛ¿¡ °ÉÃÄ Áߺ¹µÈ µ¥ÀÌÅ͸¦ º¹»çÇϰųª °Å²Ù·Î º¹»çÇÏ´Â ³»¿ëÀ» ¾ê±âÇÑ °ÍÀÌ ÀÖ¾ú½À´Ï´Ù. ±×·¡¼­ ±×¶§ÀÇ ¸ðµâÀ» µÇ»ì·Á ¿ÀÆ©°ø±¸ÇÔ¿¡ ºÙ¿´½À´Ï´Ù. ±×·±µ¥ ºÙÀ̸鼭 ¸î °¡Áö ¼Óµµ Çâ»ó°ú ¾ÈÁ¤ÀûÀÎ ÇÁ·Î±×·¥ ¼öÇàÀ» À§ÇÑ ¸î °¡ÁöÀÇ Äڵ带 Ãß°¡ÇÏ¿´½À´Ï´Ù. ±â´ÉÀº ±×¶§ ±×´ë·Î ÀÔ´Ï´Ù.

¸ÕÀú ¿¢¼¿VBA¿¡¼­ ÇÒ ¼ö ÀÖ´Â °£´ÜÇÑ ¼ÓµµÇâ»óÀ» À§ÇÑ ÆÁÀ» º¸¿©µå¸®ÁÒ(»ç½Ç ÀÌ¹Ì ¿©·¯ºÐµéÀÌ ¾Æ½ÇÅ×Áö¸¸)

      Application.ScreenUpdating = False
     Application.EnableEvents = False
     Application.Calculation = xlCalculationManual


     ÁÖ¿äÀÛ¾÷ ½ÇÇࡦ

      Application.ScreenUpdating = True
     Application.EnableEvents = True
     Application.Calculation = xlCalculationAutomatic

Application°³Ã¼ÀÇ ¼Ó¼ºÀ» ´Ù·ç°í ÀÖ½À´Ï´Ù. È­¸é¿¡ °ü·ÃÇÑ °Í, À̺¥Æ®¿Í °ü·ÃÇÑ °Í, °è»ê°ú °ü·ÃµÈ °ÍÀÔ´Ï´Ù.

Application.ScreenUpdatingÀº È­¸éÀÇ °»½ÅÀ» ÁöÁ¤ÇÏ´Â °ÍÀÔ´Ï´Ù. ±âº»ÀûÀ¸·Î »ç¿ëÀÚ°¡ ¾î¶°ÇÑ ÀÛ¾÷À» Çϰųª Á¶ÀÛÀ» ÇÒ¶§¸¶´Ù ¿¢¼¿Àº ¹°·Ð À©µµ¿ì½Ã½ºÅÛÀÚüµµ È­¸éÀ» ´Ù½Ã ±×¸³´Ï´Ù. ±×¼Óµµ°¡ ¸Å¿ì »¡¶ó ¿ì¸®ÀÇ ´«À¸·Î´Â º¸ÀÌÁö ¾Ê½À´Ï´Ù. Ȥ½Ã º¸ÀÎ´Ù¸é ¿©·¯ºÐÀÇ ´«ÀÌ ¾ÆÁÖ ÁÁ°Å³ª »ç¿ëÇϽô ÄÄÇ»ÅÍ°¡ ±Àº¬ÀÌ Ä£Ã´Âë µÉ °Ì´Ï´Ù. TVÇÁ·Î±×·¥¿¡¼­ ÄÄÇ»ÅÍÀ» ÃÔ¿µÇÑ °ÍÀ» º¸¸é È­¸éÀÌ À§¿¡¼­ ¾Æ·¡·Î, ¿ÞÂÊ¿¡¼­ ¿À¸¥ÂÊÀ¸·Î ±ôºý°Å¸®´Â °ÍÀ» º¸¼ÌÁÒ. Æò¼Ò¿¡´Â ¿ì¸®ÀÇ ´«ÀÌ ³Ê¹« ´À·Á º¸Áú ¸øÇÏÁö¸¸ ¿ì¸® ´«º¸´Ù ºü¸¥ Ä«¸Þ¶ó¸¦ ÅëÇØ º¸½Å °Ì´Ï´Ù. (±×·¯¹Ç·Î º¸ÀÌ´Â °Ô Áø½ÇÀº ¾Æ´Õ´Ï´Ù) 

´Ù½Ã Application.ScreenUpdatingÀ¸·Î µ¹¾Æ¿Í¼­ ÀÌ ¼Ó¼ºÀ» FALSE·Î ÁÖ¸é ¿¢¼¿Àº È­¸éÀ» ¹Ù²Ù¾î ÁÖÁú ¾Ê½À´Ï´Ù. ±×·¯¹Ç·Î È­¸éÀ» ¹Ù²Ù´Â ÀÛ¾÷À» ÇÏÁö ¾Ê´Â ´ë½Å ´Ù¸¥ ÀÛ¾÷À» ´õ ¸¹ÀÌ ÇÒ ¼ö ÀÖ¾î ¼ÓµµÇâ»ó¿¡ ±â¿©ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¸ðµç ÀÛ¾÷ÀÌ ³¡³ª¸é °ªÀ» ´Ù½Ã TRUE·Î ¼³Á¤ÇÏ¿© ¿¢¼¿ÀÌ È­¸é°»½ÅÀÛ¾÷À» Çϵµ·Ï ÇÏ¿© ¿ì¸®°¡ ÆíÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇØÁÖ¾î¾ß ÇÕ´Ï´Ù. ƯÈ÷ ¿öÅ©½ÃÆ®¿¡ ¸¹Àº ÀڷḦ ¾²´Â °æ¿ì ¼ÓµµÇâ»óÀ» ü°¨ÇÏ½Ç ¼ö ÀÖÀ» °Ì´Ï´Ù.

Application.EnableEvents´Â ¸» ±×´ë·Î À̺¥Æ®¿Í °ü·ÃµÈ °ÍÀÔ´Ï´Ù. ¿¹¸¦ µé¾î ¿¢¼¿ÅëÇÕ¹®¼­¿¡ Private Sub Worksheet_Change(ByVal Target As Excel.Range)¶óµç°¡, Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) °°Àº À̺¥Æ® ÇÁ·Î½ÃÁ®¸¦ µÐ °æ¿ì, ¿öÅ©½ÃÆ®¿¡ ¹«¾ð°¡¸¦ ¾²°Å³ª ÇöÀç ¼¿ À§Ä¡¸¦ ¹Ù²Ü¶§¸¶´Ù À̰͵éÀÌ ½ÇÇàµÉ °Í´Ï´Ù. ÀÛ¾÷¿¡ ÇÊ¿äÇÑ ÀÛ¾÷ÀÌ ¾Æ´Ï¶ó¸é ÀÌ·¯ÇÑ À̺¥Æ® ÇÁ·Î½ÃÁ®°¡ ÀÛµ¿ÇÏÁö ¾Ê´Â ÆíÀÌ ³´½À´Ï´Ù. ±×·¯¹Ç·Î Application.EnableEvents¸¦ FALSE·Î ¼³Á¤ÇÏ¿© À̺¥Æ®¸¦ ¹«½ÃÇϵµ·Ï ÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. 

¿É¼ÇÀ» º¯°æÇÏÁö ¾Ê´Â ÇÑ ±âº»ÀûÀ¸·Î ¿¢¼¿Àº ÀÚµ¿°è»êÀ» ÇÕ´Ï´Ù. ¿öÅ©½ÃÆ®¿¡ ¹«¾ð°¡¸¦ ±â·ÏÇÒ ¶§¸¶´Ù ¿¢¼¿ÀÌ ÀÚµ¿°è»êÀ» ÇÏ°Ô µÇ¸é ÀÛ¾÷½Ã°£À» ³¶ºñÇÏ°Ô µË´Ï´Ù. ±×·¯¹Ç·Î ÁÖ¿ä ÀÛ¾÷ Àü¿¡ Application.CalculationÀ» ¼öµ¿(xlCalculationManual)À¸·Î ÇÏ°í ÀÛ¾÷ÀÌ ³¡³ª¸é ´Ù½Ã ÀÚµ¿(xlCalculationAutomatic )À¸·Î ÇØÁÝ´Ï´Ù.

ÀÌ»óÀ¸·Î VBA¿¡¼­ ÇÒ ¼ö ÀÖ´Â ¼ÓµµÇâ»óÄڵ带 ¼Ò°³Çصå·È½À´Ï´Ù. ÀÌÁ¨ ÇÁ·Î±×·¥ÀÇ ¾ÈÁ¤ÀûÀÎ ½ÇÇàÀ» À§ÇÑ GetQueueStatus() APIÇÔ¼ö¸¦ ¼Ò°³Çص帮°Ú½À´Ï´Ù. ÀÌ°ÍÀº »ç½Ç VBAÀÇ DoEvents¿Í °°Àº ¿ªÇÒÀ» ÇÏÁö¸¸ ´õ ³ªÀº ¼º´ÉÀ» º¸¿©ÁÝ´Ï´Ù. 

VBA¿¡¼­ ½Ã°£ÀÌ »ó´çÈ÷ °É¸®´Â ÀÛ¾÷À» ÇÏ´Â °æ¿ì °¡·É For~Next, Do~Loopµîµî ±×³É ·çÇÁ¸¦ µ¹·Á¹ö¸®¸é À©µµ½Ã½ºÅÛÀÚü¸¦ °ÅÀÇ µ¶Á¡ÇÏ¿© ´Ù¸¥ ÀÛ¾÷À» ÇÒ ¼ö ¾ø´Ù´Â Á¡ÀÔ´Ï´Ù. °£È¤ Áß°£¿¡ ½Ã½ºÅÛÀÌ ´Ù¿îµÇ´Â °æ¿ìµµ ÀÖ½À´Ï´Ù. ±×·¡¼­ ¾Æ½Ã´Â ºÐµéÀº DoEvents¸¦ ¹Ýº¹ÄÚµå Áß°£¿¡ »ç¿ëÇÏ¿© ´Ù¸¥ ÇÁ·Î¼¼½º°¡ CPU¸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ¿©À¯¸¦ ÁÝ´Ï´Ù.

±×·¯³ª DoEvents°¡ ³Ê¹« ´À·Á ÀÌ°É »ç¿ëÇϸé Àüü ÇÁ·Î±×·¥¼öÇàÀ» »ó´çÈ÷ ±À¶ß°Ô ÇÕ´Ï´Ù. ±×·¡¼­ À̹ø¿¡ ¼Ò°³ÇÏ°íÀÚ ÇÏ´Â °ÍÀÌ GetQueueStatus()¶ó´Â APIÇÔ¼öÀÔ´Ï´Ù. »ç¿ë¿¡ ¾Õ¼­ ÀÌ°ÍÀÌ DoEventsº¸´Ù ¾ó¸¶³ª ºü¸¥Áö °á°ú¸¦ º¸¿©µå¸®ÁÒ(°á°ú´Â »ç¿ëÀÚ¸¶´Ù ´Ù¸¦ ¼ö ÀÖ½À´Ï´Ù)

With DoEvents by itself: 30.9296875 seconds
With GetQueueStatus check: 0.0390625 seconds

GetQueueStatus()ÇÔ¼ö¸¦ »ç¿ëÇÑ °ÍÀÌ ¹«Áö ºü¸£ÁÒ!

´ÙÀ½Àº À§ÀÇ °á°ú¸¦ º¸¿©ÁØ ÇÁ·Î±×·¥¼Ò½ºÀÔ´Ï´Ù. 

Option Explicit
Declare Function GetQueueStatus Lib "user32" (ByVal fuFlags As Long) As Long
Public Const QS_KEY = &H1
Public Const QS_MOUSEMOVE = &H2
Public Const QS_MOUSEBUTTON = &H4
Public Const QS_MOUSE = (QS_MOUSEMOVE Or QS_MOUSEBUTTON)
Public Const QS_INPUT = (QS_MOUSE Or QS_KEY)


Sub DoEventsTester()
     Dim i As Long
     Dim start As Long

     start = Timer
     For i = 1 To 100000
           DoEvents
     Next I
     Debug.Print "With DoEvents by itself: "; Timer - start; " seconds"

     start = Timer
     For i = 1 To 100000
          If GetQueueStatus(QS_INPUT) <> 0 Then DoEvents
     Next I
     Debug.Print "With GetQueueStatus check: "; Timer - start; " seconds"
End Sub

»ó¼ö¸¦ º¸½Ã¸é ¾Ë°ÚÁö¸¸ Å°º¸µå¸¦ µÎµå¸®°Å³ª ¸¶¿ì½º¸¦ À̵¿Çϰųª ¸¶¿ì½º¹öÆ°À» Ŭ¸¯ÇÏ´Â °æ¿ì¸¦ GetQueueStatus()ÇÔ¼ö¿¡ Àμö·Î ÁöÁ¤ÇÕ´Ï´Ù.

À̹ø Ä÷³ÀÇ Ã·ºÎÆÄÀÏ¿¡´Â Áߺ¹µ¥ÀÌÅÍ ±â´ÉÀ» ½ÃÇèÇغ¸±â À§ÇÑ ¿¬½À¿ë ÆÄÀÏÀ» °°ÀÌ Ã·ºÎÇÕ´Ï´Ù. °°ÀÌ ´Ù¿î ¹ÞÀ¸¼Å¼­ Çغ¸½Ã°í, ±â´É¿¡ ´ëÇؼ­´Â ¾Õ¼­ÀÇ Áߺ¹µ¥ÀÌÅÍó¸® Ä÷³(3ºÎÀÛ)À» Âü°íÇÏ½Ã±æ ¹Ù¶ø´Ï´Ù.

¿À´ÃÀº ¿©±â±îÁöÀÔ´Ï´Ù. ¼ö°íÇϼ¼¿ä.

¸ñÂ÷ | ÀÌÀü | ´ÙÀ½

¡¡

¿ÀÇǽºÆ©ÅÍ ±â¾÷ASP¼­ºñ½º 135-880 ¼­¿ï½Ã °­³²±¸ »ï¼ºµ¿ 157-3 ¿¤ÁöÆ®À©ÅÚ 2Â÷ 1603È£ ¢Ï070-7098-2554
Copyright ¨Ï 1999-2008 Officetutor.com All rights reserved
¡¡