- ベストアンサー
パスワードがかかってる場合どのように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で指定すればいいでしょうか?
- QWNLCXLUSF
- お礼率81% (86/106)
- オフィス系ソフト
- 回答数2
- ありがとう数2
- みんなの回答 (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
その他の回答 (1)
- skp026
- ベストアンサー率45% (1011/2238)
こちらのサンプルが参考になりそうです。 http://vba.doorblog.jp/archives/51301705.html
お礼
ご回答ありがとうございます。
関連する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 別のプロシージャからも、使えるためには パブリックにするための方法を教えて下さい
- ベストアンサー
- Excel(エクセル)
- 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" アドバイス等お願いします。
- 締切済み
- Visual Basic
- 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
- ベストアンサー
- Excel(エクセル)
- 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を無事通過しますが、データの操作取得はできません。 どなたかわかる方ご教授おねがいします。
- ベストアンサー
- Excel(エクセル)
- 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を実行するところで、「日付エラー」となってしまいます。 データには特に日付等はないのでエラーになる原因がわかりません。 どなたかご教示いただけますでしょうか。
- 締切済み
- Visual Basic
- 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を使う事は出来ない状況です。 何か良い手段は御座いませんでしょうか? 詳しい方が居られましたらご教示頂きたく思います。
- ベストアンサー
- その他(データベース)
お礼
ご回答ありがとうございます。