EXCELマクロを無効にして開く方法

このQ&Aのポイント
  • EXCEL2007で作成されたマクロ有効ファイル(XLSM形式)をマクロ無効の状態で開く方法が分からず困っています。
  • マクロの内容は Workbook_Open 処理で、特定セルに入力されているEXCELファイルを開き、自身は閉じるというものです。
  • マクロを無効にして開くためには、マクロのセキュリティ設定を変更し、該当のファイルを開くことが必要です。他に分かりやすい方法があれば教えてください。
回答を見る
  • ベストアンサー

EXCELマクロを無効にして開く方法

掲題の通りなのですが、EXCEL2007で作成されたマクロ有効ファイル(XLSM形式)を マクロ無効の状態で開く方法が分からず困っております。 マクロの内容は Workbook_Open 処理で、特定セルに入力されている EXCELファイルを開き、自身は閉じるというものです。 Private Sub Workbook_Open() Dim FileName As String '1ファイル目 Range("A2").Select FileName = ActiveCell.FormulaR1C1 Workbooks.Open FileName:=FileName ThisWorkbook.Activate '2ファイル目 Range("A3").Select FileName = ActiveCell.FormulaR1C1 Workbooks.Open FileName:=FileName ThisWorkbook.Activate ・・・・・・繰り返し DoEvents ThisWorkbook.Close End Sub 上記の特定セルに設定してあるファイルパスを変更するためには マクロを無効にして開かなければなりません。 マクロのセキュリティを変更して、「すべてのマクロを無効にする」を設定して 該当のファイルを開けば良い事は分かっているのですが、他に分かりやすい方法で マクロ無効状態で開く方法があれば、ご教授頂ければと思います。

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

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.2

Win7、Excel2010、ダブルクリックでファイルを開く設定、の場合ですが、 Excelが開いていない状態で、 一旦、ファイル(またはショートカット)をクリックしてから、 Shiftキーを押し、そのまま、ダブルクリック、 以上の手順で、セーフモードでExcelとブックが開きます。 つまり、Private Sub Workbook_Open()は実行されません。 環境によって手順は異なると思いますけれども。

Kohki_t
質問者

お礼

ご回答ありがとうございます。 当方の環境は、WindowsXP+EXCEL2010環境になります。 Shift キーを押しながらダブルクリックや 右クリックメニューの開く・編集・読み取り専用で開くを 試してみましたが、マクロ無効状態になりませんでした。 色々と試していた所、別途EXCELを起動しておいて メニューよりファイルを開く際に、Shift+開く では マクロが実行されずに開く事が出来ました。 直接、該当のファイルを開く場合は、Shift+ダブルクリック(開く)等では Workbook_Open が実行されてしまいます。 EXCELの設定の問題でしょうか? なお、マクロセキュリティは「すべてのマクロを有効」の設定環境となります。

Kohki_t
質問者

補足

昨日から他のOS・EXCEL環境にて同様の確認を 行ってみた所、Shift+ダブルクリックでマクロ無効と出来る端末もあれば 出来ない端末もあり、環境的な要因やEXCELの設定等も関係して くるのでは無いかとの想定に至りました。 本来の用途目的は、サーバーのタスクマネージャーにマクロファイルを 設定して自動起動し、質問のマクロとは少々異なる幾つかの処理を 行っているのですが、今後他の者に該当ファイルの管理を引き継がなければならない為 自動起動せずに開く方法に、3重位の手順を作っておきたかったのですが こちらの方法は環境に依存する可能性がありますので、手順に含める事を断念致しました。 ただ質問させて頂いた目的に対し、手法として出来る操作である事は間違いありませんので 度々の分かりやすい説明を踏まえた回答を頂いた点より、ベストアンサーとさせて頂きます。 また、他の方々におかれましても、ご回答・アドバイス本当にありがとうございました。

その他の回答 (5)

回答No.6

