[VBA]MS Access開発覚書 Accessからパスワード付きExcelを開く-CreateObject関数+Workbooks.Openメソッド-

2020/01/27

  


✅週1更新、お仕事の時間。


今回はVBAでの外部オブジェクト(ファイル操作)です。
せっかく業務システムを作ったからにはそこからできるだけすべての操作を行いたいもの。

そのために今回は


でbatから開けるようにしたファイルをAccessからVBAを用いてひらけるようにします。当然パスワードも自動入力で。

色々調べたり試行錯誤した結果

今回は
CreateObject 関数+Workbooks.Openメソッド で実現しました。


✅前提条件


ここからは
C:\Users\User\document にある
ExcelFile.xlsx という名前のExcelファイルに
Password というパスワードを打ち込んで開く

これを目標に進めていきます。


✅CreateObject関数



そ参照します。

-構文-
CreateObject(class, [ servername ])

なのでCreateObject 関数では
class(必須)でアプリケーション名とクラスを指定し
servername(省略可)でネットワーク サーバーの名前を指定。省略した場合はローカル。

class 引数の構文は appname.objecttype で記載と書いてあるので。
appname にアプリケーション名前である『Excel』を
objecttype オブジェクトの型またはクラスである『Application』を代入して

CreateObject("Excel.Application")

とするとよき。

これでExcelを外部ライブラリ(ActiveXオブジェクト)の参照先として設定できました。



✅Workbooks.Openメソッド



を参照します。

-構文-
expression.Open (FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Converter, AddToMru, Local, CorruptLoad)
なので…正直引数が多すぎてわからんので、今回必要な部分だけ抜き出して

expression.Open (FileName, Password)

こうです。expressionは使用可能なオブジェクトなので、今回はWoekbooks
C:\Users\User\document にある ExcelFile.xlsx という 

目標に合わせて直接記載すると

Workbooks.Open C:\Users\user\document\ExcelFile.xlsx, Password:=Password" 

こうなる。

これでオブジェクトの定義方法と開き方がわかったので、あとは実際にファイルのパスやファイル名を指定してボタンワンクリックで開けるようにコーディングしていきます。


✅完成形


Accessのイベントプロシージャから


『TestButton』という名前のボタンをシングルクリックした場合に目標の動作が実行できるように記載します。

①ファイルパスとファイル名を別々に定義して組み合わせる(メンテ性重視)

  

Private Sub TestButton_Click()

'パス(文字列型)、エクセルファイル名(文字列型)、エクセル(オブジェクト)を定義。
Dim ExcelPath As String
Dim ExcelName As String
Dim Excelobj

'エクセルオブジェクトを作成します
Set Excelobj = CreateObject("Excel.Application")

'エクセル画面を表示します
Excelobj.Visible = True

'ExcelPathでファイルパスを指定。
ExcelPath = "C:\Users\user\document"

'ExcelNameでファイル名を指定。
ExcelName = "ExcelFile.xlsx"


'ExcelPath & ExcelNameで絶対パスとし、パスワードを指定してオープン。
Excelobj.Workbooks.Open ExcelPath & "\" & ExcelName, Password:="Password"
'エクセルオブジェクトの破棄
Set Excelobj = Nothing


End Sub

②最初から絶対パスを指定する(文量少)

Private Sub TestButton_Click()

'パスとファイル名を最初からフルパスで定義(文字列型)、エクセル(オブジェクト)を定義。
Dim ExcelPathName As String
Dim Excelobj

'エクセルオブジェクトを作成します
Set Excelobj = CreateObject("Excel.Application")

'エクセル画面を表示します
Excelobj.Visible = True

'ExcelPathでファイルパスを指定。
ExcelPathName = "C:\Users\user\document\ExcelFile.xlsx"


'パスワードを指定してオープン。
Excelobj.Workbooks.Open ExcelPathName, Password:="Password"


'エクセルオブジェクトの破棄
Set Excelobj = Nothing


End Sub


この2パターンで動作確認しています。
いずれの記載も問題なくエクセルファイルを開くことが出来ました。


✅最近お仕事熱心じゃない?


それはほんとにそう。

おしごとたのしい。
かいしゃのかねでやりたいことがたくさんある。

ぶっちゃけ書くのが追いついてないだけで本業の合間全部使って次々新しい構文を調べては実装してるので日々めっちゃ忙しい

実際仕事の時間だけだと足りなくてこうやって休日に自分から勉強して実践して成功した内容を仕事に持ち込んでいる始末


…これを医者時代にやれれば大成できたのでは!?



とも思うけど

それができないくらい激務だったのが医者時代だったのでまず不可能ですね。

やっぱホワイトな職場環境は従業員の能力を伸ばしますよ。

逆をいえば転職スキルが身につかないくらいブラックにすれば転職を防げるのかもね笑

それでは。

コメント

0 件のコメント :

コメントを投稿

当ブログの内容は端末の文鎮化を引き起こす可能性を伴う危険なものを含み、投稿主は施行の推奨を致しません。

また、このブログコメント欄、Twitter等で問い合わせ頂いても詳細な内容を記載/返答する予定はございません。
自分で調べる。自己責任。転んでも自分で起きる。ことが出来ない方はコメント前にブラウザバックを推奨いたします。