SHOJI's Code
 仕事や趣味で書いた各種言語のプログラミングコード(エクセルVBA,PHP,C/C++/C#,JavaScript等)、その他雑記。
2018.09<<12345678910111213141516171819202122232425262728293031>>2018.11
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

先日仕事でVisual BasicでWinSockコントロール(MSWINSCK.OCX)を使ってサーバープログラムを書いた。と、いうことはエクセルVBAでもできる?と思ってちょこちょこっと書いたのが以下のコード。

フォームの内容は載せていないが、WinSockコントロール Winsock1, Winsock2 の2つがあるだけである。
マクロ test を実行するとフォームが表示されるので、その状態で telnet で接続し、文字を入力すると行単位でセルに記録される。
(フォーム)
Dim cn As Integer
Dim rn As Integer
Dim buf$

Private Sub UserForm_Initialize()
cn = 0: rn = 1
Winsock1.LocalPort = 23
Winsock1.Listen
End Sub

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
If Winsock2.State <> sckClose Then Winsock2.Close
Winsock2.Accept requestID
Winsock2.SendData "Hello!" & vbCrLf
Sheet1.Cells(rn, 1) = Now()
Sheet1.Cells(rn, 2) = "OPENED"
rn = rn + 1
buf$ = ""
End Sub

Private Sub Winsock2_Close()
If buf$ <> "" Then
Sheet1.Cells(rn, 1) = Now()
Sheet1.Cells(rn, 2) = "RECV"
Sheet1.Cells(rn, 3) = buf$
rn = rn + 1
End If
Sheet1.Cells(rn, 1) = Now()
Sheet1.Cells(rn, 2) = "CLOSED"
rn = rn + 1
End Sub

Private Sub Winsock2_DataArrival(ByVal bytesTotal As Long)
Winsock2.GetData rx$
buf$ = buf$ & rx$
p = InStr(buf$, vbCrLf)
If p > 0 Then
Sheet1.Cells(rn, 1) = Now()
Sheet1.Cells(rn, 2) = "RECV"
Sheet1.Cells(rn, 3) = Left$(buf$, p - 1)
rn = rn + 1
buf$ = Mid$(buf$, p + 2)
End If
End Sub


(標準モジュール)
Sub test()
UserForm1.Show Modeless
End Sub


テーマ:EXCEL - ジャンル:コンピュータ
コメント
この記事へのコメント
コメントを投稿する

管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
copyright © 2004-2006 SHOJI, Powered By FC2ブログ all rights reserved.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。