確認しました。 エクスプローラからでは、Shift + も、Ctrl+ も、どの方法も出来ませんでした。特に、エクスプローラ上からでは、Shift + は、多くのファイルが選択されてしまうので、ヒヤッとしました。 メニューから、Ctrl + で、Excelを選択する方法は、セーフモードで立ち上がるから、それは、それでもよいと思うのですが、それは目的とは違うようです。 今のところ、Excel 2010はないのですが、 私が行う場合(Auto_Openの自動実行をさせないために)は、  最初に、Excelで、新規ワークブックが立ち上げます。  次に、Excelのメニューから、ファイル名を選び、  Shiftキーを押しながら、ファイル名を選び、クリックします。  そうすれば、Auto_Openは実行されません。 ところで、話は別ですが、質問のマクロは、少し危ういような気がしますが。 今回のことで、ファイル名を別のブックにしたり、テキストにしたり、iniファイルにしたりする方法もあるのではないかと思います。 サンプルを作ってみました。 以下は、ブックと同じフォルダに、"FileNames.txt"を置いて使うものです。 FileNames.txt の中身は、 ------------- f120929.xls f121002.xls f121005.xls f121008.xls ------------- のようになっています。もし、自動実行を止めたい場合は、テキストファイルの先頭に、ありえないファイル名を書けば、エラーが出て止まります。fAr(10)は、現在9個ですが、この数を増やせば、もっとブックが開けます。常識的な範囲で入れれば良いです。 '// Private Sub Workbook_Open()  Dim Fno As Integer  Dim f As String  Dim mPath As String  Dim fAr(10) As Variant 'ファイルリストは9個まで、最後は空ける  Dim i As Long  Dim j As Long  'ファイルリストは、このブックと同じフォルダに置かなくてはなりません。"  Const FILE_LIST As String = "FileNames.txt"  On Error GoTo ErrHandler  mPath = ThisWorkbook.Path & "\"  Fno = FreeFile()  If Dir(mPath & FILE_LIST) = "" Then   MsgBox "file list が見つかりません。", 48   Exit Sub  End If  Open mPath & FILE_LIST For Input As #Fno  Do While Not EOF(Fno)   Line Input #Fno, f   fAr(i) = f   i = i + 1  Loop  For j = 0 To UBound(fAr) - 1 '最後のIndex は、必ず開けます。   Workbooks.Open fAr(j)   If fAr(j + 1) = "" Then Exit For  Next j  ThisWorkbook.Close False ErrHandler:   MsgBox Err & Err.Description End Sub

Kohki_t
質問者

お礼

ご回答、アドバイスありがとうございます。 実際のマクロの内容は INIファイルの参照も含めて 様々な事をしており、普段はサーバーのタスクスケジュールで 設定して幾つかの処理を自動で行わせているのですが 質問として上げるのに辺り、短絡的に作った内容なのです。 他の者が今後管理する事になり、これまではINIファイルにマクロ自動起動の フラグを持たせて管理をしていたのですが、それ以外にも2重3重の防衛手段 (フラグの書換を忘れていてもリカバー出来る様に)手順を考えていたので そのうちの1つとして、質問させて頂きました。 あと、提示頂いたサンプルですがINIファイル内容より、ファイル名を取得してきたら Dir関数等でファイルの存在チェックを掛けると、更に良いと思います。

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.5

#2、3、cjです。 すみません。訂正だけ。 #2 (誤) > 以上の手順で、セーフモードでExcelとブックが開きます。 (正) 以上の手順で、デザインモードでExcelとブックが開きます。 セーフモードはCtrl+でアプリケーション開くやつでしたね。 失礼しました。

Kohki_t
質問者

お礼

度々ありがとうございます。 セーフモード、デザインモードの認識が これまで無かったので勉強になります。 わざわざ、ありがとうございます。

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.4

落ち着いてゆっくりいきましょう。 エクスプローラーなどで、シングルクリックでファイルを選択。 その後、Shift+Enterキーで開く動作、ファイルが開ききるまでShiftは押しっぱなし。 言ってみれば、ダブルクリックと同じ動作なんですけどね。 選択して、一呼吸おいて、開いてみませんか。

Kohki_t
質問者

お礼

ご回答ありがとうございます。 記載頂いた内容は、先の回答や私なりに調べた内容から 認識しておりますので、問題ございません。 ダブルクリック以外にも、該当ファイル選択してから (1度クリックして選択されている状態) 右クリックメニューを開き、Shiftキーを押下しつつ「開く」や Shiftキーを押下しつつ、右クリックメニューを開き 「編集」・「読み取り専用で開く」等 ※Shift+右クリック専用メニュー Shiftキーを押下するタイミングや、押し続けているタイミング等も 色々と試してみても、マクロ無効状態で開けないので 環境的な問題なのかもと思ってきております。 該当ファイル以外にも、類似の WorkBook_Open で処理を行う マクロを組んだXLSMファイルを作成して試してみておりますが 同じ状態であるため、ファイルの問題では無さそうなのです。 ・・・あと自分の掲載した質問への追記的なものってどうやるんだろう・・・;

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.3

