Share
Embed
Transcript
53 slides
-
はなっち!とは… 2019年10月 UiPath Japan MVP 2019 認定 2020年10月
UiPath Japan MVP 2020 認定 2020年11月 定年退職 同 年 同 月 FUJITSU UT社と契約 お客様先でRPAサポート&開発 Twitter:hjmkzk Qiita:@HANACCHI FaceBook:hajime.kozaki -
こんな問題にぶち当たった ① 業務担当者と仕様検討の際、対象とするシート名は固定名とするとした。 ② 業務担当者のところにメールされてくるEXCELブックを対象に処理したと こと、以下の問題が発生! a. シート名がない!エラー b. シート名があるが、転記内容が違う
③ 故障となったファイルを共有していただいたら、以下の事が分かった。 a. 書き方サンプルをコピーし、仕様として決められたシート名に変更し ていなかった b. 書き方サンプルをコピーし、仕様として決められたシート名に変更し たのち、それを非表示にしてしまい、慌てて書き方サンプルに内容を 記載していた ⇒標準アクティビティに、使えそうなアクティビティがない! -
INTERMISSION これまでのまとめ • EXCELの標準アクティビティにない機能は、UI操作で実行 するか、あきらめるか… • ダメ元で、UiPath MarketPlaceを探してみよう! ⇒「かんたん Excel
アクティビティパック」 • UiPath MarketPlaceでのアクティビティを使用する場合、 EXCELの信頼関係の確認を! -
自分で作るVBAの、開発 L1:エントリメソッドの定義。括弧の中には、最大30個の引数が定義でき、 Functionの場合は、戻り値を定義できる。 L2:エントリメソッド内で使用する変数の定義。なくてもよいが、合った方がよい L4:戻り値の初期化 L5:ActiveSheetの親(Workbook)のSheetsの件数分繰り返す L6:戻り値に、タブと、シート名を連結する L7:繰り返しの終点 L8: Mid関数を使用し、最初のタブを除去する
L10:エントリメソッドの出口 Public Function AllSheetName() Dim ix As Integer AllSheetName = "" For ix = 1 To ActiveSheet.Parent.Sheets.Count AllSheetName = AllSheetName & vbTab & ActiveSheet.Parent.Sheets(ix).Name Next ix AllSheetName = Mid(AllSheetName, 2) End Function 1 2 3 4 5 6 7 8 9 10 InvokeVBA.bas -
自分で作るVBAの、開発 開発は、VBAからでもできる。寧ろ、VBAでの開発をお勧め! 但し、UiPathの「VBA の呼び出し」アクティビティにて使用する時は、以下の点に注意! ・Excel アプリケーションスコープ配下で使うのが大前提! ・Option構文は使用できない。 ・Publicは入れておく。 ・Functionの戻り値を定義しても、呼び出し側ではObject型を定義する。 ⇒CTypeで変換を掛けると、あとあと使いやすい。
・使用PCのEXCELの信頼オプションを確認しよう! Public Function AllSheetName() Dim ix As Integer AllSheetName = "" For ix = 1 To ActiveSheet.Parent.Sheets.Count AllSheetName = AllSheetName & vbTab & ActiveSheet.Parent.Sheets(ix).Name Next ix AllSheetName = Mid(AllSheetName, 2) End Function 1 2 3 4 5 6 7 8 9 10 InvokeVBA.bas -
自分で作るVBAの、表示シートの一覧を取得 L1:エントリメソッドの定義。括弧の中には、 最大30個の引数が定義でき、Functionの場合は、戻り値を定義できる。 L2:エントリメソッド内で使用する変数の定義。なくてもよいが、合った方がよい L3:戻り値の初期化 L4:ActiveSheetの親(Workbook)のSheetsの件数分繰り返す L5:シート表示モードがxlSheetVisible(-1)なら… L6:戻り値に、タブと、シート名を連結する L8:繰り返しの終点 L9:
Mid関数を使用し、最初のタブを除去する L10:エントリメソッドの出口 Public Function VisibleSheetName() Dim ix As Integer VisibleSheetName = "" For ix = 1 To ActiveSheet.Parent.Sheets.Count If ActiveSheet.Parent.Sheets(ix).Visible = -1 Then VisibleSheetName = VisibleSheetName & vbTab & ActiveSheet.Parent.Sheets(ix).Name End If Next ix VisibleSheetName = Mid(VisibleSheetName, 2) End Function 1 2 3 4 5 6 7 8 9 10 InvokeVBA.bas -
Public Function intを返します() As Integer intを返します = -1 End Function
Functionの戻り値の実行例 Public Function Dateを返します() As Date Dateを返します = DateSerial(1960, 11, 11) + TimeSerial(1, 2, 3) End Function Public Function 文字列配列を返します() As String() Dim WK() As String ReDim WK(2) WK(0) = "A" WK(1) = "B" WK(2) = "C" 文字列配列を返します = WK End Function CType(Object型, Int16) CType(Object型, DateTime) -
Public Function VisibleSheetName() Dim ix As Integer VisibleSheetName = ""
For ix = 1 To ActiveSheet.Parent.Sheets.Count If ActiveSheet.Parent.Sheets(ix).Visible = -1 Then VisibleSheetName = VisibleSheetName & vbTab & ActiveSheet.Parent.Sheets(ix).Name End If Next ix VisibleSheetName = Mid(VisibleSheetName, 2) End Function 他のロボットでも使いやすくしてみよう! VBAの呼び出し.ToString.split(ControlChars.Tab) • [VBAの呼び出し]の戻り値(Object型)を、 • .ToStringして文字列変換し、 • tabコードで.Splitし、 • 配列化する VBAファイルを展開してもよいが、 • VBAファイルが書き換えられてしまう • 戻り値.ToString.split(ControlChars.Tab)をロボ側でやらねばならない手間 ライブラリ機能で実装してみよう! -
ライブラリ機能で実装してみよう! 前提 • 「VBA の呼び出し」アクティビティは、 「EXCEL アプリケーションスコープ」の配下に配置しなければならない • ライブラリ機能は、呼出元のMain以外のアクティビティとして挙動する。 呼出元のMain内の「EXCEL
アプリケーションスコープ」で開いたEXCELを、 対象にしなければならない! どのようにするのか? ⇒ 「出力」の「パラメタ」に変数を設定し、それを持ちまわる。 ⇒持ちまわる際には、「既存のブックを使用」に設定する 更に、オプションは、すべてチェックオフにする(多分) -
21.6.0-beta.4514+Branch.release-v21.6.0.Sha.57f15d2b37925eaab372a335a19cfdb1e3e4ce40 ライブラリ は正常にパブリッシュされました。 名前: HANACCHI.EXCEL.ACTIVITIES バージョン: 1.0.1 パブリッシュ先: [C:¥Users¥xxx¥Documents¥UiPath](file:///C:/Users/xxx/Documents/UiPath) lib/net45¥HANACCHI.EXCEL.ACTIVITIES.dll
lib/net45¥HANACCHI.EXCEL.ACTIVITIES_Expressions_59961323.dll lib/net45¥HANACCHI.EXCEL.ACTIVITIES_Expressions_65311315.dll lib/net45¥InvokeVBA.bas lib/net45¥project.json lib/net45¥.tmh¥config.json lib/net45¥.settings¥Design¥settings-afad0842.json lib/net45¥.settings¥Release¥settings-1a5b880a.json lib/net45¥.settings¥Release¥settings-5190454b.json lib/net45¥.settings¥Release¥settings-590bb27b.json lib/net45¥.settings¥Release¥settings-9e9290da.json lib/net45¥.settings¥Release¥settings-a1b2dac1.json lib/net45¥.settings¥Release¥settings-afad0842.json PUBLISH成功! -
依存関係前 { "name": "シート名の一覧を取得", "description": "VBA呼出し", "main": "Main.xaml", "dependencies": {
"UiPath.Excel.Activities": "[2.5.1]", "UiPath.Mail.Activities": "[1.3.0]", "UiPath.System.Activities": "[18.4.2]", "UiPath.UIAutomation.Activities": "[18.4.4]", "UiPathTeam.Excel.Activities": "[1.1.2]" }, "schemaVersion": "4.0", "studioVersion": "21.6.0.0", "projectVersion": "1.0.0.0", 依存関係後 { "name": "シート名の一覧を取得", "description": "VBA呼出し", "main": "Main.xaml", "dependencies": { "HANACCHI.EXCEL.ACTIVITIES": "[1.0.1]", "UiPath.Excel.Activities": "[2.11.0-preview]", "UiPath.Mail.Activities": "[1.11.0-preview]", "UiPath.System.Activities": "[21.6.1-preview]", "UiPath.UIAutomation.Activities": "[21.6.1-preview]", "UiPathTeam.Excel.Activities": "[1.1.2]" }, "schemaVersion": "4.0", "studioVersion": "21.6.0.0", "projectVersion": "1.0.0.0", カスタムアクティビティ…インストール中に! 略 略 project.json -
7月31日公開予定(UiPathブログ発信チャレンジ2021サマー) 「VBA を呼び出し」アクティビティ の<<Object型>> 「VBA を呼び出し」アクティビティ で遭遇するエラー 「VBA を呼び出し」アクティビティ でそれでも遭遇するエラー
「VBA を呼び出し」アクティビティ で作ったもの (現在MarketPlace審査中)