0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[BluePrism]他のアプリが新規で立ち上げたExcelワークブックを、名前を付けて新規で保存する方法です。

Posted at

これを書いた理由

既存の業務アプリで、「〇〇データ生成」とかのボタンを押すと、新規のワークブックが立ち上がるので
それを名前を付けて新規保存して(もしくはコピペして)、そのファイルをまた別の業務アプリに……
みたいな作業ってありますよね。
たとえばAccessで作られた業務アプリだと

set excelApp = CreateObject("Excel.Application") 
set excelBook = excelApp.Workbooks.Add() 

とかやって新規で立ち上げてデータをシートに流し込んで……みたいな感じでアプリが出してくれるやつです。

これを自動化するにあたり、
表示されているExcelワークブックを保存するには
MS Excel VBO の「Save Current Workbook as」を使えばよくて
そのためには、そのExcelワークブックにAttachしないといけなくて
いま新規で立ち上がったワークブックで、まだ保存されてないからファイル名とか無くて……
(だいたい「Book1 - Excel」みたいな名前で立ち上がるけど、状況によってはそうと決まったわけでもない)
ファイル名がなくて自分で起動したわけでもないExcelはどうやってAttachしたらいいの……

というところで詰まって困っていました。

作成したオブジェクト

保存先のフォルダのパスとファイル名は入力引数で渡します。
main1.png

形のちがうAttachが縦に2個並んでいるところは、
上のほうは別ページにして操作ステージでAttachしているのですけど、
そのAttachの中身がこれ
main2.png
main3.png
アプリケーションモデラーで、win32でExcelのウィンドウをspyして取得しておきます。
これを使って、AttachしたあとにExcelのウィンドウをActivateします。

2個目のAttachは、MS Excel VBOのAttachです。
なんでこの2個目のAttachをするかというと、これをすると出力でhandleが取得できるからです。
(最初は、いきなりこれでAttachしようとしましたが、それではできなかったので、前に操作ステージでAttachする処理を足したのです)

この取得したhandleを使って、MS Excel VBOの

  • Save Current Workbook as
  • Close Current Workbook
  • Close Instance

とやっていきます。

終わりです

ほんとはOLEDBとかのVBOで
テーブルなりクエリなりのデータを持ってくるほうがシステムとしては正しいのでしょうけど……(´・ω・`)

私(元コボラー)が作ると、いつもこんな感じでやたら長くてまだるっこしいフローになっちゃうので、
もっと要領の良いかっこいい書き方を教えてください。

あと、BluePrismの中の人に聞いたら、Accessとの連携はサポート対象外なんだそうです……。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?