こんにちは。#2、cjです。 解決策は見つけたということのようですので、よかったです。 でもまぁ、できれば簡単な方が良いかな?色々方法があった方がよいかな? ということもあって、一応、もう一度レスしてみます。 私の#2、 > 一旦、ファイル(またはショートカット)をクリックしてから、 これ↑伝わっていますでしょうか? 対象ファイルのアイコンがアクティブな状態にしてから Shift + ダブルクリック、という意味ですので、 いきなり、Shift + ダブルクリック、ではうまくいかないです。 もっとも、Vista環境は私の方、確認しようがないので、OSの問題で違っていたとしても 不思議ではありませんが。

Kohki_t
質問者

お礼

度々のご回答ありがとうございます。 > 一旦、ファイル(またはショートカット)をクリックしてから、 こちらの意味は重々理解しております。 ダブルクリック以外にも、該当ファイル選択してから (1度クリックして選択されている状態) 右クリックメニューを開き、Shiftキーを押下しつつ「開く」や Shiftキーを押下しつつ、右クリックメニューを開き 「編集」・「読み取り専用で開く」等 ※Shift+右クリック専用メニュー Shiftキーを押下するタイミングや、押し続けているタイミング等も 色々と試してみても、マクロ無効状態で開けないので 環境的な問題なのかもと思ってきております。 該当ファイル以外にも、類似の WorkBook_Open で処理を行う マクロを組んだXLSMファイルを作成して試してみておりますが 同じ状態であるため、ファイルの問題では無さそうなのです。

  • FEX2053
  • ベストアンサー率37% (7987/21354)
回答No.1

Shiftキーを押しながらダブルクリックで開く・・・で行けたんじゃないかと。

Kohki_t
質問者

お礼

早速のご回答ありがとうございます。 当方の環境は、EXCEL2010環境になりますが Shift キーを押しながらダブルクリックや 右クリックメニューの開く・編集・読み取り専用で開くを 試してみましたが、マクロ無効状態になりませんでした。 なお、Shiftキーはファイルが開かれるまで ずっと押しっぱなしにしました。 EXCELの設定の問題でしょうか?

