• ベストアンサー

パスワードがかかってる場合どのようにVBAで指定す

Set cnEx = CreateObject("ADODB.Connection") With cnEx .Provider = "Microsoft.ACE.OLEDB.12.0" .Properties("Extended Properties") = "Excel 12.0" .Properties("Data Source") = "C:\Users\\test.xlsm" .Open End With VBAでこのコードでエクセルファイルを開く時に パスワードがかかってる場合どのようにVBAで指定すればいいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.2

こんにちは ExcelのVBAで、でしょうか? 二度手間のような気がしてしまうかも知れませんが、最初に開いておかないと ダメです・・・多分。 Sub test()   Dim cnEx As Object   Dim tBK As Workbook   Set tBK = Workbooks.Open("C:\Users\ユーザー名\test.xlsm", , , , "パスワード")   Set cnEx = CreateObject("ADODB.Connection")      With cnEx     .Provider = "Microsoft.ACE.OLEDB.12.0"     .Properties("Extended Properties") = "Excel 12.0"     .Properties("Data Source") = "C:\Users\ユーザー名\test.xlsm"     .Open   End With   '処理      '終了   cnEx.Close   tbk.Saved = True   tBK.Close End Sub

QWNLCXLUSF
質問者

お礼

ご回答ありがとうございます。

その他の回答 (1)

  • skp026
  • ベストアンサー率45% (1011/2238)
回答No.1

こちらのサンプルが参考になりそうです。 http://vba.doorblog.jp/archives/51301705.html

QWNLCXLUSF
質問者

お礼

ご回答ありがとうございます。

