EVAでマクロ有無チェックについて

このQ&Aのポイント
  • Excel VBAで指定したフォルダ配下のExcelファイルのマクロ有無チェックをしたいと思っています。
  • マクロ有無チェックまではできたのですが、パスワードを設定しているExcelファイルがあると、そこでエラーとなってしまいます。
  • パスワードが設定されているExcelファイル(パスワード不明)は、フォルダパスとファイル名をSheet2に書き出し、次のファイルチェックに行くようにしたいのですが、よくわかりません。
回答を見る
  • ベストアンサー

EVAでマクロ有無チェックについて

Excel VBAで指定したフォルダ配下のExcelファイルのマクロ有無チェックをしたいと思っています。 マクロ有無チェックまではできたのですが、パスワードを設定しているExcelファイルがあると、 そこでエラーとなってしまいます。 パスワードが設定されているExcelファイル(パスワード不明)は、フォルダパスとファイル名をSheet2に書き出し、次のファイルチェックに行くようにしたいのですが、よくわかりません。 どなたかご教授下さい。 Excel2003です。 以下まではできています。 filelist = Dir(FoldPath & "\" & "*.xls") Do While filelist <> "" Application.EnableEvents = False Set Target = Workbooks.Open(FoldPath & "\" & filelist) マクロ有無チェック    Sheet1にフォルダパス、ファイル名、マクロ有無を書き出す    Target.Close Application.EnableEvents = True filelist = Dir() Loop

  • gazo
  • お礼率30% (74/241)

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

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

姑息な手段ですが Sub pwdTrap() On Error GoTo errH Workbooks.Open ("d:\123\pwd.xls"), Password:="" Exit Sub errH: If Err.Number = 1004 Then ここでファイル転記処理 Resume Next End If End Sub なら、パスワード設定していないファイルはそのまま開けますし 設定してあるものはTrap出来るのでは?当方2010

その他の回答 (1)

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

一例です。 エラーEXITで対応しては如何でしょうか。 詳細はweb検索してみて下さい。 On Error GoTo エラー処理 'エラーExit宣言 filelist = Dir(FoldPath & "\" & "*.xls")  ~ エラー戻り:         Target.Close ~ 以下コードをEnd Sub文直前に追加 Exit Sub エラー処理:  ~Sheet2にフォルダパス、ファイル名を書き出し~  Resume エラー戻り End Sub

関連するQ&A

  • エクセルのマクロについて

    以前、こちらのマクロで Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("a1")) Is Nothing Then Exit Sub Application.EnableEvents = False Range("a3:ba28").Replace What:="=*!", Replacement:=Target.Value, LookAt:=xlPart Application.EnableEvents = True End Sub 指定した範囲を(A1)セルに入力した値に置換するマクロを教えていただいたんですが、現在,、これを使ってsheet1の指定範囲内にある(=あ!$AR$75)などが入力してある部分のシート名を置換してデータ内容の変更を行っています。 しかし、この方法だと、シート名の文字数を指定しなくてはならなくて、自分以外の人が操作すると、エラーを出してしまうことがあり困っています。そこでchangeイベントをやめて、シート名の確認をしてからマクロの実行を行うには、どういったマクロにすればいいですか?? 説明が分かりづらくすみません・・・・・・。 もし他にシートの文字数などにこだわらなくてもよい方法があれば教えてください。 よろしくお願いします。

  • エクセル マクロ 初心者です

    エクセルマクロ初心者です。 以下の2つの Private Sub Worksheet_Change(ByVal Target As Range)を1つのシートで実行させたいのですが、 当方、初心者なので組み合わせ方が分かりません。 よろしくお願いします。 ===No1=== Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Target = StrConv(Target, vbUpperCase) Application.EnableEvents = True End Sub ===No2=== Private Sub Worksheet_Change(ByVal Target As Range) Dim Ans As Integer If Target.Count = 1 Then Ans = MsgBox("コピーは禁止!!", vbCritical) MsgBox "データを消去します。" With Application .EnableEvents = False .Undo .EnableEvents = True End With End If If Target.Count = 1 Then Exit Sub Else MsgBox “複数セルのコピー禁止!" With Application .EnableEvents = False .Undo .EnableEvents = True End With End If End Sub ------------ 上記の2つを1つのシートで動作させたいのですが、うまくいきません。 単体では、動作します。

  • エクセルのリンクやマクロの有無をチェックしたい

    OS:Windows7 Office:2010 ハイパーリンクやマクロが埋め込まれたエクセルが多数あるとして、 そのハイパーリンクやマクロ内のパス情報を取得できるような ツールはあるのでしょうか? なぜ必要かといいますと、 先日、管理部署から、フォルダ構成を変更するとの通知を受けました。 私が部の担当に任命されたのですが、 同僚から、フォルダパスが変更されると動かなくなることがあるので、 調査が必要とのアドバイスをもらいました。 先輩方に聞いてみたのですが、前任や退職した方が作成したものを 使い続けているので、仕組みは分からないとの回答でした。 フォルダの階層が深く、ファイル量も大量(数千ファイルです)ですので、 一度、どのファイルにハイパーリンクやマクロが埋め込まれているのか、 知りたいと考えています。 ※ここで知りたいのは、ファイルパスが埋め込まれているかになります。  シート内や相対パスでのリンクであれば、フォルダ構成が変わっても  大丈夫だと考えておりますが、フルパスで記述されていた場合、  フォルダ構成を変更すると、動かなくなるので該当のファイルがどれだけあるのかを  調べたいと考えてます。

  • Excel で日付入力したらマクロが動く方法

    Excel 2003 です。(OSはXP) データ用のエクセルファイルからマクロでコピー貼り付けをする日報ファイルを作っています。構成シートが7枚、マクロは12モジュール、ファイルサイズが140MBという巨大なものです。 セルB2に日付を入力したとき、Macro1が動くようにしたいのですが、 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$B$2" Then Exit Sub Else... 以外に何かうまい方法はないでしょうか? セルに値を入力、じゃなくて、何かのコントロールでもかまいません。 マクロで日付を読み込めることが必須条件です。 上述のマクロの活用方法はいろいろ読みましたが、処理に時間がかかって困っております。「全てのセルに変更が加えられたのを検知」するしか方法はありませんか? 一応、この Macro1 を呼び出す部分以外には Application.EnableEvents = False を入れて、Worksheet_Changeが反応しないように止めていますが、遅いような気がします。(計ったわけではないのですが。) この日報ファイル自体が、計算の塊で、1つのセルに数値を入力しただけで、再計算に1秒前後かかることがあります。 そこで、貼り付けのマクロ(Macro2)を動かすときには Application.Calculation = xlManual を入れたりもしているのですが(それでも貼り付けに1分30秒)、常に再計算をOFFにするわけにもいかず・・・。 だから「全てのセルに変更が加えられたのを検知」という命令は、時間短縮のため避けたいのです。 また、マクロの全てにEnableEventsを入れておくのも、見苦しくて。(新たにマクロを追加したらまた忘れずにEnableEventsを書かないといけない構造にしたくありません。) 「全てのセルに変更が加えられたのを検知」ではなく、特定のオブジェクトに日付が入力された・選択されたのをマクロの開始合図とすることはできませんでしょうか? 質問がわかりにくかったらすみません。よろしくお願いします。

  • アクセス2000のマクロの設定について

    アクセスのマクロで、アクセスのデータベースを、指定したエクセルファイル内の、指定したシートにエクスポートするマクロ設定をしたいのですが、よく判りません。 マクロ設定で、アクションのワークシート設定を選ぶまでは判ったのですが、テーブル名、ファイル名、フィールド名の設定、範囲の設定の意味が判りません(ヘルプを見たのですが、理解出来ません)。どなたか設定方法を教えて下さい。

  • イベントマクロで「コンパイルエラー 因数は省略できません」

    マクロ初心者です イベントマクロを作りました Sheet2の結合されたB44:E44のセルに入力すると自動的にマクロが働いて Sheet1のW1の値のみがSheet2の結合されたB44:E44のセルに貼り付けられるマクロなのですが 実行すると「コンパイルエラー 因数は省略できません」と表示されます マクロ自体は正しく動いているのですがどういうことなんでしょう Sheet2 Worksheet Change Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target.Range("B44:E44")) Is Nothing Then Exit Sub Application.EnableEvents = False Sheets(1).Select Range("W1").Copy Sheets(2).Select Range("B44:E44").Select ActiveSheet.Paste Application.CutCopyMode = False Application.EnableEvents = True End Sub Private Sub Worksheet_Change(ByVal Target As Range)…この行が黄色になります If Intersect(Target.Range("B44:E44")) Is Nothing Then Exit Sub…intersectのところが青くなります こんな説明でわかってもらえるでしょうか?

  • チェックボックスにマクロを入れて印刷する

    チェックボックスにマクロを入れて印刷するやり方について ご教授いただきたく、質問させていただきます。 シート1   A   B   C    D 1  あ  ●  TRUE  レ 2  い  ×  FALSE 3  う  ▲  TRUE  レ エクセルで上記のシートA1,B1にデータを入力し、 Dにあるチェックボックスにチェックを入れると A1の「あ」をコピーし、シート2のX1にペーストして VLOOKUPを使ってシート1のB1をA1に表示させ、 印刷したいと思っています。 (もちろん、「あ」と「●」の2項目しかないわけではなく、 1行に8項目あり、シート1では横一列に並んでいるものを、 シート2の見栄えのいいフォーマットで、印刷します。 行数は100行くらいあります。) シート2     A      X  1  ●         あ マクロの記録で、「チェックを入れる→コピー→ペースト→印刷→シート1に戻る」とし、   Application.Run "Book1.xls!印刷" Range("A1").Select Selection.Copy Sheets("Sheet2").Select Range("X1").Select ActiveSheet.Paste Application.CutCopyMode = False ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("元").Select となりましたが、チェックを入れても動作しなかったため、 「Application.Run "Book1.xls!印刷"」を削除したところ、 正常に動きました。 問題は・・・・    チェックを入れると動作する(^_^)    チェックを外す時も動作する(T_T)    1個のチェックボックスにマクロは設定できたけれど、    100行あったとしたら、100個のチェックボックスを作成し    1個1個マクロを記録させる?まとめてはできない?    チェックボックスをコピー&ペーストしたところ、    うまくいきませんでした。    (チェックを入れると印刷という動作でOKで、     チェックをあらかじめ入れておき、最後に印刷ボタンで     印刷するというやり方ではありません。     VLOOKUPを使っているので、無理ですよね(・_・;)) 初めてのチェックボックスですが、途中まで簡単にできた!と思ったけど、つまづいてしまいました。 色々調べたのですが、素人同然の私には難しくご質問させていただきました。 皆様お忙しいと思いますが、宜しくお願いいたします。                

  • マクロ:読みとり専用の場合、一部シートを隠す

    エクセルを開くと、パスワードを入力OR読み取り専用の小窓を出します。 パスワードを入力すると、エクセルを操作でき、 読み取り専用の場合は一部シート、たとえば2シート目以降は隠す、というふうにマクロでできないでしょうか。 読み取り専用等の設定はできるのですが、 特定のシートを隠す設定が、毎回手間がかかるため、マクロにしようと思った次第です。 IFを使ってマクロを組もうとしたのですが、 つなげ方がよくわからず、ご教示頂きたいです。 よろしくお願いします。 ファイル名:#### Sub OpenWorkbook(エクセル1)  WorlBooks.Opne FikeName:="####",PassWord:="ABCDE"  WorkBooks.Open FileName:="#####",ReadOnly:=True Worksheets("Sheet2").Visible = False End Sub

  • ファイルの保存場所を設定してしまう方法

    ファイルを保存する時に、保存先を指定できるマクロ(下記参照)があります。 保存場所あらかじめ設定するには、何を足せばいいのでしょうか? Sub NameSave() Application.EnableEvents = False Application.Dialogs(xlDialogSaveAs).Show arg1:=ファイル名 Application.EnableEvents = True End Sub vbaは初心者です。 エクセル2003を使っています。 ご存知の方、どうぞ教えてください。 よろしくお願いいたします。

  • マクロ 複数のシートに適用する記述がわかりません

    いつも皆様方にはたいへんお世話になっております。 下記のマクロをシート3~33(同じ構造です)まで、適用したいのですが、一つ一つのシートに貼り付けていけばよいのですが、なんとか一つの記述で出来ないかと、以前この質問コーナーでの回答を寄せ集めて、記述したのですが、コンパイルエラーばかりで、どうにもなりません。 こんな初歩的なことは、最小限の勉強で解決出来るのかも知れませんが、どうにもなりません。 誠に恐縮ですが、下記の記述の「どこを」「どの様に」修正したらよいか、どなたか解る方、教えて頂けないでしょうか。 どうぞ、よろしくお願いいたします。 Private Sub worksheet_change(ByVal Target As Excel.Range) Dim sheetno As Integer          ←この3行を当てずっぽうで挿入してみました><; For sheetno = 3 To 33 Worksheets(sheetno).Select h As Range Set Target = Application.Intersect(Target, Range("E5:N12, E14:N22, E24:N28, E30:N34")) On Error Resume Next For Each h In Target If h <> "" Then Application.EnableEvents = False h = Application.VLookup(h.Value, Worksheets("マクロリスト表").Range("A:B"), 2, False) Application.EnableEvents = True End If Next End Sub

専門家に質問してみよう