• 締切済み

マクロを含んでいないはずのエクセルファイルを開こうとすると、マクロを含

マクロを含んでいないはずのエクセルファイルを開こうとすると、マクロを含んでいる旨の警告が出る VBEでのモジュールの開放忘れでもないようで、 ネットで調べたところ、名前定義あたりが怪しいということで Sub test() Dim i As Long On Error Resume Next With ThisWorkbook For Each obj In ThisWorkbook.Names obj.Delete Next For Each obj In ThisWorkbook.Names obj.Visible = True Debug.Print obj.Name Debug.Print obj Debug.Print "------------------------" Next End With End Sub を実行してみると、添付画像のとおりでした。 名前定義は確実に存在しているようですが、 エクセルのメニュー>挿入>名前>定義 からも見えず、 obj.Visible = True の効果もなく。。 これらの名前定義をなんとか削除すれば問題は解決するのではないかと思いますが、 解決策はないものでしょうか。 エクセルのバージョンは2000及び2007です。 エクセル2007のファイル修復機能も試してみましたが効果はありませんでした。

みんなの回答

  • fujiponxx
  • ベストアンサー率32% (186/580)
回答No.1

いや、マクロがあるんじゃないですか? モジュールじゃなくて、シートに。 DSTD_Clearって明らかになにかをクリアするマクロにみえますけど。

g837465
質問者

お礼

シートの方も確認してみましたがマクロはないようです。

