• 締切済み

マクロを有効にしないと表示されないようにする方法(続き)

エクセルのマクロを有効にしないと表示しないようにする方法(続き) Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim i As Integer For i = 1 To 5 Sheets(i).Visible = False Next ActiveWorkbook.Protect Password:="error" ActiveWorkbook.Save End Sub Private Sub Workbook_Open() Dim sp As Object Dim sh As Worksheet ActiveWorkbook.Unprotect Password:="error" For i = 1 To 5 Sheets(i).Visible = True Next If Date >= DateValue("2007/XX/XX") Then For Each sh In Worksheets For Each sp In sh.Shapes sp.Delete Next sp sh.Cells.Delete Next sh End If Sheets("Sheet1").Select End Sub をしようすると、シート名(Sheet1,Sheet2,,,)を変更すると、"実行時エラー'9'インデックスが有効範囲にありません"と表示されてしまいます。解決策はありますでしょうか

みんなの回答

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

これを書いた人の質問には思えないので、別の人が書いたのかな? Sheets("Sheet1").Select を Sheets(1).Select でどうでしょう。 試してませんけど。

baliindo
質問者

補足

シートを並び替えることで問題が解決しました。 ご回答ありがとうございました

関連するQ&A

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

    エクセルでマクロを有効にしないと、シートが表示されないように設定したいのですが、下記の様に(ほかの方の投稿から)入力すると三行目がエラーになります。素人なので、よくわかりません。どのようにしたら、マクロを有効にしないと全てのシートを表示しないようにできるのでしょうか? ご教授いただけますでしょうか 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

  • コピペ,ドラッグ&ドロップをシート全体及び複数範囲指定で禁止したい

    コピペ,ドラッグ&ドロップをシート全体及び複数範囲指定で禁止したい お世話になります。 上記の内容を実現したいのですが This Workbookには Private Sub Workbook_BeforeClose(Cancel As Boolean) Sheets("Sheet1").Visible = True Sheets("Sheet2").Visible = False Sheets("Sheet3").Visible = False Sheets("Sheet1").Select ActiveWorkbook.Protect Password:="123" ActiveWorkbook.Save End Sub ――――――――――――――――――――――――――――――――――――――― Private Sub Workbook_Open() ActiveWorkbook.Unprotect Password:="123" Sheets("Sheet2").Visible = True Sheets("Sheet3").Visible = True Sheets("Sheet2").Select Sheets("Sheet3").Select Sheets("Sheet1").Visible = False End Sub が入っていますがどのようにすればいいのでしょうか? ご教示お願いします。 ちなみにexcel2003です。

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

    仕事で使用しています。教えてください。 エクセルの表でマクロを使用しているのですが、入力後保存して再度開くと入力できなくなってしまいました。 マクロ勉強中で、コピペしようしている為、どこがダメなのかがわかりません。 お分かりになる方、教えていただけますか? 現在使用しているマクロは 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つです。 マクロを解除して使用してしまう方がいたので、マクロを使用してのみ使えるようにしたのですが…。 入力できなくなってしまいました

  • Excel エクセル マクロ VBA

    エクセルマクロで指定したシート(2シート目)から末尾のシートまで印刷したい場合、下記のようなコードで良いでしょうか? Sub Sample1() Dim i As Long For i = 2 To Sheets.Count ActiveWorkbook.Sheets(i).Select (Replace:= False) Next i Activesheet.PrintOut Preview:=True End Sub

  • マクロを組むとこんなエラーが出るようになりました

    捺印君:Vel 1.25→(エクセルのフリーソフトです) PicturesクラスのPasteプロパティを取得出来ません。 予期せぬエラーが発生しました。 とエラーが出ます。 ちなみに組んでいるマクロは下記です Sub 全シートの保護() Dim Sh As Worksheet Dim myPassword As String myPassword = InputBox("パスワードを入力してください", "パスワード") For Each Sh In Worksheets Sh.Protect Password:=myPassword Next End Sub Sub 全シートの解除() Dim Sh As Worksheet Dim myPassword As String myPassword = InputBox("パスワードを入力してください", "パスワード") For Each Sh In Worksheets Sh.Unprotect Password:=myPassword Next End Sub このマクロがおかしいからエラーが出るんですよね? 違うマクロにすれば問題ないでしょうか? ちなみにマクロは「全シートの保護一括解除」と「一括保護」で パスワード付きの物をとなっております。

  • ファイル すべてのシート 値だけ 別のシート

    ファイルAのすべてのシートに関数式が含まれています。 このシートを別フォルダーに分割し書き出すことは出来たのですが 関数式まで貼り付けられます。 これを値のみにしたいのですがご教授御願いします。 マクロはこれです。 Sub シート分割() Const path As String = "C:¥" Dim bk As Workbook Set bk = ActiveWorkbook Dim st As Worksheet For Each st In bk.Sheets Workbooks.Add st.Copy Before:=ActiveWorkbook.Sheets(1) ActiveWorkbook.SaveAs path & st.Name & ".xls" ActiveWorkbook.Close Next End Sub

  • マクロが上手く組めない

    各シートの特定のセル(1,25)にINDEXシートのハイパーリンクを 設定したいのですが、「オブジェクトが存在しません」 とエラーが表示されてしまっており、どのように修正すればいいのか 分からず、困っております。何故エラーが出たのかについてご教授頂けると幸いです。 私の書いたソースコード ********************************** ********************************** Sub INDEXLINK() Dim w As Worksheet Set w = Sheets("INDEX") Dim i As Long For i = 1 To ActiveWorkbook.Worksheets.Count Worksheets(i).Hyperlinks.Add Anchor:=Worksheets(i).Cells(1,25), Address:="", SubAddress:=w & "!c1", TextToDisplay:=w.Name Next End Sub

  • ■シートを一つ削除するマクロを教えてください。

    前に、http://oshiete1.goo.ne.jp/qa4352149.html で質問させて頂きました。 その節は、お世話になりありがとうございました。 今回は、前回と似たようなものですが、 少々条件を変更したマクロを作成したいので ご協力のほど、何卒よろしくお願い致します。 文末にマクロを記述いたしますが、そちらは、 指定した日付以降にエクセルのファイルを開くと シートがすべて削除されて、「有効期限切れ」という シートだけが出てくるというものです。 今度は例えば「SheetA」、「SheetB」、「SheetC」という 3つのシートがあったとして、 指定した期日が来たら、「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

  • マクロで複数のシートを保護&パスワードをかける為に下記式を作成しました

    マクロで複数のシートを保護&パスワードをかける為に下記式を作成しましたが エラー”400”のみ出て上手く行きませんでした。 どこか式がおかしいのでしょうか。。。 一応式を入力しておきます。 超初心者でまったく意味がわからないので、どなたか宜しくお願い致しますm(__)m Sub AllProtect() Dim sh As Worksheet Dim myPassword As String myPassword = InputBox("パスワードを入力してください", "パスワード") For Each sh In Worksheets sh.Protect Password:=1234 Next End Sub Sub AllUnprotect() Dim sh As Worksheet Dim myPassword As String myPassword = InputBox("パスワードを入力してください", "パスワード") For Each sh In Worksheets sh.Unprotect Password:=1234 Next End Sub

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

    エクセルで、シートを一つ削除するマクロを教えてください。 本当に困っています。 マクロをご存知の方、ずぶの素人の私にご教示何卒よろしくお願いします。 文末にマクロを記述いたしますが、そちらは、 指定した日付以降にエクセルのファイルを開くと シートがすべて削除されて、「有効期限切れ」という シートだけが出てくるというものです。 現在、これを応用して、すべてのシートを 削除するのではなく、ひとつのシートだけ削除したいのです。 例えば「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

専門家に質問してみよう