VB6からすでにある目的のExcelファイルを起動し、その中にデータをいれています。Excelにパスワードをいれると、vbからの起動時にパスワードダイアログが
表示されますが、そのダイアログをパスワードを渡すことで回避したいと思ってます。ただし、現在の接続方法は、Excelのバージョンなどがまちまちな為、参照設定で選ぶExcelのコンポーネントを使わないで、構文のみで行ってます。
下のは、ネットのどこからかで見つけてきて使っている文章です。
===========================================================
Option Explicit
Public MyXL As Object 'Excel への参照を格納する変数
Public XLWB As Object
Sub main()
Dim r,r2,pass
r2="C:\test.xls"
pass="1"
r=GetExcel(r2, pass)
end sub
Function GetExcel(r2, pass)
Dim ExcelWasNotRunning As Boolean 'Excel の起動を示すフラグ
'Excel が既に起動されているかを調べます。
On Error Resume Next
Set MyXL = GetObject(, "Excel.Application")
If Err.Number Then
ExcelWasNotRunning = False
Err.Clear ' エラー発生時 errのクリア
Else
ExcelWasNotRunning = True
End If
MyXL.Parent.Windows(1).Visible = True
If ExcelWasNotRunning = True Then
MyXL.Application.DisplayAlerts = False
MyXL.Saved = True
MyXL.Close
MyXL.Application.Quit
MyXL.Application.DisplayAlerts = True
End If
' Excel の起動調査。
' Excel が起動中の場合、起動中オブジェクト テーブルに登録。
' 表示対象のファイルへの参照をオブジェクト変数に代入します。
Set XLWB = GetObject(r2) ' ←ここでExcelが起動するが、パスワードの受け渡し方が不明
MyXL.Workbooks.RunAutoMacros 1
XLWB.Application.Visible = True
XLWB.Parent.Windows(1).Visible = True
End Function
================================================================
MyXL.Application.Workbooks.Open FileName:=r2, Password:=pass
本来なら↑これでいけると書いてあったのですが、参照設定が必要みたいです
又、Set XLWB = GetObject(r2)の前にMyXL.Application.Workbooks.Open FileName:=r2, Password:=pass を装入しただけでは、エラーも起こらずそのまま
通過してしまいました。
文章が長くなってしまいましたが、すみませんが、ご教授お願いします。
> 本来なら↑これでいけると書いてあったのですが、参照設定が必要みたいです
どこにそう書いてあったのか知りませんが・・・
名前つき引数(:=)を使う場合、参照設定が必要です。
参照設定を行わないなら、名前つき引数は使わないで、普通に引数指定してください。
> エラーも起こらずそのまま通過してしまいました。
これは、
> On Error Resume Next
を指定しているからです。
これは「全てのエラーを無視して先に進め」と言う命令です。
必要なくなったら(普通のエラー処理に戻すなら)「On Error Goto 0」で解除してください。
> ネットのどこからかで見つけてきて使っている文章です。
との事ですが・・・正直言って滅茶苦茶ですよ。
#元から無茶苦茶なのか、貴方が切り貼りして無茶苦茶にしてしまったのか分かりませんが・・・
ちゃんと1行づつ理解してから使わないと、とんでもないことに・・・
>> そのダイアログをパスワードを渡すことで回避したいと思ってます。
Workbooks.Open メソッドの password/WriteResPassword引数を試してみてください。
> 名前つき引数(:=)を使う場合、参照設定が必要です。
そんな事は無いと思いますが…。
少なくとも当方では、下記のようなコードが動きますし。
Dim x As Object
Set x = CreateObject("Excel.Application")
x.Visible = True
x.workbooks.Open WriteResPassword:="writepass", FileName:="C:\sample.xls", password:="readpass"
MsgBox "開いた", vbSystemModal
x.Quit
早速の返信ありがとうございます。
大吉末吉様
なにぶん初心者なもので、こんな事出来ないかなとネットで調べては、
文章をコピーして何とか動かしてたので、一文一文までの理解が足りなくて
すみませんでした。 汗
魔界の仮面弁士様
書いていただいた文で試したら、起動できました。
参考にさせていただきます。どうもありがとうございました。
> > 名前つき引数(:=)を使う場合、参照設定が必要です。
> そんな事は無いと思いますが…。
> 少なくとも当方では、下記のようなコードが動きますし。
あ。本当だ・・・
「名前つき引数は参照設定しないと使えない」と思い込んでました。
失礼しました。