○Excelの表にリアルタイム&遠隔操作で値を書き込む

注)VB6の WinSock Controlとデザインライセンスが必要です。
つまり、VisualBasic 6.0のWinSock Controlを使ったプログラムが作成できるバージョンがインストール
されていないと動きません(Professional Editionだと動きましたが試用版では無理でした)
Book1.ZIP

■LANで接続されていてIPアドレスがあれば、世界中のどこからでも、値を変化させることができます。
それを実現するために、エクセルの表にTCP/IPサーバーを作成しました。


@新規で表を作成し、VBAを開きます。-----------------------------------------
フォームを新規で作成します
ツールボックスを表示させWinSock Controlを参加させます。
フォームにWinSock Controlを貼り付けます。

A標準モジュールを作り、以下のコードを貼り付けます-----------------------------------------

Private Function Auto_Open()
    Call Sheet1.init	'ロード時に初期化
End Function

BSheet1のコードを開き以下を貼り付けます。-----------------------------------------

Private WithEvents Winsock1 As Winsock

'初期化
Public Sub init()
    Set Winsock1 = New Winsock
    Call SockListen
End Sub

'接続を待機します ポート:1000 プロトコル:TCP/IP
Private Sub SockListen()
    On Error GoTo Err
Err:
    Winsock1.Close
    Winsock1.Protocol = sckTCPProtocol
    Winsock1.LocalPort = 1000
    Winsock1.Listen
    On Error GoTo 0
End Sub

'接続されました。
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
    On Error GoTo Err
    Winsock1.Close
    Winsock1.Accept (requestID)
    Exit Sub
Err:
    Call SockListen
End Sub

'文字列を受信しました。送受信開始します。
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    On Error GoTo Err
    
    Dim buff As String
    Winsock1.GetData buff '文字列を受信

    Worksheets("sheet1").Range("A1").Value = buff 'A1に受信した文字を入れる
    'Winsock1.SendData ("123ABCabc") '文字列を送信
Err:
    Call SockListen
    On Error GoTo 0
End Sub

'エラー発生時には再待機
Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
    Call SockListen
End Sub

'セル移動時には再待機
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Call SockListen
End Sub

C以上で完成です。-----------------------------------------

保存して、開き直すと実行されます。

TCPクライアントやTelnetを使って、ポート1000番に書き込んで見てください。
Sheet1のセルA1に値が表示されます。




▲トップページ > オフィス