• ベストアンサー

自動でアクティブにするシート名を可変にしたい。

ExcelVBAの質問です。 分かりづらい点等ございましたら、ご指摘願います。 表題の通り、VBAにて自動的にアクティブにするシートを変えたいのです。 要件は、 1.あるブックを開いた際、最初に開いていたシート名を変数に格納 2.その後、Aというシートをアクティブする 3.Aシートの保護の解除及び、UIのみ可にするよう保護の設定 4.最初に開いていたシートをアクティブに。 うー、分かりづらい。 コードを以下のように書いたのですが、エラーで上手くいきません。 ***********************************************   Dim sheet_name As String   sheet_name = ActiveSheet.Name Sheets("A").Activate ' 一旦、シート保護を解除 ActiveSheet.Unprotect ' シート保護を設定(UIのみ) ActiveSheet.Protect            UserInterfaceOnly:=True,   AllowFiltering:=True ActiveWindow.ScrollRow = 1 Sheets(sheet_name).Activate *********************************************** 恐らく最後の > Sheets(sheet_name).Activate ここの指定が間違っているのではないかとは思っているのですが、 方法が分かりません。 どなたか分かりましたら、ご教授いただけると幸いです。 よろしくお願い致します。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

初めのアクチブシート名をシート名で変数に保存しているようだから シートAの処理が終わったら、保存したシート名でアクチブにしたら仕舞いでは。 初めSheet3をアクチブにして下記をやってみたら Sub test01() shn = ActiveSheet.Name MsgBox shn MsgBox Worksheets("Sheet1").Range("A2") Worksheets(shn).Activate End Sub MsgBox Worksheets("Sheet1").Range("A2") は実際はSheet1でやりたい処理ルーチンを入れる。

mohican69
質問者

お礼

>初めのアクチブシート名をシート名で変数に保存しているようだから >シートAの処理が終わったら、保存したシート名でアクチブにしたら仕舞いでは。 実際やりたかったのはそういう事なんです。 下記にも書かせていただきましたが、特にコード自体に問題は無かったようで、一度保存して閉じた後、流したらうまくいきました。 ご回答ありがとうございました。 お手数おかけ致しました。

その他の回答 (1)

  • DIooggooID
  • ベストアンサー率27% (1730/6405)
回答No.1

*********************************************** Dim sheet_name As String sheet_name = ActiveSheet.Name Sheets("A").Activate ' 一旦、シート保護を解除 ActiveSheet.Unprotect ' シート保護を設定(UIのみ) ActiveSheet.Protect _ UserInterfaceOnly:=True, _ AllowFiltering:=True ActiveWindow.ScrollRow = 1 Sheets(sheet_name).Activate ***********************************************

mohican69
質問者

お礼

回答ありがとうございます。 改行の部分は見やすくするため、_ を省略してしまった為、 分かりずらくなってしまいましたね。大変申し訳ありませんでした。 そこ以外、全く同じコードで書かれていたので、 特に間違いは無かったという事だと思い、一度シートを保存し 閉じた上で、再度開いたら特にエラーも起きず流れました。 結局、原因が分からなかったですが、直りました。 ありがとうございました。

関連するQ&A