関連するQ&A

  • エクセルのマクロ

    お世話になります。 Book1.xlsというファイルから、不特定のファイルを開き、一定の作業の後、閉じる場合のマクロについて伺います。 name1、name2のファイルを開き、vlookup関数を入力する場合のマクロの記載は、サイトを検索し、下記のようにすればできました。 Dim name1 As String Dim name2 As String sub macro1() 省略 Workbooks.Open Filename:=name1 Workbooks.Open Filename:=name2 Windows("Book1.xls").Activate Range("C6").Select ActiveCell.FormulaR1C1 = _ "=VLOOKUP(RC1,'[" & name1 & "]sheei1'!C1:C155,R1C,FALSE)" Range("C7").Select ActiveCell.FormulaR1C1 = _ "=VLOOKUP(RC1,'[" & name2 & "]sheei1'!C1:C155,R1C,FALSE)" (省略) ***************************** Windows("name1").Activate ActiveWindow.Close  Windows("name2").Activate ActiveWindow.Close ***************************** として、呼び出したファイルを(保存せず)閉じたいのですが、("name1")("name2")の部分の記載方法を教えてください。よろしくお願いします。

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

    Book1で入力データ作成し、保存次第、添付画像の黄色部分に、自動転記する様マクロを組みたいと考えています。 現在、勉強中で、簡単な下記の様なマクロはできました。 これを応用して実践してみたいのですが、何を加えればよいのか、アドバイス頂けたら幸いです。 --------- Sub Macro1() ' ' Macro1 Macro ' ' a = ActiveCell.Value Range("A2").Select ChDir "C:\Users\takana\Desktop" Workbooks.Open Filename:="C:\Users\takana\Desktop\転記.xlsx" Sheets("Sheet2").Select ActiveCell.FormulaR1C1 = "" Range("B2").Select ActiveCell.FormulaR1C1 = a Range("B3").Select End Sub -----------

  • ■ エクセルマクロについてです。初級?

    エクセルのマクロでデスクトップにあるエクセルファイルを開くにはどうしたらいいのでしょうか? 現在は、エクセルファイルA.xls B.xlsという2つを開いていて、マクロを実行することができるのですが、これをA.xlsだけ開いている上体で、実行したいのです。 なので、デスクトップに置いてあるB.xlsファイルを開くコマンド?というか、関数が知りたいのですが、どうしたらいいのでしょうか? 現在はこのような感じになっております。 Sub Macro2() ' ' Macro2 Macro ' マクロ記録日 : 2008/9/10 ユーザー名 : ' ' ActiveCell.FormulaR1C1 = "12345" Range("G17").Select ActiveCell.FormulaR1C1 = "129876" Range("G18").Select Windows("B.xls").Activate Range("N16").Select ActiveCell.FormulaR1C1 = "8/4/2008" Range("N17").Select ActiveWorkbook.Save Range("O16").Select ActiveWorkbook.Save ActiveWindow.Close End Sub

  • 【マクロ】指定したファイルを開いてマクロを実行

    マクロ初心者です。よろしくお願いします。 <質問> コマンドボタンをクリックしたら、任意のエクセルファイルを指定して開き、その開いたファイル(白紙状態のファイル)にマクロを実行させる方法を探してます。 <作成マクロ> Private Sub CommandButton1_Click() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If Workbooks(Dir(OpenFileName)).Activate ActiveCell.FormulaR1C1 = "テスト" Range("A1").Select Selection.Copy Range("B1").Select ActiveSheet.Paste End Sub <マクロ説明> --コマンドボタンをクリックして指定したエクセルファイルを開く-- Private Sub CommandButton1_Click() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If Workbooks(Dir(OpenFileName)).Activate --開いたエクセルファイル(白紙状態)のセルA1に「テスト」を入力した後、コピーしセルB2に貼り付ける--   ActiveCell.FormulaR1C1 = "テスト" Range("A1").Select Selection.Copy Range("B1").Select ActiveSheet.Paste End Sub コマンドボタンをクリック ↓ 任意のエクセルファイルを指定して開く ↓ 開いたファイル(白紙状態のファイル)のセルA1に「テスト」と書き込み セルA1の「テスト」をコピーしセルB1に貼り付ける このマクロを実行させるにはどこを改善すれば良いでしょうか? ご助言いただけると助かります。 よろしくお願い致します。

  • 【マクロ】指定したファイルを開いてマクロを実行

    マクロ初心者です。よろしくお願いします。 <質問> コマンドボタンをクリックしたら、任意のエクセルファイルを指定して開き、その開いたファイル(白紙状態のファイル)にマクロを実行させる方法を探してます。 <作成マクロ> Private Sub CommandButton1_Click() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If Workbooks(Dir(OpenFileName)).Activate ActiveCell.FormulaR1C1 = "テスト" Range("A1").Select Selection.Copy Range("B1").Select ActiveSheet.Paste End Sub <マクロ説明> --コマンドボタンをクリックして指定したエクセルファイルを開く-- Private Sub CommandButton1_Click() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If Workbooks(Dir(OpenFileName)).Activate --開いたエクセルファイル(白紙状態)のセルA1に「テスト」を入力した後、コピーしセルB2に貼り付ける--   ActiveCell.FormulaR1C1 = "テスト" Range("A1").Select Selection.Copy Range("B1").Select ActiveSheet.Paste End Sub コマンドボタンをクリック ↓ 任意のエクセルファイルを指定して開く ↓ 開いたファイル(白紙状態のファイル)のセルA1に「テスト」と書き込み セルA1の「テスト」をコピーしセルB1に貼り付ける このマクロを実行させるにはどこを改善すれば良いでしょうか? ご助言いただけると助かります。 よろしくお願い致します。

  • エクセル マクロ ループ ファイル展開

    マクロ ループ処理について質問です。 test エクセルファイルのD1セルから下にファイル名を入れていき、その名前(フルパスで入れています)のファイルを開きつつ、シートを 26-4 に選択していくループ処理をしたいのですが、2週目から Sheets("26-4").Select  でエラーになります。 原因は、test ファイルがアクティブになっているからだと思うのですが、その対策の仕方が、検索してもうまく見つからなかったので、質問しました。 ご回答よろしくお願いします。 エクセル2010 使用しております。 Range("D1").Select i = 1 Do Until ActiveCell.Value = "" Workbooks.Open Filename:=Range("D" & i) '操作事項マクロ Sheets("26-4").Select Windows("test.xlsm").Activate ActiveCell.Offset(1, 0).Select '下にずれる i = i + 1 Loop End Sub

  • VLookupで参照する範囲を変数で渡したい

    マクロ内で開いた別ファイルにあるリストをVLookupで参照するマクロを作っています。 固定のファイルで行う場合には以下の内容で動いています。 ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-4],'070801.xls'!R1C1:R2430C6,6,FALSE)" このファイル名[070801.xls]とセル範囲(行数がファイルによって違う)のを変数で渡す必要があります。 #細かい部分は割愛しています。 Workbooks.Open Filename:=Fname, ReadOnly:=True 'ファイル読み込み Range("A1").CurrentRegion.Select 'データ全体選択 Selection.SpecialCells(xlCellTypeLastCell).Select '最終行検出 endRcell = ActiveCell.Row ********ここの間に入る処理 ********多分「Range(Cells(1, 1), Cells(endRcell, 6))」など ThisWorkbook.Activate Range("H2").Select ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-4],?????,6,FALSE)"                              ↑ここに指定する変数 2カ所について、どのように指定すればよいのか分かりません。 色々試してみたのですが・・・・ よろしくお願いいたします。

  • EXCELでENTERキーでセルの移動マクロ

    こんにちは。 EXCELでENTERキーでセルの移動マクロを使いたいのですが、下記のマクロで改良を教えてもらいたいと思います。 まず、最初は必ず、セルB5にフォーカスしたいということ。そうして、できればOFFSETを使わないで、rangeかcellを使いたいのですが、お願いします。 Sub セル移動() Range("B5").Select Select Case ActiveCell.Column Case 1 ActiveCell.Offset(1, 1).Activate Case 2 ActiveCell.Offset(2, 2).Activate Case 3 ActiveCell.Offset(1, 1).Activate Case 4 ActiveCell.Offset(1, 1).Activate End Select End Sub

  • 指定したセルに番号をつけていくマクロ

    現在、画像をたくさん貼り付け、カタログを作っていて、番号を入れたらマクロで画像が配置されるというところまでできました。今度は、その、番号を指定したセルに書き込む作業をマクロでできないかと考えています。現在の私が作成したマクロが↓です。 Sub 画像1から60() Range("A4").Select ActiveCell.FormulaR1C1 = "1" Range("C4").Select ActiveCell.FormulaR1C1 = "2" Range("E4").Select ・・・   ActiveCell.FormulaR1C1 = "58" Range("q29").Select ActiveCell.FormulaR1C1 = "59" Range("s29").Select ActiveCell.FormulaR1C1 = "60" End Sub というふうにかなり長く、また、この番号が3000番くらいまであり、簡単にできないものかと試行錯誤しています。 初心者なりに、工夫したのは"600"と表記するのを"=60*10"とし、あとで*10を置換しています。それでも3000番はほど遠く何か方法がありましたら教えてください。

  • エクセルVBAで、複数のブックからデータベースを作りたい

    こんにちは。VBAをはじめたばかりの者です。 変数の使い方で教えていただきたいことがあります。 Dim myFLName As String myFLName = ThisWorkbook.Path & "\001.xls" Workbooks.Open Filename:=myFLName, ReadOnly:=True Workbooks("dbase.xls").Activate Range("A2").Select ActiveCell.Value = 1 ActiveCell.Offset(, 1).Select ActiveCell.Value = Workbooks("001.xls").Worksheets(1).Range("R3") ActiveCell.Offset(, 1).Select ActiveCell.Value = Workbooks("001.xls").Worksheets(1).Range("C2") ActiveCell.Offset(, 1).Select ActiveCell.Value = Workbooks("001.xls").Worksheets(1).Range("R2") ActiveCell.Offset(1, -3).Select 001.xls~(連番でない)200.xlsくらいまでのファイルがあり、 同じフォルダにdbase.xlsを作って1ブックから1レコードになるようにしたいと 思います。 こんな感じで1行目はできたのですが、2行目の1列目に「2」を入れ、 2列目からは001.xlsの次のブックを開いてセルの中身をコピーしたいのです。 変数の使い方がよくわからないのですが、教えていただけますでしょうか。 よろしくお願いいたします。

専門家に質問してみよう