0
1

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 3 years have passed since last update.

ExcelVBA怖いよ

Last updated at Posted at 2021-02-17

初めまして、とある企業内で、サーバ管理してます。

検索すると、とにかくQiitaにお世話になっているので、少しは恩返し(なるのか?)と思って、何かと乗り切っていることを、バレないように書こうかなと。

泣けてくるぜレガシーVBA###

いきなり、キミ、スクリプト出来るので、VBAも出来るよね?
と渡される、何の仕様も残っていないVBAファイル。
近代化よろしくと言われても、どうすりゃいいの?

中身を覘くと、VBA好きの現場の方が、ネット見て、くみ上げた超大作。
もちろん、あとから直すことを考えていないので、もう力業のオンパレード。
しかも、現場はExcel以外受け付けないよと言われる始末。

僕も知らなかったのですが、VB.netぐらいのコトが出来るだろうと舐めてたら、
.netのクラス読み出せたら簡単だろうと高をくくってると
実は、VBAとVBって別物なんですね。
調べても、ズバッと言ってくれてるサイトは無いし、ここでメモとして書いておこう。

そこで、外部プログラムをキックですよ###

ExcelVBA→Powershell→CSV出力→ExcelVBA
この方法だと、時代遅れ(失礼)なVBAを使わなくて済む。

あと、ExcelVBAからのキックだと、副産物として、
必要なライブラリーを読み込むことが可能になります。

Powershell5.1だと、例えば、標準で、AccountManagementがロードされていないわけで、
classを利用している場合、Add-Typeしていても、瞬間Error、この辺が防げるのが強み。

Dim objWSH as Object
Set objWSH = CreateObject("Wscript.shell")
objWSH.Run "powershell -Nologo -ExecutionPolicy RemoteSigned -Command " test.ps1

test.ps1の前に、ロードしたいモジュールを記述するとOK

"Add-Type 'System.DirectoryService.AccountManagement';"

※ADを検索するのに、DirectorySearcherを使っている方は、比較的簡単に使える、AccountManagementを利用すると、若干楽になるかも。なぜか、標準で読み込まれないんですよね。

後は、外部で実行、結果をCSVにして、VBAでCSV読み込みにして、完了。
見た目は、Excelで操作しているので、Excel至上主義の人にもセーフですね。

ではでは、次回の講釈で。続きが書けるといいなぁ。

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?