- ベストアンサー
自動でアクティブにするシート名を可変にしたい。
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 ここの指定が間違っているのではないかとは思っているのですが、 方法が分かりません。 どなたか分かりましたら、ご教授いただけると幸いです。 よろしくお願い致します。
- みんなの回答 (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でやりたい処理ルーチンを入れる。
その他の回答 (1)
- DIooggooID
- ベストアンサー率27% (1730/6405)
*********************************************** 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 ***********************************************
お礼
回答ありがとうございます。 改行の部分は見やすくするため、_ を省略してしまった為、 分かりずらくなってしまいましたね。大変申し訳ありませんでした。 そこ以外、全く同じコードで書かれていたので、 特に間違いは無かったという事だと思い、一度シートを保存し 閉じた上で、再度開いたら特にエラーも起きず流れました。 結局、原因が分からなかったですが、直りました。 ありがとうございました。
お礼
>初めのアクチブシート名をシート名で変数に保存しているようだから >シートAの処理が終わったら、保存したシート名でアクチブにしたら仕舞いでは。 実際やりたかったのはそういう事なんです。 下記にも書かせていただきましたが、特にコード自体に問題は無かったようで、一度保存して閉じた後、流したらうまくいきました。 ご回答ありがとうございました。 お手数おかけ致しました。