|
WinWedge¿Í ExcelÀÇ ¿¬°á-1
µ¥ÀÌÅÍ ÀоîµéÀ̱â¿ëÀÇ Excel ÆÄÀÏÀ» ¿¬´Ù¸é ÀÚµ¿ÀûÀ¸·Î WinWedge¸¦ ½Ãµ¿ÇÏ°í£¬µ¥ÀÌÅͰ¡ ¼ÛÃâµÈ´Ù¸é ÀÓÀÇÀÇ ¼¿¿¡
µ¥ÀÌÅ͸¦ ÀоîµéÀÌ´Â VBA ¸ÅÅ©·Î¸¦ ¼Ò°³ÇÕ´Ï´Ù.
1. WinWedgeÀÇ ¼³Á¤
µ¥ÀÌÅÍ ÀоîµéÀ̱⸦ ÇÑ °èÃø ±â±âÀÇ Åë½Å
»ç¾ç ¹× µ¥ÀÌÅÍ ±¸Á¶¿¡ ÁØÇÏ¿©£¬WinWedgeÀÇ ¼³Á¤ ÆÄÀÏÀ» ÀÛ¼ºÇÕ´Ï´Ù£®ÀÌ »ùÇ÷δ ¾Æ·¡¿Í °°Àº µ¥ÀÌÅ͸¦ »óÁ¤Çϰí ÀÛ¾÷À»
ÁøÇàÇÕ´Ï´Ù.
| Åë½Å »ç¾ç(Serial Port
Settings) |
¼³Á¤Ä¡ |
| Æ÷Æ®(Connector) |
COM1 |
| Åë½Å ¼Óµµ(Baud Rate) |
9600 |
| µ¥ÀÌÅÍ ±æÀÌ(Data Bits) |
8 |
| ½ºÅé ºñÆ®(Stop Bits) |
1 |
| È帧 Á¦¾î(Flow Control) |
None |
|
ÀÔ·Â µ¥ÀÌÅÍ ·¹ÄÚµå ±¸Á¶(Input Data
Record Structure) |
·¹ÄÚµå °³½Ã À̺¥Æ® (Start Of Record Event) |
Any Character Received |
·¹ÄÚµå Á¾·á À̺¥Æ® (End Of Record Event) |
Carriage Return or CrRf Received |
ÀÔ·Â ·¹ÄÚµå ±¸Á¶ (Input Record
Structure) |
Each record contains multiple delimeted data
fields(°¢ ·¹ÄÚµå´Â º¹¼ö°³·Î ±¸ºÐµÈ µ¥ÀÌÅÍ Çʵ带 °®´Â´Ù.) |
±¸ºÐ ±âÈ£ (Delimiter Character) |
ÄÞ¸¶ (Comma) |
| µ¥ÀÌÅÍ ÇʵåÀÇ ÃÖ´ë °¹¼ö(Maximum Number of Data Fields) |
3 |
À§ ³»¿ëÀ¸·Î ¼³Á¤ÇÑ ÆÄÀÏÀ»
¿©±â¿¡¼´Â£¬"MyConfig.SW3"À̶ó´Â ¸íĪÀ¸·Î £¬WinWedge°¡ ¼³Ä¡µÇ°í ÀÖ´Â Æú´õ ³»(µðÆúÆ®·Î´Â C:/Program
Files/WinWedge 32)¿¡ º¸Á¸ÇÕ´Ï´Ù.
2.
Excel 2000ÀÇ ¼³Á¤
ExcelÀ» ½Ãµ¿ÇÏ°í£¬Åø ¸Þ´º·ÎºÎÅÍ
¸ÅÅ©·Î: Visual Basic EditorÀ» ½Ãµ¿ÇÕ´Ï´Ù. »ðÀÔ ¸Þ´º·ÎºÎÅÍ "Ç¥ÁØ ¸ðµâ"À» ¼±ÅÃÇÏ°í£¬Ç¥½ÃµÈ ÄÚµå À©µµ¿ì¿¡ ¾Æ·¡¿Í °°Àº
Äڵ带 Ä«ÇÇÇϰí, ÆäÀ̽ºÆ®ÇÕ´Ï´Ù£®(ÄÚ¸àÆ®¸¦ Âü°íÇÏ¿©£¬ÀÚ½ÅÀÇ È¯°æ¿¡ ¸Âµµ·Ï ¼öÁ¤ÇÏ¿© ÁÖ¼¼¿ä) ¶ÇÇÑ£¬ÀÌ ÆäÀÌÁöÀÇ ¸»¹Ì¿¡¼ Çϱ⠸ÅÅ©·Î¸¦
Æ÷ÇÔÇÑ Excel ÆÄÀÏÀ» ´Ù¿î ·Îµå ¹ÞÀ» ¼ö Àֱ⠶§¹®¿¡ £¬ÀÌÂʵµ ÀÌ¿ëÇϽʽÿÀ.
Global RowPtr
As Long, ColPtr As Long '±Û·Î¹ú º¯¼öÀÇ ¼±¾ð Global
Const MyPort = "COM1" 'COM Æ÷Æ® ¹øÈ£´Â ÀÌ¿ë ȯ°æ¿¡ ÇÕÃļ
º¯°æÇϽʽÿÀ£® Global Const CmdLine = "C:/Program Files/WinWedge
32/WinWedge.Exe C:/Program Files/ WinWedge 32/MyConfig.SW3" WinWedge ¹× ¼³Á¤ ÆÄÀÏÀÇ
Ä¿¸Çµå ¶óÀÎÀº °¢ÀÚ º¸Á¸¼±ÀÇ Ç® ÆÐ½º¸¦
±â¼úÇϽʽÿÀ£®
Sub Auto_Open() On Error Resume Next '¿¡·¯¸¦ ¹«½ÃÇϰí WinWedge¸¦ ½Ãµ¿ÇÕ´Ï´Ù£® RetVal =
Shell(CmdLine) 'À§ÀÇ Ä¿¸Çµå ¶óÀÎÀ¸·Î WinWedge¸¦
½Ãµ¿ÇÕ´Ï´Ù. If RetVal = 0 Then 'WinWedge°¡
¹ß°ßµÇÁö ¾Ê´Â °æ¿ì£¬¿¡·¯¸¦ Ç¥½ÃÇÕ´Ï´Ù. Beep: MsgBox ("ÆÄÀÏ À̸§ WinWedge.Exe°¡ ¹ß°ßµÇÁö
¾Ê½À´Ï´Ù") '¿¡·¯ ¸Þ½ÃÁö¸¦ Ç¥½Ã Exit Sub '¸ÅÅ©·ÎÀÇ Á¾·á End If 'WinWedge°¡ ¹ß°ßµÇ¸é Application.Wait Now +
0.00002 '½Ãµ¿¿¡ ÇÊ¿ä·Î ÇÏ´Â
½Ã°£À» ÁÝ´Ï´Ù£®
AppActivate Application.Caption '±× ÈÄ£¬Excel¿¡ Æ÷Ä¿½º¸¦
µÇµ¹¸³´Ï´Ù£® StartCollecting '¼ºê·çƾ "StartCollecting"À» ½ÇÇàÇÕ´Ï´Ù£® End Sub
Sub
StartCollecting() RowPtr = 1: ColPtr = 1 'º¯¼ö
RowPtr£¬ColPtrÀ» ÃʱâÈÇÕ´Ï´Ù£®¿©±â¿¡¼´Â£¬1Çà°ÀÇ 1¿¸ñ Áï ÀÛ¾÷Ç¥ÀÇ ¿ÞÂÊ »ó´Ü¿¡ ¼³Á¤Çϰí ÀÖ½À´Ï´Ù£®ÀÓÀÇÀÇ À§Ä¡·Î º¯°æÇÑ
°æ¿ì¿¡´Â ÀÌ Æ÷ÀÎÅÍÀÇ °ªÀ» º¯°æÇÕ´Ï´Ù£® Worksheets("Sheet1").Activate 'Sheet1À» ¾×ƼºêÈ ÇÕ´Ï´Ù£®
Worksheets("Sheet1").Cells(1, 50).Formula = "=WinWedge|" & MyPort
& "!RecordNumber" 'Sheet1ÀÇ
¼¿(1,50)°ú WinWedge¿ÍÀÇ ¸µÅ©¸¦ È®¸³ÇÕ´Ï´Ù£®¼¿¹øÁö´Â Çʿ信 µû¶ó¼ º¯°æ °¡´ÉÇÕ´Ï´Ù£®¿©±â¿¡¼´Â ½ÇÁ¦ÀÇ µ¥ÀÌÅ͸¦
¹Þ¾ÆµéÀÌ´Â °Í¿¡ ¿µÇâÀÌ ¾ø´Â À§Ä¡¿¡ ¼³Á¤ÇÕ´Ï´Ù. ActiveWorkbook.SetLinkOnData
"WinWedge|" & MyPort &
"!RecordNumber", "GetSWData" '
SetLinkData ¹æ¹ý¿¡ ÀÇÇÏ°í£¬¼ºê·çƾ"GetSWData"¸¦ ½ÇÇàÇÕ´Ï´Ù£® End Sub
Sub
Auto_Close( ) 'Excel ¿¬½À ¹®Á¦ÁýÀ» ´Ý´Â´Ù¸é ÀÚµ¿ÀûÀ¸·Î
½ÇÇàµË´Ï´Ù. StopCollecting '¼ºê·çƾ"StopCollecting"¸¦ ½ÇÇàÇÕ´Ï´Ù£® On Error
Resume Next '¿¡·¯¸¦ ¹«½ÃÇÏ°í °è¼ÓÇÕ´Ï´Ù£® chan =
DDEInitiate("WinWedge", MyPort) 'WinWedge¿Í DDE ¸µÅ©¸¦
È®¸³ÇÕ´Ï´Ù£® DDEExecute chan, "[Appexit]"
'DDE ¸µÅ©¸¦ ´ÜÀýÇÏ°í£¬DDE Ä¿¸Çµå[Appexit]¿¡ ÀÇÇÏ¿© WinWedge¸¦ Á¾·áÇÕ´Ï´Ù£® End
Sub
Sub StopCollecting() Worksheets("Sheet1").Activate
'Sheet1À» ¾×ƼºêÇÏ°Ô ÇÕ´Ï´Ù£®
Worksheets("Sheet1").Cells(1, 50).Formula = "" '¼¿(1,50)ÀÇ DDE ¸µÅ©¸¦ ´ÜÀýÇÕ´Ï´Ù£®
ActiveWorkbook.SetLinkOnData "WinWedge|" & MyPort &
"!RecordNumber", "" ºó ¹®ÀÚ¿("
")À» ¸ÅÅ©·Î À̸§¿¡ ¹è´ç
SetLinkOnData ¹æ¹ýÀÇ ±â´ÉÀ» Á¤ÁöÇÕ´Ï´Ù£® End Sub
Sub
GetSWData() If RowPtr = 0 Then RowPtr = 1: ColPtr = 1 'ÃÖÃÊ¿¡ ÀÌ ¼ºê·çƾÀÌ ºÒ·Á °¬´ø ¶§¿¡ Çà Æ÷ÀÎÅÍ(º¯¼ö ¸í:RowPtr)¸¦ 1Çà°¿¡£¬¿ Æ÷ÀÎÅÍ(º¯¼ö
¸í:ColPtr)¸¦ 1¿¸ñ¿¡ ÃʱâÈÇÕ´Ï´Ù£®¿©±â¿¡¼ ÁÖÀǰ¡ ÇÊ¿äÇÑ °ÍÀº£¬ÀÌ ÆÄÀÏÀ» óÀ½¿¡ ½Ãµ¿ÇÑ ¶§¿¡£¬°èÃø ±â±â·ÎºÎÅÍ µ¥ÀÌÅÍÀÇ
¼ÛÃâÀÌ ÇàÇØÁö°í ÀÖÁö ¾Ê´Â °æ¿ì£¬ÁÆÄÀÏÀ» ¿¾ú´ø ÈÄ¿¡£¬±â±â¸¦ Á¶ÀÛÇÏ°í µ¥ÀÌÅÍ ¼ÛÃâÀ» °³½ÃÇÑ °æ¿ì¿¡´Â£¬ÀÏ´Ü ÀÌ ¼ºê·çƾÀ» Æ÷ÇÔÇÑ
¸ÅÅ©·Î°¡ ½ÇÇàµÇ¾î ¹ö¸®°í Çà Æ÷ÀÎÅͰ¡ 1Çà¾Æ·¡¿¡ À̵¿ÇØ ¹ö¸®±â ¶§¹®¿¡£¬½ÇÁ¦ÀÇ ¹Þ¾ÆµéÀ̱â´Â 2ÇషκÎÅÍ·Î µÈ
Á¡ÀÔ´Ï´Ù£® chan =
DDEInitiate("WinWedge", MyPort) 'WinWedge¿Í DDE ¸µÅ©¸¦
È®¸³ÇÕ´Ï´Ù£® MyVariantArray = DDERequest(chan, "Field(1)")
'WinWedgeÀÇ Çʵå 1À¸·ÎºÎÅÍ µ¥ÀÌÅ͸¦ Ãëµæ MyString$
= MyVariantArray(1) '¹®ÀÚ¿·Î º¯È¯
Worksheets("Sheet1").Cells(RowPtr, ColPtr).Formula = MyString$ '½ÃÆ® 1ÀÇ ¼¿ ¾îµå·¹½º(RowPtr,ColPtr)¿¡ µ¥ÀÌÅ͸¦ ÀÔ·ÂÇÕ´Ï´Ù£® 'ExcelÀÇ ÇÔ¼ö DDERequest´Â µ¥ÀÌÅ͸¦ º¯Çü ÇüÅÂÀÇ ¹è¿À¸·Î¼ ÃëµæÇÕ´Ï´Ù£®À̰ÍÀº
¸»ÇÏÀڸ飬ExcelÀÇ ½À¼ºÀ̶ó°í ÀÌÇØÇϽʽÿÀ£®±×·¯³ª£¬µ¥ÀÌÅ͸¦ ¼¿¿¡ °ÅµÎ¾îµéÀÎ ¶§´Â ¹®ÀÚ¿ÇüÀÌ ¾Æ´Ï¸é£¬µÇÁö ¾Ê±â ¶§¹®¿¡£¬À§ÀÇ ÇàÀ¸·Î
º¯ÇüÇü ¹è¿ÀÇ ¿ä¼Ò¸¦ ¹®ÀÚ¿·Î º¯È¯Çϰí ÀÖ½À´Ï´Ù£®°ÅµÎ¾îµé¿´´ø µ¥ÀÌÅÍ¿¡ ¾î¶°ÇÑ Ã³¸®¸¦ ½ÇÇàÇÑ °æ¿ì¿¡´Â£¬¿©±â¿¡ ÇÁ·Î±×·¥À»
±â¼úÇÕ´Ï´Ù£®'Çʵå 2 ÀÌÈÄÀÇ µ¥ÀÌÅ͵µ °ÅµÎ¾îµéÀÎ °æ¿ì¿¡´Â ¾Æ·¡¿Í °°ÀÌ
±â¼úÇÕ´Ï´Ù£®(ÀÌÇÏ´Â Çʵå 3±îÁöÀÇ ¹Þ¾ÆµéÀ̱â) MyVariantArray =
DDERequest(chan, "Field(2)") 'WinWedgeÀÇ Çʵå 2·ÎºÎÅÍ µ¥ÀÌÅ͸¦
Ãëµæ MyString$ = MyVariantArray(1)
'¹®ÀÚ¿·Î º¯È¯ Worksheets("Sheet1").Cells(RowPtr, ColPtr +
1).Formula = MyString$ MyVariantArray = DDERequest(chan,
"Field(3)") 'WinWedgeÀÇ Çʵå 3À¸·ÎºÎÅÍ µ¥ÀÌÅ͸¦
Ãëµæ MyString$ = MyVariantArray(1) '¹®ÀÚ¿·Î º¯È¯ Worksheets("Sheet1").Cells(RowPtr,
ColPtr + 2).Formula = MyString$ DDETerminate chan 'DDE ¸µÅ©¸¦
´ÜÀýÇÕ´Ï´Ù£® RowPtr = RowPtr + 1 'Çà Æ÷ÀÎÅ͸¦ ¾Æ·¡ÀÇ Çà¿¡ À̵¿ÇÕ´Ï´Ù£® End
Sub
ÀÌ»óÀÔ´Ï´Ù£®ÀÌ ÆÄÀÏÀ» ¿¬´Ù¸é WinWedge°¡ ÀÚµ¿ÀûÀ¸·Î ½Ãµ¿ÇÏ°í£¬MyConfig.SW3ÀÇ ¼³Á¤À¸·Î ¾×ƼºêÈ
µË´Ï´Ù£®°èÃø ±â±â·ÎºÎÅÍ µ¥ÀÌÅ͸¦ ¼ÛÃâ½ÃŲ´Ù¸é ¹Þ¾ÆµéÀ̱Ⱑ ½ÃÀ۵˴ϴ٣®¶Ç£¬ÀÌ ÆÄÀÏÀ» ´Ý´Â´Ù¸é ÀÚµ¿ÀûÀ¸·Î WinWedgeµµ
Á¾·áµË´Ï´Ù£® »ùÇà Excel ÆÄÀÏÀº ¾Æ·¡¿¡¼ ´Ù¿î ·Îµå ¹ÞÀ» ¼ö ÀÖ½À´Ï´Ù£®
»ùÇÃ
ÆÄÀÏÀÇ ´Ù¿î ·Îµå(36KB) *
Excel97/2000À¸·Î µ¿ÀÛ È®ÀÎÀ» Çß½À´Ï´Ù. *
ÀÚ±â Ç®¸²(Self-Extracting) Çü½ÄÀÇ ¾ÐÃà ÆÄÀÏÀÔ´Ï´Ù. ´õºí
Ŭ¸¯ÇÏ¸é ÆÄÀÏ ÀÌ ÀÚµ¿À¸·Î Ç®¸² ´Ï´Ù. |