2022年5月18日水曜日

痒い所に手が届くような細かい業務改善は、エクセルのVBAでプログラムを組んだ方が安上がりだということです ー zipファイル解凍(VBA)

      
勤め先ではMcFrameと言う生産管理システムを使用中で、製造業ではお馴染み。
改めて調べてみたら、世界17か国、2,000サイト以上に導入とあり驚きました。

基本システムはそうなんだけれど、末端で使用するデータの出力は別のアプリ。
ビジネスオブジェクト(BO)と言って、ERPの老舗のSAPが提供していますな。

まあ、毎日の出荷業務に必要な情報は、条件の投入でデータを検索抽出します。
つまり、個人業務で使う資料を、このBOを使ってシステムから引っ張るのです。

ただ、データの作表は出来ても、続けてタックシール印刷となるとかなり困難。
プリンター制御による印字は、検索を設定するプログラミングとは別次元です。

例えば、プリンタードライバーを選択して、印刷用紙や印刷書式を指定します。
こういうプログラミングは、このBOアプリを専門的に知らないと操作できない。

だから、印刷のプログラミングを請け負うソフトハウスがあるぐらいだものな。
日常業務をこなしつつ、レベルの高い勉強をして印刷したい人はいないだろう。

代わりに、検索結果は、帳票の出力できるCSVファイルでダウンロードが可能。
BOの中で登録した検索抽出アプリを実行すれば、ダウンロードファイルに保存。

この設定は、まだ難しくないので、このCSVファイルをどうにかしたいのです。
ところが、敵は去る者ひっかくもので、圧縮ファイルで保存されてくるんだな。

これを、エクセルのVBAで解凍して、データ読み込みから印刷まで連続したい。
この作業にあたって、当初はCSVを読み込む設定だけでコードを書いていたの。

だけど、検索抽出アプリの実行では、zipファイル保存だけと言われてしまった。
こうなりゃ、VBAで解凍までするしかなくて、ラッキーなのはパスワード無し。

単純に回答するだけなので、ネットで探しまくったら、超簡単コードを発見だ。
これを少し手直しして使うことにしたから、皆さんに紹介することに致します。

Sub OpenZipFile()
Dim Mst As String, Tst As String
 '圧縮元フォルダーパス/  '解凍先フォルダーのパス
Dim ZipShell As New Shell
'参照設定のMicrosoft shell controls and automation を選択
  Mst = ""  'Mst = "解凍する圧縮元フォルダー"
   Mst = Mst & "C:\Users\"
     Mst = Mst & Environ("USERNAME")
       Mst = Mst & "\Downloads\ファイル名称.zip"  '
         Mst = Mst & ""
  Tst = ""  'Tst = "解凍先のパス"
    Tst = Tst & "C:\Users\"
      Tst = Tst & Environ("USERNAME")
        Tst = Tst & "\Downloads"
          Tst = Tst & ""
   ZipShell.Namespace(Tst).CopyHere ZipShell.Namespace(Mst).Items
 Set ZipShell = Nothing
End Sub

キモは、参照設定を選択しないと解凍してくれないので、注意してくださいね。
それで、この参照設定で他に有用な使い道があるのか探しましたが、ないんだ。

なので、エクセルで活用するには、圧縮ファイル解凍ぐらいだと思って下さい。
というわけで、この参考コードは、汎用性がかなり高いと自画自賛しています。

なぜなら、フォルダーのパスを特定するのに、ユーザー名をEnviron関数を使って探し出しており、このコードを使えばどのPCでも利用できますので、自分なりに工夫して使い回しができるようにしたということなのでした。



いいねと思ったら、三つポチっとね!
にほんブログ村 スキースノボーブログへにほんブログ村 スキースノボーブログ スキーへにほんブログ村 旅行ブログ 旅日記・旅の思い出へ
にほんブログ村    にほんブログ村      にほんブログ村 



0 件のコメント:

コメントを投稿