VB6からパスワード認証してExcelを起動するには?

解決


のぶ  2008-02-25 14:05:02  No: 139051  IP: 192.*.*.*

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 を装入しただけでは、エラーも起こらずそのまま
通過してしまいました。
文章が長くなってしまいましたが、すみませんが、ご教授お願いします。

編集 削除
大吉末吉  2008-02-25 15:53:46  No: 139052  IP: 192.*.*.*

>  本来なら↑これでいけると書いてあったのですが、参照設定が必要みたいです

どこにそう書いてあったのか知りませんが・・・
名前つき引数(:=)を使う場合、参照設定が必要です。
参照設定を行わないなら、名前つき引数は使わないで、普通に引数指定してください。

> エラーも起こらずそのまま通過してしまいました。
これは、

>    On Error Resume Next
を指定しているからです。
これは「全てのエラーを無視して先に進め」と言う命令です。
必要なくなったら(普通のエラー処理に戻すなら)「On Error Goto 0」で解除してください。

> ネットのどこからかで見つけてきて使っている文章です。
との事ですが・・・正直言って滅茶苦茶ですよ。
#元から無茶苦茶なのか、貴方が切り貼りして無茶苦茶にしてしまったのか分かりませんが・・・

ちゃんと1行づつ理解してから使わないと、とんでもないことに・・・

編集 削除
魔界の仮面弁士  2008-02-25 16:11:50  No: 139053  IP: 192.*.*.*

>> そのダイアログをパスワードを渡すことで回避したいと思ってます。
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

編集 削除
のぶ  2008-02-25 16:47:31  No: 139054  IP: 192.*.*.*

早速の返信ありがとうございます。
大吉末吉様 
なにぶん初心者なもので、こんな事出来ないかなとネットで調べては、
文章をコピーして何とか動かしてたので、一文一文までの理解が足りなくて
すみませんでした。 汗    
 
魔界の仮面弁士様  
書いていただいた文で試したら、起動できました。
参考にさせていただきます。どうもありがとうございました。

編集 削除
大吉末吉  2008-02-25 16:48:22  No: 139055  IP: 192.*.*.*

> > 名前つき引数(:=)を使う場合、参照設定が必要です。
> そんな事は無いと思いますが…。
> 少なくとも当方では、下記のようなコードが動きますし。

あ。本当だ・・・
「名前つき引数は参照設定しないと使えない」と思い込んでました。

失礼しました。

編集 削除