関連するQ&A

  • Visibleは使えないのでしょうか?

    オフィス2010です。 アクセスvbaでエクセルのデータを操作したいので Sub test() Set cnEx = CreateObject("ADODB.Connection") With cnEx .Provider = "Microsoft.ACE.OLEDB.12.0" .Properties("Extended Properties") = "Excel 12.0" .Properties("Data Source") = "C:\Users\test.xlsm" .Open .Visible = True 'エラーになる End With End Sub と言うコードを作ったのですが .Visible = Trueで 実行時エラー 446 オブジェクトは名前付き引数をサポートしていません。 と言うエラーが発生します。 Visibleは使えないのでしょうか?

  • Excel VBA について教えて下さい

    Excel VBA でAccess接続します 今までは Sub aaa() Set cn = CreateObject("ADODB.Connection") cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=aaa.mdb;" End Sub のように使っていましたが(単一プロシージャ) Set cn = CreateObject("ADODB.Connection") の部分をパブリックにして Sub bbb() cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=aaa.mdb;" End Sub 別のプロシージャからも、使えるためには パブリックにするための方法を教えて下さい

  • DBパスワードありVBAアクセスについて

    Access2010を使用しております。 Excel2010からAccessにVBAからSelect文でデータセット取得しようとしております。 接続には以下の記述で接続しようとしてますが、オートメーションエラーになります。 Set con = New ADODB.Connection con.Provider = "Microsoft.Ace.OLEDB.12.0" con.Properties("Jet OLEDB:Database Password") = Password con.Open "C:\\Directory" または con.Provider = "Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Directory;Jet OLEDB:Database Password=Password" con.Open などいろいろ試してますがうまくいきません。 パスワードがなければ以下の記述で開けるのですが。 con.Provider = "Microsoft.Ace.OLEDB.12.0" con.Open "c:\\Directory" アドバイス等お願いします。

  • ADO ファイルを閉じるには?

    アクセスからエクセルへ Sub Sample() Dim cn As Object Dim rs As Object Set cn = CreateObject("ADODB.Connection") With cn .Provider = "Microsoft.ACE.OLEDB.12.0" .Properties("Extended Properties") = "Excel 12.0" .Properties("Data Source") = "D:\Book1.xlsx" .Open End With Set rs = CreateObject("ADODB.Recordset") rs.Open "SELECT * FROM [sheet1$]", cn, 3 Debug.Print rs.RecordCount rs.Close: cn.Close Set rs = Nothing : Set cn = Nothing End Sub このコードでシートの行数を取得してるのですが このコードを実行後もファイルが開いたままなのですが 閉じるにはどうすればいいのでしょうか? .Openでファイルが開くので cn.Close でファイルが閉じるのかと思ったら閉じません。 cn.Quitを追記してみましたが 実行時エラー -2147467259 選択クエリを実行できません。 となりました。 どうすればファイルを閉じることが出来るのでしょうか?

  • Excelを更新するADOの書き方を教えて下さい。

      .Provider = "MSDASQL"   cnn.ConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" & _               "DBQ=" & xlFileName & ";" & _               "ReadOnly=False;"   If isHeader Then     .Properties("Extended Properties") = "Excel 12.0;HDR=YES;IMEX=1"   Else     .Properties("Extended Properties") = "Excel 12.0;HDR=NO;IMEX=1"   End If   .Open   .Execute strSQL という書き方では、動作します。また、"Microsoft.ACE.OLEDB.12.0;"バージョンでも   cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strDB & ";"   With cnn      .Errors.Clear      .BeginTrans      .Execute strSQL      .CommitTrans   End With という書き方で、Access の mdb は更新できます。エクセルのシートを Recordset としてオープンすれば、下記の接続設定でも読むことは出来ます。非同期を指定すれば、エラーは回避できますがシートは更新されていません。当方、VBAを書くのは1996年以来。なんとか、この問題を解決して一区切りを付けたいと思っています。宜しく、ご協力の程お願いしておきます。 Public Function SQLExecute(ByVal strSQL As String, _               Optional xlFileName As String = "", _               Optional isHeader As Boolean = True) As Boolean On Error GoTo Err_SQLExecute   Dim isOK As Boolean   Dim DataValue   Dim cnn As ADODB.Connection     isOK = True   Set cnn = New ADODB.Connection   '   ' ThisWorkbook.FullName の指定   '   If Not Len(xlFileName) Then      xlFileName = ThisWorkbook.FullName   End If   '   ' 接続設定   '   With cnn     .Provider = "Microsoft.ACE.OLEDB.12.0;"     If isHeader Then       .Properties("Extended Properties") = "Excel 12.0;HDR=YES;IMEX=1"     Else       .Properties("Extended Properties") = "Excel 12.0;HDR=NO;IMEX=1"     End If     .Open xlFileName     .Errors.Clear     .BeginTrans     .Execute strSQL     .CommitTrans   End With Exit_SQLExecute: On Error Resume Next   cnn.Close   Set cnn = Nothing   SQLExecute = isOK   Exit Function Err_SQLExecute:   isOK = False   If cnn.Errors.Count > 0 Then     ErrMessage cnn.Errors(0), strSQL     cnn.RollbackTrans   Else     MsgBox "プログラムエラーが発生しました。" & _         "システム管理者に報告して下さい。(SQLExecute)", _         vbExclamation, " 関数エラーメッセージ"   End If   Resume Exit_SQLExecute End Function

  • NEWキーワードとCreateObjectは同じ?

    NEWキーワードとCreateObjectは同じことをするのでしょうか? Sub ADO_Sample1() Dim cn As New ADODB.Connection Set cn = CreateObject("ADODB.Connection") cn.Open "Provider = Microsoft.ACE.OLEDB.12.0;Data Source=" & _ "D:\Mail.mdb;Jet OLEDB:Database;" Debug.Print "ファイルに接続できました。" cn.Close: Set cn = Nothing End Sub このようなコードの時、 Set cn = CreateObject("ADODB.Connection") は、あってもなくても問題ないようです。 NEWとCreateObjectがある場合は、 2度データベースに接続してしまうのでしょうか? NEWとCreateObjectがあってもエラーにならない理由を教えてください。

  • ADO エクセル→エクセル PW付きファイル接続

    以前も http://okwave.jp/qa/q8283354.html で同じような質問をしたのですが ADOでエクセルからエクセルに接続する方法を教えてください。 接続先のエクセルファイルにはPWがかかっています。 Sub Sample() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset With cn .Provider = "Microsoft.ACE.OLEDB.12.0" .Properties("Extended Properties") = "Excel 12.0" .Properties("Data Source") = ActiveWorkbook.Path & "\test.xlsx" .Properties("Password") = "0000" .Open End With 上記では、.Open部分で -------------------------------------------------------- 実行時エラー-2147217843 アプリケーションを起動できません。 システムデータベースが存在しないか、またはほかのユーザーが排他的にシステムデータベースを開いています。 -------------------------------------------------------- となります。 .Properties("Password") をコメントアウトすると、 -------------------------------------------------------- 実行時エラー -2147467259 外部テーブルのフォーマットが正しくありません。 -------------------------------------------------------- となり、そのまま再度F5を押すと -------------------------------------------------------- 実行時エラー -2147217843 認証に失敗しました。 -------------------------------------------------------- となります。 ちなみに参照設定は Microsoft ActiveX Data Objects 2.7 Library にチェックを入れています。 .Properties("Data Source") = ActiveWorkbook.Path & "\あああ.xlsx" のように、存在しないファイル名にした時は、 .Openを無事通過しますが、データの操作取得はできません。 どなたかわかる方ご教授おねがいします。

  • ADO1とADO2は意味は同じですか?

    Private Sub ADO1() Dim cn As New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & CurrentProject.FullName cn.Close: Set cn = Nothing End Sub Private Sub ADO2() Dim cn As ADODB.Connection Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & CurrentProject.FullName cn.Close: Set cn = Nothing End Sub は、 Dim cn As ADODB.Connection Set cn = New ADODB.Connection を簡素化したものが Dim cn As New ADODB.Connection になるのでしょうか?

  • アクセスVBA。ADO

    CSVから列を分割してテーブルにしたいかったので 下記のコードを記述しましたが、 Dim cn As ADODB.Connection Dim rs As New ADODB.Recordset Dim datacount As Long Set cn = New ADODB.Connection With cn .ConnectionString = "Provider=Microsoft.jet.OLEDB.4.0;Data Source=" & CurrentProject.Path & "\;" .Properties("Extended Properties").Value = "text;HDR=YES;" .Open End With Set rs = cn.Execute("SELECT * FROM 構成マスタ.csv") datacount = rs.Fields.Count For i = 0 To datacount strsql = "SELECT " & rs.Fields(i).Name & " INTO " & rs.Fields(i).Name & " FROM 構成マスタ.csv;" cn.Execute strsql Next i rs.Close cn.Close Set rs = Nothing Set cn = Nothing SQLを実行するところで、「日付エラー」となってしまいます。 データには特に日付等はないのでエラーになる原因がわかりません。 どなたかご教示いただけますでしょうか。

  • ADOで別ユーザが開いているエクセルを読み込む方法

    VisualBasic.NETからADOをEXCELデータで使用して、ブック内のシート内容を読み出して集計するソフトを作っています。 題名の通りなのですが、既に別ユーザが開いているEXCELブックの内容をADOを使って読み出すにはどうすれば良いでしょうか? 開かれていない状態のEXCELなら問題なく読めるのですが、既に別ユーザに開かれているEXCELを読もうとするとエラーとなってしまいます。 以下、ソースコードの一部です。 コメントアウト箇所はいろいろ試した残骸です。 fsに開こうとしているEXCELパスが入ってます。 rsExcel = CreateObject("ADODB.Recordset") cnExcel = CreateObject("ADODB.Connection") 'cnExcel.ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _ ' "DBQ=""" & fs(ii) & """;" 'With cnExcel ' .Provider = "MSDASQL" ' .ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _ ' "DBQ=" & fs(ii) & "; ReadOnly=True;" ' .Open() 'End With 'System.IO.File.Open(fs(ii), IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.Read) With cnExcel .Provider = "Microsoft.Jet.OLEDB.4.0" .ConnectionString = "Data Source=" & fs(ii) & ";" & _ "Extended Properties=Excel 8.0;" .Open() End With cnExcel.Mode = ADODB.ConnectModeEnum.adModeRead cnExcel.Open() sSQL = "SELECT * FROM [" & SheetName & "$]" rsExcel.Open(sSQL, cnExcel, ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockReadOnly) どの方法を試してもOPENしようとする所でエラーとなります。 エラーメッセージ「ファイル '' を開くことができませんでした。ほかのユーザーが排他的に開いているか、データを読み取る権限がありません。」 既に誰かが使用中の.xlsをダブルクリックしてEXCELで開けば、読み取り専用ですが開けて内容が読める訳ですが、それをADOで行う事は出来ないんでしょうか? COMコンポーネントのEXCELライブラリのWORKBOOKS.OPENで読み取り専用で事前に開いた後にADOでOPENすれば読めたのですが、ソフトをインストールする予定のPCはEXCEL未インストール状態なのでCOMを使う事は出来ない状況です。 何か良い手段は御座いませんでしょうか? 詳しい方が居られましたらご教示頂きたく思います。

専門家に質問してみよう