MX Compnent Excel VBA 文字列処理 & バージョン違い (2017/12/09)
■バージョン違い
Excel VBA での開発ですが、
ターゲット(客先のPC)は、MX Component Ver.3。開発環境(こちらのPC)は、Ver.4。
バージョンが違う時に遭遇した現象です。
・コマンドボタンをクリックしても何の反応もない
・コマンドボタンCommandButton22 等の番号が変わってしまう。
・番号を合わせても、期待通りに動かない。
対処方法
・参照設定で、MITSUBISHI ActUtlControls Ver1.0 が実行不可になっているので、これを外す
・参照設定に、MITSUBISHI ActMulti Controls Ver3.0 を追加
・フォーム上の ActUtlType1 を削除し、ActEasyIf1 を追加
・コード上の、ActUtlType1 を ActEasyIf1 にすべて置換
正常に動くようになります。
MX Sheet Ver.1 <> Ver.2 バージョン違いも、同様の現象になります。
参照設定が、実行不可になっていると、いろいろとあるようです。
■文字列処理
一応、2バイト文字対応 ... と思います。(^^;
Option Explicit '' MX Component Ver.4 '' 文字列送信 Sub ボタン1_Click() Dim deviceNo As String deviceNo = "D5000" Dim dataString As String dataString = "TEST12345" '' Unicode から Shift_JIS に変換 '' バイト配列に代入 Dim bary() As Byte bary = StrConv(dataString, vbFromUnicode) '' 書き込みデバイス数 Dim dlen As Integer dlen = (UBound(bary) + 1) \ 2 + 1 '' 文字列が偶数の場合でも、終端として &H00 を格納するため + 1 Dim dataAry() As Long ReDim dataAry(dlen - 1) Dim i As Integer Dim c1 As Byte, c2 As Byte For i = 0 To dlen - 1 c1 = 0: c2 = 0 If i * 2 <= UBound(bary) Then: c1 = bary(i * 2) If i * 2 + 1 <= UBound(bary) Then: c2 = bary(i * 2 + 1) '' 三菱は、先頭からの文字列を L, H の順で格納(ex "AB" : "A" -> L, "B" -> H) dataAry(i) = c2 * (2 ^ 8) + c1 Next Dim ret As Long With ActiveSheet.ActUtlType1 .Open ret = .WriteDeviceBlock(deviceNo, dlen, dataAry(0)) .Close If ret = 0 Then MsgBox "デバイス : " + deviceNo + vbCrLf + "値 : " + dataString + vbCrLf + "書き込みました." Else MsgBox "書き込み失敗." End If End With End Sub '' 文字列受信 Sub ボタン2_Click() Dim deviceNo As String deviceNo = "D5000" '' 読みだし数(デバイス数) Dim dlen As Long dlen = 6 Dim dataAry() As Long ReDim dataAry(dlen - 1) Dim ret As Long With ActiveSheet.ActUtlType1 .Open ret = .ReadDeviceBlock(deviceNo, dlen, dataAry(0)) .Close End With If ret = 0 Then '' Byte配列 Dim bary() As Byte ReDim bary(dlen * 2 - 1) Dim i As Integer For i = 0 To UBound(dataAry) bary(i * 2) = dataAry(i) And &HFF bary(i * 2 + 1) = dataAry(i) \ (2 ^ 8) ''Debug.Print Hex(dataAry(i)) + " "; Next Dim dataString As String '' バイト配列を文字列に代入 dataString = bary '' Unicode に変換 dataString = StrConv(dataString, vbUnicode) '' NullChar 以降を削除 dataString = Left(dataString, InStr(dataString, vbNullChar) - 1) MsgBox "デバイス : " + deviceNo + vbCrLf + "値 : " + dataString + vbCrLf + "読み込みました." Else MsgBox "読み込み失敗." End If End Sub