エクセルVBAでマスターキーを作りたい

このQ&Aのポイント
  • エクセルVBAを使用して、複数のファイルにパスワードを設定する方法について学びたいです。
  • マスターキーとして機能するプログラムを作成し、ファイル選択ダイアログからファイルを選択してパスワードを設定したいです。
  • 初心者のため、エラー処理やファイルの種類別の処理方法についても具体的なアドバイスがほしいです。
回答を見る
  • ベストアンサー

エクセルVBAでマスターキーを作りたい

こんなことが可能かどうかもよくわからないのですが。。 色んなエクセルファイルやワードファイルにパスワードをかけてて 色んな組み合わせで使っているのでややこしいので マスターキー的なものを作りたいと思っています。 ファイル選択ダイアログからファイルを選択して A列の読み取りパスワード、および同じ行のC列の書き込みパスワードを 適用してファイルを開くプログラムを作りたいのです。 行2の組み合わせで開かなければ行3の組み合わせを適用。それが無理なら行4。 ファイルが開けるまで順に下の行のものを適用するものです。 初心者なので色んなサイトで見たものをツギハギしてみてるのですが、 まずパスワードが違った時にエラーで止まってしまうし、 そもそもパス付Word文書をExcelから開けるのかもわからないのですが もし可能なら、拡張子を判断してどうやってワードかエクセルの どちらかを開かせるのか、そしてどうループさせればいいのか。。 行き詰っています。ご教授いただけると嬉しいです。 何卒よろしくお願いいたします。 Dim OPFileName As Variant OPFileName = _ Application.GetOpenFilename( _ FileFilter:="すべてのファイル(*.*),*.*" & _ ",エクセルファイル(*.xls),*.xls" & _ ",CSVファイル(*.csv),*.csv" & _ ",ワードファイル(*.doc),*.doc" _ , FilterIndex:=1 _ , Title:="ファイルを選択" _ , MultiSelect:=False _ ) extension = Mid(OPFileName, pointp + 1) x = 2 If OPFileName <> False Then If extension = xls Or csv Then Workbooks.Open filename:=OPFileName, password:=Cells(x, 1).Value, WriteResPassword:=Cells(x, 3).Value, IgnoreReadOnlyRecommended:=True End If End If

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 CSV にはパスワード管理は出来ませんね。 とりあえず、テクニック的なところだけを抜き出して書いておきます。 WordとExcelを開ける場合とは、コードを同じにはしないほうがよいと思います。 Wordは、CreateObject でオブジェクトを作ってあげてからのほうがよいのです。 1. >まずパスワードが違った時にエラーで止まってしまうし、 Dim OPFileName On Error Resume Next Workbooks.Open Filename:=OPFileName, _        Password:=Cells(x, 1).Text, _        WriteResPassword:=Cells(x, 3).Value, _        IgnoreReadOnlyRecommended:=True        If Err.Number > 0 Then   MsgBox "パスワードが違います。", 48 End If On Error GoTo 0 2. >そもそもパス付Word文書をExcelから開けるのかもわからないのですが ----------------------------------------------- Dim OPFileName Dim objWd As Object 'Word.Application '参照設定の場合   Set objWd = CreateObject("Word.Application") objWd.Visible = True On Error Resume Next  objWd.Documents.Open OPFileName, , , , _          Cells(x, 1).Text, , , _          Cells(x, 3).Text        If Err.Number > 0 Then   MsgBox Err.Description, 48 'パスワードが違うというだけでも良いです。   End If On Error GoTo 0  Set objWd = Nothing (事前バインディング=参照設定したほうが負担は少ないと思います。) ----------------------------------------------------------- 3. >拡張子を判断してどうやってワードかエクセルのどちらかを開かせるのか、 If OPFileName Like "*.xls" Then   'Excelを開く ElseIf OPFileName Like "*.doc" Then   'Wordを開く ElseIf OPFileName Like "*.csv" Then   'csv ファイルを開く End If ----------------------------------------------------------- 型の宣言とかの周辺部分は省きましたが、その辺りは確実なものだとします。

bowknot
質問者

お礼