関連するQ&A

  • エクセル・マクロでIf Thenの使い方

    このような質問は、ルール(エチケット、マナー)違反になるでしょうか? もしそうならお許し下さい。 名前ボックスに表示される名前を、マクロで非表示にし、元に戻す、という操作を次の二つのボタンで実行するように作りました。エクセル2003です。 Private Sub CommandButton1_Click() Dim tname As Name For Each tname In ThisWorkbook.Names tname.Visible = False Next End Sub Private Sub CommandButton2_Click() Dim tname As Name For Each tname In ThisWorkbook.Names tname.Visible = True Next End Sub これを一つのボタンで、If Then Elseを使い実行できるようにしたいのですが If ・・・ Then の間の書き方が分からずうまくいきません。   If Names.Visible = False Then   If ThisWorkbook.Names.Visible = False Then If ThisWorkbook.tname.Visible = False Then Private Sub CommandButton3_Click() Dim tname As Name If Names.Visible = False Then 'これでは駄目 For Each tname In ThisWorkbook.Names tname.Visible = False Next Else For Each tname In ThisWorkbook.Names tname.Visible = True Next End If End Sub 苦し紛れにこんなことをやってごまかそうとしているのですがこれって邪道ですしかっこうわるいですよね。 Private Sub CommandButton3_Click() Dim tname As Name If Range("g1").Value = " " Then   For Each tname In ThisWorkbook.Names   tname.Visible = False   Next Range("g1").Value = "1" Else   For Each tname In ThisWorkbook.Names   tname.Visible = True   Next Range("g1").Value = " " End If End Sub ど素人ですがよろしくご教導ください。

  • 強制的にマクロを有効にするVBA

    エクセル2010を使っている者です。 マクロの入ったファイルを開くときに、強制的にマクロを有効にするようなVBAは どのように組めば良いか、ご教授願います。 ネットで調べてみると、以下のものが見つかりました。 http://www.saka-en.com/office/vba-open-the-macro-enabled-forcibly/ 1 Option Explicit 2 3'** 4 ' ワークブックオープン 5'** 6 Private Sub Workbook_Open() 7 ThisWorkbook.Unprotect Password:="password" 8 On Error Resume Next 9 If ThisWorkbook.Sheets("編集用").Visible <> True Then ThisWorkbook.Sheets("編集用").Visible = True 10 If ThisWorkbook.Sheets("ダミー").Visible <> False Then ThisWorkbook.Sheets("ダミー").Visible = False 11 ThisWorkbook.Protect Password:="password" 12 'ThisWorkbook.RunAutoMacros Which:=xlAutoOpen 13 On Error GoTo 0 14 Exit Sub 15 End Sub 16 17 '** 18' ワークブックを閉じる前 19 '** 20 Private Sub Workbook_BeforeClose(Cancel As Boolean) 21 Dim Answer As Long 22' 保存されているかチェック 23 If ThisWorkbook.Saved = False Then 24 Answer = MsgBox("Do you want to save the changes to the '" & ThisWorkbook.Name & "' ?", vbExclamation + vbOKCancel, "Microsoft Excel") 25 Select Case Answer 26 Case vbCancel 27 Cancel = True 28 Exit Sub 29 End Select 30 End If 31 ThisWorkbook.Unprotect Password:="password" 32 On Error Resume Next 33 If ThisWorkbook.Sheets("ダミー").Visible <> True Then ThisWorkbook.Sheets("ダミー").Visible = True 34 If ThisWorkbook.Sheets("編集用").Visible <> False Then ThisWorkbook.Sheets("編集用").Visible = False 35 ThisWorkbook.Protect Password:="password" 36 ThisWorkbook.Save 37 End Sub しかし、このコードだと、編集するシートが1枚であれば良いのですが、何枚もある場合や、随時、シートを追加していくようなファイルの場合は修正が必要だと思います。 どのように修正すれば良いのでしょうか。 もしくは、例えば、マクロが有効になっていない場合は、ファイルは開けるものの、注意喚起のメッセージボックスを有効にするまで表示させるような設定にすることは可能でしょうか。 ご教授いただけると幸いです。 よろしくお願いいたします。

  • エクセルVBA名前の定義特定のシートの名前のみ削除

    いつもお世話になってます。 Excel2013のVBAより、特定のシート、例えばデータというシートに付けられた名前の定義を消す事は出来るでしょうか?他のシートの名前の定義は残しておきたいです。 ActiveSheet.Namesで指定しても消去されませんでした。 Sub Sample1() Dim n As Name For Each n In ActiveSheet.Names n.Delete Next End Sub

  • エクセルで名前を削除するときに印刷範囲を削除しない方法について

    下記のマクロでエクセル内の名前を一括でいつも削除しています。印刷範囲を設定していると、「Print_Area」という名前が設定されており、これも削除されてしまうので、印刷範囲の設定がなくなってしまいます。 印刷範囲を消さないようにするにはどうしたらいいでしょうか? --- Sub NameDel() Dim nm As Name For Each nm In ActiveWorkbook.Names nm.Delete Next End Sub

  • エクセルVBA 「名前の定義」について

    いつもお世話様です。エクセル2000での名前定義に関するVBA操作で疑問がありますのでよろしくお願い申し上げます。 (o。_。)oペコッ 以下のマクロで、あるエクセルのBOOKの名前の定義をすべて書き出してみました。 Sub Names_Check() Dim nm As Object Set sh = ActiveWorkbook.Worksheets.Add For Each nm In ActiveWorkbook.Names i = i + 1 sh.Cells(i, 1) = nm.Name sh.Cells(i, 2) = "'" & nm.RefersTo Next End Sub すると、なかにはセル範囲を参照していない名前の定義がけっこう見つかりました。 それらはよく見ると =○○○.xls!△△マクロ のようなマクロの名前を参照していました。 そんな名前の定義はつけた覚えが無いのですが、これは何でしょうか? なぜそのような名前の定義が出来てしまうのでしょうか? 次にセル範囲を参照していないこれらの名前定義を削除するため下記のマクロを書いてみたところ、「実行時エラー1004 その名前は正しくありません」というエラーがでてしまいます。 どう書いたら削除できるのでしょうか?(もちろん手動では削除できます。) Sub Del_NameRefQuestion() '不明な参照の名前定義削除 Dim nm As Object Dim mystr As String, ans As Integer For Each nm In ActiveWorkbook.Names If InStr(nm.RefersTo, "$") = False Then ans = MsgBox(nm.Name & "/" & nm.RefersTo, vbYesNo + vbQuestion, "削除しますか?") If ans = vbYes Then nm.Delete ’ここでエラー End If Next MsgBox "不明参照の名前定義削除完了", , " ( ̄ー ̄)v" End Sub

  • エクセルのマクロを有効にしないと表示しないようにする方法

    エクセルでマクロを有効にしないと、シートが表示されないように設定したいのですが、下記の様に(ほかの方の投稿から)入力すると三行目がエラーになります。素人なので、よくわかりません。どのようにしたら、マクロを有効にしないと全てのシートを表示しないようにできるのでしょうか? ご教授いただけますでしょうか Private Sub Workbook_BeforeClose(Cancel As Boolean) Sheets(\"Sheet1\").Visible = False Sheets(\"Sheet2\").Visible = False ActiveWorkbook.Protect Password:=\"error123\" End Sub Private Sub Workbook_Open() ActiveWorkbook.Unprotect Password:=\"error123\" Sheets(\"Sheet1\").Visible = True Sheets(\"Sheet2\").Visible = True Sheets(\"Sheet1\").Select End Sub

  • 他ブックからのシートコピーのマクロ

    マクロ初心者です。 下記マクロを完成する事が出来たのですが、一部修正がうまくいかない為投稿させていただきました。 マクロ内容:エクセルファイルを指定し、選択したシートを現在のブックにコピーする その際、不要な名前管理を削除してからコピー 修正したい箇所:指定したブックからコピーした際、シート参照の数式が入っていると外部参照になってしまう。 やってみた事:(1)(i)の前にarrayを入れる→外部参照のまま (2)(i)を削除してみた→外部参照にならなくたったが際限なくシートをコピーし続けた Sub 名前管理削除() Dim myPath As String Dim wb_A As Workbook Dim i As Integer ' myPath = Application.GetOpenFilename(("Excelファイル,*.xls*,CSVファイル,*.csv"), , "ブックを選択して下さい。") If myPath = "False" Then Exit Sub Set wb_A = Workbooks.Open(myPath) Dim name As Object For Each name In Names If name.Visible = False Then name.Visible = True End If Next On Error Resume Next ' エラーを無視。(削除件数にカウントしてしまいます) For Each nm In ActiveWorkbook.Names If InStr(nm.Value, "#REF") > 0 Or _ InStr(nm.Value, "\") > 0 Then nm.Delete i = i + 1 Else End If Next nm ' 終了の表示 MsgBox "不要な名前定義を削除しました。" & vbCr & _ "削除定義件数=" & i & "件", vbInformation, cnsTitle For i = 1 To wb_A.Sheets.Count wb_A.Sheets(i).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) Next wb_A.Close False End Sub 不勉強で申し訳ございませんが、何卒よろしくお願いいたします。

  • 全てのサブフォーム名を取得したい

    オフィス2007です。 Sub test() Dim obj As AccessObject For Each obj In CurrentProject.AllForms Debug.Print obj.Name Next End Sub --------------------------------- 上記のコードでデータベースのすべてのフォーム名は取得できますが フォーム1に乗っかっている複数のサブフォームを取得するにはどうすればいいのでしょうか? サブフォームに独自の名前を付けて、IFステートメントを使うしかないですか?

  • 仕事で使用しています。教えてください。

    仕事で使用しています。教えてください。 エクセルの表でマクロを使用しているのですが、入力後保存して再度開くと入力できなくなってしまいました。 マクロ勉強中で、コピペしようしている為、どこがダメなのかがわかりません。 お分かりになる方、教えていただけますか? 現在使用しているマクロは Private Sub Workbook_Open() ActiveWorkbook.Unprotect Password:="8253" Sheets("日別管理").Visible = True Sheets("部門別").Visible = True Sheets("仕入原価").Visible = True Sheets("買掛").Visible = True Sheets("小口").Visible = True Sheets("一覧表").Visible = True Sheets("精算書").Visible = True Sheets("TOP").Visible = False Dim myWS As Worksheet For Each myWS In Worksheets With myWS .EnableSelection = xlUnlockedCells .Protect Password:="****", AllowFormattingColumns:=True, AllowFormattingRows:=True End With Next myWS End Sub Sub シートの保護() Dim myWS As Worksheet For Each myWS In Worksheets With myWS .EnableSelection = xlUnlockedCells .Protect Password:="****", AllowFormattingColumns:=True, AllowFormattingRows:=True End With Next myWS End Sub Sub シートの保護解除() Dim myWS As Worksheet Application.ScreenUpdating = False For Each myWS In Worksheets myWS.Unprotect Password:="****" Next myWS Application.ScreenUpdating = True MsgBox "シート保護解除しました。" End Sub 以上、3つです。 マクロを解除して使用してしまう方がいたので、マクロを使用してのみ使えるようにしたのですが…。 入力できなくなってしまいました

  • ■助けてください。■エクセルのマクロで困っています。

    エクセルで、シートを一つ削除するマクロを教えてください。 本当に困っています。 マクロをご存知の方、ずぶの素人の私にご教示何卒よろしくお願いします。 文末にマクロを記述いたしますが、そちらは、 指定した日付以降にエクセルのファイルを開くと シートがすべて削除されて、「有効期限切れ」という シートだけが出てくるというものです。 現在、これを応用して、すべてのシートを 削除するのではなく、ひとつのシートだけ削除したいのです。 例えば「SheetA」、「SheetB」、「SheetC」、「有効期限切れ」という 4つのシートがあったとして、 指定した期日が来たら、「SheetC」だけを削除したいのです。 なお、エクセルファイルを開く際に、マクロを無効にされてしまうと 期日が来てもSheetCが削除されずに 残ってしまっては困るのです。 そこで、マクロを有効にしないと SheetCが現れないようにしたいのです。 (以下のマクロではそのようになっています) 一つだけシートを削除するマクロをやり方をご存知の方、マクロのご教示のほど 何卒よろしくお願い致します。 なお、小生、マクロはずぶの素人でして、 マクロの文面を頂いてコピー貼り付けするぐらいしか 能がありません。 つきましては、以下の文面を モディファイしてご教示頂けませんでしょうか。 よろしくお願いいたします。 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) endsheetname = "有効期限切れ" If (Sheets.Count = 1) And (Sheets(1).Name = endsheetname) Then Exit Sub If Sheets("SheetA ").Visible Then Sheets("SheetC ").Visible = xlVeryHidden End Sub Private Sub Workbook_Open() endsheetname = "有効期限切れ" If Date >= "3008/09/29" Then Application.DisplayAlerts = False If Sheets.Count = 1 Then If Sheets(1).Name <> endsheetname Then Sheets.Add(After:=ActiveSheet).Name = endsheetname End If Else On Error Resume Next Sheets(endsheetname).Delete On Error GoTo 0 Sheets.Add(After:=ActiveSheet).Name = endsheetname End If sheetnumber = Sheets.Count For i = 1 To sheetnumber For j = 1 To 2 If Sheets.Count = 1 Then Exit For If Sheets(j).Name = " SheetC " Then If Not Sheets("SheetC ").Visible Then Sheets("SheetC ").Visible = True If Sheets(j).Name <> endsheetname Then Sheets(Sheets(j).Name).Delete: Exit For Next Next Range("b" & 3).Value = "ご利用ありがとうございました。" ActiveWorkbook.Save Application.DisplayAlerts = True End If If (Sheets.Count = 1) And (Sheets(1).Name = endsheetname) Then Exit Sub If Not Sheets(" SheetC ").Visible Then Sheets(" SheetC ").Visible = True End Sub

専門家に質問してみよう