テーマ 使 用 機 器 概 要 Application Note 資 料 作 成 060622 資 料 番 号 FTM-014 EXCEL アドインの 作 り 方 MPC-816 (684) MBKComX MS-EXCEL MPC の 点 データを 直 接 ワークシートに 吸 い 上 げ グラフを 描 くまでのサンプルです このサンプルは Microsoft(R) Excel2000 (SR-1) で 作 成 しました アドインとは アプリケーションソフトに 追 加 される 拡 張 機 能 です 普 通 マクロ(プログラム)はそれを 作 成 し たワークシートでしか 動 きませんが このアドインは EXCEL 本 体 に 組 み 込 まれるので 新 規 のワークシートからで も 起 動 します 今 回 はワークシートに MPC から 直 接 データを 吸 い 上 げてグラフ 化 するアドインを 作 ってみました (この 方 法 は 自 己 流 です 正 式 な 手 順 は EXCEL マニュアル 解 説 本 等 をご 覧 ください) プロジェクトを 作 成 してメニュー 登 録 (Install)/ 解 除 (Uninstall) 部 分 のコーディングをする EXCEL から Visual Basic Editor (VBE)を 起 動 して (メニュー [ツール]>[マクロ]>[Visual Basic Editor]) プロ ジェクトエクスプローラの VBAProject(Book1) を 逆 クリック [プロジェクト プロパティ]で[プロジェクト 名 ] を 入 力 します 逆 クリック プロジェクトエクスプローラの ThisWorkbook をダブルクリック コードウィンドウの Workbook オブジェクトの AddinInstall プロシージャと AddinUninstall プロシージャに メニュー 登 録 / 解 除 時 に 関 するコードを 書 きます また 標 準 モジュールを 挿 入 して Module1 の General オブジェクトに formshow プロシージャを 書 きます
ThisWorkbook のコード 'アドイン 登 録 Private Sub Workbook_AddinInstall() Set Menu = Application.CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlPopup) Menu.Caption = "MPC" 'メニュー 名 Set SubMenu1 = Menu.Controls.Add SubMenu1.Caption = "POINT" 'サブメニュー 名 SubMenu1.OnAction = "formshow" 'アドイン 登 録 解 除 Private Sub Workbook_AddinUninstall() 'メニュー 名 を 整 合 させないとエラーになる Application.CommandBars("Worksheet Menu Bar").Controls("MPC").Delete Module1 のコード 'フォーム 表 示 Sub formshow() UserForm1.Show プロジェクトの 保 存 をする この 段 階 で 一 旦 EXCEL に 戻 りプロジェクトを 保 存 しておきます フォルダはどこでも 良 いですが C:\Documents and Settings\username\Application Data\Microsoft\AddIns がデフォルトになっているようです ファイル 名 は???.xla になります アドインを 指 定
メインメニューにアドインを 登 録 する ここで EXCEL のメインメニューにアドインを 登 録 してみます メインメニュー [ツール]>[アドイン] で 登 録 画 面 を 開 き 先 に 保 存 したアドイン 名 をチェックします( 無 い 場 合 は [ 参 照 ]で 探 す) チェックする EXCEL のメインメニューに 登 録 されました
フォームを 挿 入 しコーディングする このままでは 使 えないので 再 び VBE を 開 き フォームを 挿 入 部 品 を 配 置 してコードを 書 きます 今 回 は 通 信 コントロールとして MBKCommX コントロールを 使 います デフォルトのツールボックスには MBKCommX コントロールはありません ツールボックスを 逆 クリックし[その 他 のコントロール]>[コントロールの 追 加 ] で MBKCommX をチェックします MBKCommX (ファイル 名 は MBKCom.ocx) は 事 前 に Windows に 登 録 しておきます 登 録 方 法 と 使 い 方 は MBKCom.ocx マ ニュアル をご 覧 下 さい フォームに 部 品 を 配 置 してコードを 書 きます MBKComX コントロールを 配 置 MBKComX コントロール このサンプルでは USB/RS-232C コンバータ USB-RS2 で 通 信 をする 場 合 の COMM ポート 番 号 検 出 に ftmcoms.exe を 使 用 しています ftmcoms.exe は EXCEL と 同 じ C:\Program Files\Microsoft Office\Office にコピーしておきま す
UserForm1 のコード 'READ ボタン Private Sub CommandButton1_Click() SpinButton1.Value = TextBox1.Text SpinButton2.Value = TextBox2.Text sc = True If MBKComX1.ComOpen Then Exit Sub ' 多 重 起 動 防 止 MBKComX1.ComNum = TextBox3.Text 'COMM PORT 指 定 " MBKComX1.ComBaud = "9600" 'ボーレート 設 定 MBKComX1.ComParity = "E" 'パリティー 設 定 MBKComX1.ComDataBits = "7" 'データ 長 設 定 MBKComX1.ComOpen = True 'ポートオープン Range("A2", "E301").Select Selection.ClearContents ' 既 存 データクリア 注 意 :Clear は 書 式 までクリアする Range("A2").Select Cells(1, 1).Value = "POINT" Cells(1, 2).Value = "X" Cells(1, 3).Value = "Y" Cells(1, 4).Value = "Z" Cells(1, 5).Value = "U" For i = TextBox1.Text To TextBox2.Text If getdt(i) = False Then sc = False Exit For Next i MBKComX1.ComOpen = False If sc Then graph 'データ 読 込 ' 失 敗 したら sc=false 'グラフ 描 画 ' 点 データ 読 込 Function getdt(i) getdt = True If Not MBKComX1.ReadPoint(i) Then MsgBox (MBKComX1.ErrStat) getdt = False Exit Function Cells(i + 1, 1).Value = i Cells(i + 1, 2).Value = MBKComX1.PX Cells(i + 1, 3).Value = MBKComX1.PY Cells(i + 1, 4).Value = MBKComX1.PZ Cells(i + 1, 5).Value = MBKComX1.PU Label3.Caption = i ' 点 データ P(i) 読 み 込 み 'エラー 内 容 表 示 'X(i) 'Y(i) 'Z(i) 'U(i) End Function 'グラフ 描 画 Sub graph() xr = Str(TextBox2.Text + 1) For Each WS In ActiveWindow.SelectedSheets sn = WS.Name Next ' 現 在 のワークシート 名 取 得 ' 既 存 のグラフを 消 す nchart = ActiveSheet.ChartObjects.Count ' 現 在 のワークシートのグラフ 数 If nchart > 0 Then For cnt = 1 To nchart ActiveSheet.ChartObjects(cnt).Activate ActiveChart.ChartArea.Select ActiveWindow.Visible = False Selection.Delete Next If Not CheckBox1.Value Then Exit Sub Charts.Add ActiveChart.ChartType = xlline 'グラフを 描 く
ActiveChart.SetSourceData Source:=Sheets(sn).Range("A1:E" + Trim(xr)), PlotBy:=xlColumns ActiveChart.SeriesCollection(1).Delete ActiveChart.SeriesCollection(1).XValues = "=" + sn + "!R2C1:R" + Trim(xr) + "C1" ActiveChart.SeriesCollection(2).XValues = "=" + sn + "!R2C1:R" + Trim(xr) + "C1" ActiveChart.SeriesCollection(3).XValues = "=" + sn + "!R2C1:R" + Trim(xr) + "C1" ActiveChart.SeriesCollection(4).XValues = "=" + sn + "!R2C1:R" + Trim(xr) + "C1" ActiveChart.Location Where:=xlLocationAsObject, Name:=sn With ActiveChart.HasTitle = False.Axes(xlCategory, xlprimary).hastitle = True.Axes(xlCategory, xlprimary).axistitle.characters.text = "POINT".Axes(xlValue, xlprimary).hastitle = True.Axes(xlValue, xlprimary).axistitle.characters.text = "VALUE" End With ActiveChart.Axes(xlCategory).Select With Selection.TickLabels.Alignment = xlcenter.offset = 100.Orientation = xlupward End With Range("A2").Select 'Window を 閉 じる Private Sub CommandButton2_Click() UserForm1.Hide 'USB-RS2 ポート 検 出 Private Sub CommandButton3_Click() On Error GoTo Errhandler apl1 = Shell("C:\Program Files\Microsoft Office\Office\ftmcoms.exe /f", 1) 'USB-RS2 検 出 アプリ 起 動 If apl1 = 0 Then MsgBox "エラー 発 生 ", vbokonly, "アプリ 起 動 エラー" Else MsgBox " 検 出 終 了 しました", vbokonly, " 終 了 " Open "C:\Program Files\Microsoft Office\Office\ftmcoms.txt" For Input As #1 'COMMPORT の 書 かれた TXT Do Until EOF(1) Line Input #1, txt TextBox4.Text = txt Loop Close #1 If Left(TextBox4.Text, 3) = "COM" Then TextBox3.Text = Mid(TextBox4.Text, 4, 1) SpinButton3.Value = Mid(TextBox4.Text, 4, 1) 'COMMPORT 検 出 していれば 反 映 Exit Sub Errhandler: MsgBox "エラーが 発 生 しました", vbokonly, " 終 了 します" ' 読 込 開 始 点 番 号 Private Sub SpinButton1_Change() TextBox1.Text = SpinButton1.Value ' 読 込 終 了 点 番 号 Private Sub SpinButton2_Change() TextBox2.Text = SpinButton2.Value 'CommPort 番 号 Private Sub SpinButton3_Change() TextBox3.Text = SpinButton3.Value
アドイン 実 行 EXCEL メインメニュー [MPC]>[POINT] をクリックするとアドインが 起 動 します MPC-816 プログラムポート と 接 続 COMM ポート 番 号 を 設 定 し [READ]ボタンを 押 すと MPC の 点 データを 読 み 込 み ます [Graph]チェックボックスをチェックしておくと 読 込 後 にグラフを 描 画 します
プロジェクトを 保 護 しましょう 完 成 後 プロジェクトにパスワードを 設 定 して 保 存 すると 不 可 視 状 態 になり 編 集 が 出 来 なくなります EXCEL 再 起 動 後 再 び VBE でアドインを 開 こうとすると... このグラフの MPC-816 プログラムです FOR I=1 TO 300 X(I)=I%2 Y(I)=I%3 Z(I)=I%4 U(I)=I%5 NEXT I 以 上