ありがとうございます!! 組み合わせて実行してみたらうまく開きました! すごいですね・・・感動しました(@_@。 奥深いですね。。 後のループをもうちょっと考えてみます(笑) これを機に本気でVBAの勉強をしようと思います★ 本当にありがとうございました。助かりました(*^_^*)

関連するQ&A

  • エクセルのマクロを利用したワードの開き方

    エクセルのマクロを利用したワードの開き方を教えてください。よろしくおねがいします。ちなみにコードは Option Explicit Dim 行, ドライブ, 親フォルダ, 子フォルダ, ファイル名, 拡張子, パス Dim フルパス As String Dim ワード As Object Dim ワード文書 As Object Sub 環境リストボックスでクリックされた() 行 = Worksheets("呼出").Cells(2, 1) + 1 管理表シートから値を取り出す 選択されたファイルを開く End Sub Private Sub 管理表シートから値を取り出す() ドライブ = Worksheets("管理表").Cells(行, 2) 親フォルダ = Worksheets("管理表").Cells(行, 3) 子フォルダ = Worksheets("管理表").Cells(行, 4) ファイル名 = Worksheets("管理表").Cells(行, 5) 拡張子 = Worksheets("管理表").Cells(行, 6) End Sub Private Sub 選択されたファイルを開く() ChDrive ドライブ パス = ドライブ & "\" & 親フォルダ & "\" & 子フォルダ ChDir "C:\ときめき\環境" If 拡張子 = "xls" Then Workbooks.Open Filename:=ファイル名 & ".xls", ReadOnly:=True ElseIf 拡張子 = "doc" Then フルパス = パス & "\" & ファイル名 & ".doc" 'フルパスを作成 Set ワード = CreateObject("Word.Application") 'Wordを起動する ワード.Visible = True 'Wordを表示する Set ワード文書 = ワード.documents.Open(フルパス) 'Word文書を開く End If End Sub となっています。 あと、OSはwindowsMeで ソフトはエクセル、ワード共に2000を利用しています。 よろしくおねがいします。

  • EXCELマクロで特定の行以下をコピーしたい

    BookA.xlsファイルからBookB.cvsがあり、 bookB.csvには1から不特定に数字が昇順にならんでいます bookB.csv  A    B 1 1   文字列A 2 2   文字列B 3 54   文字列C 4 100  文字列D 5 101  文字列E BookA.xlsからbookB.csvを読出し、特定の数値(100番)を探し出し その行から下100行をコピー、BookA.xlsのSheetCに貼り付け という作業をするマクロを組みたいと思っています。 'CSVファイルを開く CSVname = Application.GetOpenFilename(Title:="CSVファイル指定", fileFilter:="CSV ファイル (*.CSV), *.csv") If CSVname = False Then MsgBox "ファイルを1個指定して下さい" Exit Sub End If 'ファイルをひらく Workbooks.Open CSVname '100番検索 Set Obj = Cells.Find("100", LookAt:=xlWhole) If Obj Is Nothing Then MsgBox "見つかりませんでした。" Else Tate = Cells.Find("100", LookAt:=xlWhole).Row End If 'A列100番のある行から199行を選択・コピー エラー→Range(Cells(1, Tate), Cells(2, Tate)).Select このように作ってみたのですが、どうしてもここでエラーになり 先に進めません。 どうか解決方法をお教え下さい。 宜しくお願いします。

  • エクセルVBAでCSVファイルから取り込みたいのですが・・・

    CSVファイルのデータを取り込むコードを教えていただけないでしょうか。 「共有フォルダ」の中に「作業用.xls」と「090820.csv」があります。csvファイルは日によって名前が変わりますが、必ず一つしか入れないことにしています。 CSVファイルの1行目は見出しです。2行目以降がデータになっています。 A2からI列最終行を「作業用.xls」のsheet1のA6にコピー(取り込み)したいのですが、よろしくお願いします。

  • 【エクセルVBA】特定のシートのみ検索したい

    VBA勉強中です。 フォルダにある複数のファイル(1ファイル内には複数シートあります)を順番に開けて検索をかけ、条件に合致した行をあるファイルへ転記・集約させるマクロを組みたいと思っています。 (条件は1番左の列が「○」であることです。) ネットや本を参考にしながら組んでみたのですが、「○」がない(シートの)行も転記されてしまい困っています。 (○があるシートは複数シートの内、1シートのみなのですが、○がないシートからも 「○があるシートの○がある行」と同じ行番号の行がが転記されているようです) 組んでみたマクロは以下のとおりです。 ------------------------------------------------ Sub 楕円1_Click() ActiveSheet.Range("A2:H30").ClearContents Dim ans, fn, wb, x, i, n, sh, myPath ans = "○" '条件 myPath = ThisWorkbook.Path & "\" fn = Dir(myPath & "*.xls") '選択したフォルダ内のExcelファイル Do Until fn = "" If fn <> ThisWorkbook.Name Then 'ファイルが当ファイル以外なら Set wb = Workbooks.Open(myPath & fn) '選択したファイルを開きます For Each sh In wb.Worksheets '各シートごとに x = sh.Cells(Rows.Count, 1).End(xlUp).Row '最終行取得 For i = 1 To x '1行目から最終行まで以下を実行します If Cells(i, 1) = ans Then '条件に合致するか検索 n = n + 1 With ThisWorkbook.Sheets("Sheet1") '転記 .Cells(n + 1, 1) = sh.Cells(i, "B") .Cells(n + 1, 2) = sh.Cells(i, "C") .Cells(n + 1, 3) = sh.Cells(i, "D") .Cells(n + 1, 4) = sh.Cells(i, "E") .Cells(n + 1, 5) = sh.Cells(i, "F") End With End If Next i Next sh wb.Close (False) '選択したファイルを閉じる End If fn = Dir() '次のファイルを検索 Set wb = Nothing Loop '繰り返し --------------------------------------------------------- このマクロでは各ファイルの全てのシートを検索していると思うのですが、 全シートを検索していることが問題でしょうか? 検索したいデータは特定のシートにのみ存在するので(全ファイル同じ名前のシートです) 特定のシートのみ検索してくれればそれで良いのですがどう変更すればよいかわかりません。 「For Each sh In wb.Worksheets '各シートごとに」 色々と調べてここを変更してみたのですが 何れもエラーとなり上手くいきませんでした。 どなたか上手く直す方法を教えて下さい。 宜しくお願いします。

  • エクセルVBAで3つ以上のセルをCellsで選択

    エクセル2003のVBAについてお尋ねします。 行番号についてDim X As Integer の構文を使っている関係で Cells(X, 1) Cells(X, 3) Cells(X, 5)などのようにセルの選択をCellsで行う必要があります。 Cellsで離れ離れの3つ以上のセルを同時に選択するには、どのようにしたらよいのでしょうか? Range(Cells(X, 1), Cells(X, 3)).Select では2つしか選択できず困っています。 よろしくお願いいたします。

  • VBAでファイルOPEN ダイアログを使用したいです

    現在、指定したファイルを開くVBAを書いているのですが、 ↓こんなの ----------------------------------------------------------- Dim vntFileName As Variant 'ファイルを開くダイアログを開きます vntFileName = _ Application.GetOpenFilename( _ FileFilter:="エクセルファイル(*.xls),*.xls" & _ ",CSVファイル(*.csv),*.csv" _ , FilterIndex:=1 _ , Title:="開けゴマ" _ , MultiSelect:=False _ ) 'ファイルが選択されているときは '選択したファイルをWorkbooks.Openメソッドで開きます If vntFileName <> False Then Workbooks.Open Filename:=vntFileName End If ---------------------------------------------------------------- あらかじめ開くディレクトリを、ネットワーク上のフォルダに指定したいのですが、どこにパスを書いたらいいのか、わかりません。 教えていただけますでしょうか。

  • excel vbaで複数のcsvファイルの読み込み

    100シート分のcsvファイルのデーターを一つずつ読み込んでexcelにコピーして使用してますが莫大な時間がかかって困ってます。 vbaを使用して作業を簡素化出来る事は出来ないでしょうか? ------------------------------------------ ※ csvの概要 excelで1枚のcsvファイルを開くとA列の11行目から65536行まで数値データがあります。 ※ vbaできたらよいなと思う仕様 そこで、複数のcsvファイルを選択して読み込むとCSV_データと言うSeetのA列の10行目から1枚目のcsvファイル、B列の10行目から2枚目のcsvファイルと言う風に選択した分のcsvを列に続けて数値データを貼り付けしてくれるvbaをご教授していただけると大変助かります。 不躾で申し訳ございませんが宜しくお願い致します。 excel2003 ------------------------------------------

  • エクセルやワードファイルの内容とファイル名をひとつのCSVファイルにする方法を教えてください。

    ワードやエクセルの内容をWEB上のASPにアップロードする必要があるため、ひとつのCSVファイルに結合する方法を探しています。 例えば、  ・ワードで作成したファイルのファイル名 「ID192山田商会.doc」で、ファイルの内容がA4換算で2枚程度のボリュームがある場合  ・加えて、エクセルで作成したファイルのファイル名 「ID200田中貿易.xls」でシートが2枚ある場合、 これらのファイル内容をひとつのCSVファイルにしたいのです。 CSVファイルの形式としては以下のようにしたいと思ってます。 "ID192山田商会.doc","同社は昭和○年創業の老舗メーカーで・・・" "ID200田中貿易.xls","同社は○○氏との取引関係より・・・" のような記入をさせたいです。 よろしくお願いします。

  • エクセルVBAについて

    エクセルVBAの名前を付けて保存について質問です。 名前を付けて保存するとき、保存先に同じ名前のファイルがあると 「この場所に○○というファイルがありますが置き換えますか?」 と表示され「いいえ」もしくは「キャンセル」を選択すると実行時 エラーが表示されます。 キャンセルしてもエラーが出ないような構文を書きたいのですが わかりません。 もし知っている方がいるようでしたら教えてください。 Dim MySavePath As String MySavePath = Application.GetSaveAsFilename(Date, "Excel ファイル (*.xls), *.xls") If MySavePath <> "False" Then ThisWorkbook.SaveAs MySavePath & ".xls" End If

  • EXCEL VBAでのWord操作

    ExcelのVBAにて、Wordファイルに挿入されているExcel表を更新したいのですが、 どのように記述すればよりかわかりません。 具体的には以下のとおりとなります。 「在庫.xls」 のセル A1 「照合表.doc」に挿入されているExcel表には「在庫.xls」のセルA1を参照するように記述が 入っています。 「在庫.xls」にコマンドボタン「更新」を作成し、実行すると「照合表.doc」の値が更新されるように マクロを組みたいのですが、どなたか知恵を貸してください。

専門家に質問してみよう