[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『シート見出し』(ryu) よろしくお願いします。 シート見出しにシート数が多くなると見づらいものです。シート見出しの左端のスクロ ールバーを右クリックでシート選択でシートを選択することが出来るのですが フォームのボタンを作ってボタンからシート選択を表示することって出来ないでしょう か
>フォームのボタンを作ってボタンからシート選択を表示することって出来ないでしょう >か
出来るとおもいますが、シートの数だけボタンを作るのは非効率的です。 コンボボックスやリストボックスから選択するようにしてはいかがでしょう? (MARBIN)
私は、目次シートを作ってシート名をセルに入力し、ダブルクリック・イベントで 目的のシートを選択するようにしているブックがあります。 (純丸)(o^-')b
>出来るとおもいますが、シートの数だけボタンを作るのは非効率的です。 コンボボックスやリストボックスから選択するようにしてはいかがでしょう? (MARBIN)さん 有難うございます。出来れば具体的に教えていただけないでしょうか (純丸)(o^-')bさん 有難うございます。確か過去ログにあって試したのですがうま く作動できませんでした。もう少し詳しく教えていただけませんか (ryu)
目次シートの A1:C30 に、シート名があるとして、下記のコードを シートモジュールにコピペして下さい。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim shname As String Dim rng As Range On Error GoTo nosheet Set rng = Range("A1:C30") 'シート名の範囲をセット If Intersect(Target, rng) Is Nothing Then Exit Sub Cancel = True shname = Target.Value Worksheets(shname).Activate Exit Sub nosheet: MsgBox "シート (" & shname & ") は、ありません" End Sub
セルをダブルクリックすると、そのシートに飛びます。 ちなみに、全シートの名前を抜き出すマクロはこれ↓。
Sub 目次作成() Dim ws As Worksheet Dim i As Integer ActiveWorkbook.Sheets.Add ActiveSheet.Name = "目次" i = 1 For Each ws In ActiveWorkbook.Sheets Cells(i, 1).Value = ws.Name i = i + 1 Next End Sub (純丸)(o^-')b
有難うございます。目次シートのみ残し他のシートを隠すことって出来ますか? (ryu)
UserFormを使用した場合
1) UserForm(UserForm1)を作成しComboBox(ComboBox1)を配置
ThisWorkbookモジュールへ
Private Sub Workbook_Open() Call HideSheets UserForm1.Show vbModeless End Sub
標準モジュールへ
Sub UpdateList() Dim i As Integer With UserForm1.ComboBox1 .Clear For i = 2 To ThisWorkbook.Sheets.Count .AddItem ThisWorkbook.Sheets(i).Name Next End With End Sub
Sub HideSheets() Dim i As Integer ThisWorkbook.Sheets(1).Visible = -1 For i = 2 To ThisWorkbook.Sheets.Count ThisWorkbook.Sheets(i).Visible = 2 Next End Sub
Form モジュールへ
Private Sub UserForm_Initialize() Call UpdateList End Sub
Private Sub ComboBox1_Click() Dim ws As Worksheet With Me.ComboBox1 If .ListIndex = -1 Then Exit Sub Call HideSheets On Error Resume Next Set ws = ThisWorkbook.Sheets(.ListIndex) On Error GoTo 0 If ws Is Nothing Then MsgBox "選択されたシートは削除、または名前が変更されています" & vbLf & _ "もう一度選択してください" Call UpdateList Exit Sub Else ws.Visible = xlSheetVisible ws.Select End If End With Set ws = Nothing End Sub (seiya)
ただ、目的のシートに移動したいだけなら、 メニューフォームを作って、ハイパーリンクさせるのも一つですね。 (TORI)
あとはCommandBarを作って表示させることくらいかな? (seiya)
(seiya)さん いつもご指導有難うございます。遅くなってご免なさい。 下記の部分で [End Subが必要です]とエラーが出ます。(ComboBoxは表示されますが 作動しません) Private Sub ComboBox1_Change() Private Sub UserForm_Initialize() Call UpdateList End Sub (ryu)
ryuさん
Private Sub ComboBox1_Change()
を削除してください。 (seiya)
Private Sub ComboBox1_Change()を削除しましたら下記のエラーが出ます。 コンバイルエラー End Sub,End Function又はEnd Property 以降にはコメントのみが記述できます。 コードの最下に Endに青色が付きます。 (ryu)
Form moduleのコードをアップしてください。 (seiya)
Form moduleは以下のようになっています。
Private Sub UserForm_Initialize() Call UpdateList End Sub
Private Sub ComboBox1_Click() Dim ws As Worksheet With Me.ComboBox1 If .ListIndex = -1 Then Exit Sub Call HideSheets On Error Resume Next Set ws = ThisWorkbook.Sheets(.Value) '<- ここ On Error GoTo 0 If ws Is Nothing Then MsgBox "選択されたシートは削除、または名前が変更されています" & vbLf & _ "もう一度選択してください" Call UpdateList Exit Sub Else ws.Visible = xlSheetVisible ws.Select End If End With Set ws = Nothing End Sub
End Sub (ryu)
最後の End Sub は余計です。 削除してください。 (seiya)
>最後の End Sub は余計です よく確認しないでご免なさい。削除したところ Module1に ws.Visible = xlSheetVeryHidden に黄色が付きます。 (ryu)
ryuさん コードを数箇所変更しましたので、もう一度貼り付けて検証してみてください。 (seiya)
何度もすみません。Module1の [Sub HideSheets()]の部分に黄色 ThisWorkbookSheetsに青色が付きます。 (ryu)
ごめんなさい . が抜けてます
ThisWorkbook.Sheets
です. (seiya)
横槍すみません。 やりとりを見てて思ったのですが、 少しのスペルミスや"."などの脱落でVBAはエラーになります。 この間違いに自分で気が付かないのであれば、VBAは使う べきでないと思います。
いま、目先の問題が片付いたとしても、少し改造が必要になったら また聞いてくることになると思います。
ネット検索したらVBA入門サイトはいくらでもあります。 基礎から勉強することを強くお勧めします。 (とおりすがり)
おっしゃるとおりです。 (ryu)
Nextがないとのメッセージがありましたので入力したらエラーは出なくなったのですが Combobox1が表示されません。これをどうして出させることが出来ますか? なお シート見出しは Sheet1のみ出ております。 (ryu)
一番左に位置したシートを一枚表示させていますので、 ダミーシートを作成して、表示されているSheet1の左側に 移動してください。
ComboBoxが表示されませんか... どうしてでしょうね...
UserForm moduleに追加してください
Private Sub UserForm_Activate() Call UpdateList End Sub (seiya)
ファイルを新たに立ち上げるとComboBoxは表示されます。ComboBoxのSheet2を選択しま すと「選択されたシートは削除されたか名前が変更された」のメッセージ Sheet3を選択しても呼び出すことは出来ません。どこかで間違ったかも知れませんので もう一度やり直してみます。 (ryu)
>ファイルを新たに立ち上げると... これは新しいファイルにUserFormを作成して全てのコードを所定のモジュールに 貼り付けたもの という意味ですか? (seiya)
>これは新しいファイルにUserFormを作成して全てのコードを所定のモジュールに 貼り付けたもの という意味ですか? そうではありません。教えていただいて出来たものを保存しそのファイルを立ち上げた という意味です。 (ryu)
Set ws = ThisWorkbok.Sheets(.ListIndex) を Set ws = ThisWorkbook.Sheets(.Value)
に変更してください。 Original は既に変更してあります。 (seiya)
>Set ws = ThisWorkbook.Sheets(.Value) に変更したところ正常に作動されました。いつもながら本当に有難うございます。 (ryu)
よかったですね。 まだバグがあるかもしれませんので、しっかり検証してください。 (seiya)
(seiya)さん お早うございます。このマクロ凄いですね!!!シートを増やすと自動 的にシート名がリストに加えられるんですね。只、このファイルを開くとコマンドボタ ンが表示されるのですが、一度隠すと後どうして表示されるのですか? (ryu)
一応今までご教授頂いたお蔭様で自分で解決することが出来ました。本当に凄いマクロ を教えていただき有難うございました。 (ryu)
先日は有難うございました。シート見出しはうまく作動してくれるのですが、他のシー トで一部作動しなくなりました。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Column =2 then Worksheets("sheet5").Activate Worksheets("sheet5").Range("A1").Value = Target.Row - 4 Cancel = True End If
End Sub
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) If Target.Column = 2 then Worksheets("sheet7").Activate Worksheets("sheet7").Range("A1").Value = Target.Row - 4 Cancel = True End If
End Sub 以上が全く反応しなくなりました。私も何が原因かと探したのですが所詮初心者の私で は無理でした。 (ryu)
えーーと、これは別の問題ですよね?
考えられることは、EnableEvents が何かの拍子に Falseにセットされたまま終了したのかも知れません。
Sub xxx() Application.EnableEvents = True End Sub
を一度実行してから、確認してください。 もしこれで問題が解決したのなら、問題の(Errorの出た)コードを 修正する必要があります。 (seiya)
(seiya)さん お忙しいのに早速有難うございます。 そうです。シート表示は正しく動いてくれます。 Sub test() Application.EnableEvents = True End Sub で実行したのですが動いてくれません。 (ryu)
全く反応がないのですか? (seiya)
はい 全く反応がありません。 (ryu) かすかに 動いているみたいです
どちらのコードでもよいので
MsgBox "OK"
をどこかに加えて試してください。 (seiya)
Sub test() Application.EnableEvents = True MsgBox "OK" End Sub で実行しました。 メッセージボックスに OK がでました。 (ryu)
そのコードじゃなくて... ryuさんの提示されたPrivate Sub...のどちらかのコードです,,, (seiya)
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Column =2 then Worksheets("sheet5").Activate Worksheets("sheet5").Range("A1").Value = Target.Row - 4 Cancel = True End If MsgBox "OK" End Sub すみません。このように入れました。 メッセージボックスに OK がでました。 (ryu)
でも思うような結果が得られないのですか?
If Target.Column = 2 Then Cancel = True With Sheets("sheet5").Range("a1") .Value = Target.Row - 4 Application.GoTo .Cells End With End If
にしたらどうなりますか? (seiya)
>Application.GoTo .Cells この部分にエラーで黄色がつきます (ryu)
.Cells を .Cells(1,1) に変えてみてください (seiya)
>.Cells を .Cells(1,1) に変えてみてください に変えてみたのですが変わりません (ryu)
そうですか...
If Target.Column = 2 Then Cancel = True With Sheets("Shet5") .Range("a1").Value = Target.Row - 4 .Select End With End If
では? (seiya)
何度もご免なさい >.Select 今度はここに黄色がつきます。 (ryu)
上記 Shet5 は Sheet5 ですね...
A1の値は変更されていますか? (seiya)
上記 Shet5 は Sheet5 ですね...そうです sheet5の間違いです。 A1の値は元シートを参照していますのでその行をWクリックすることで値は変わりま す。 (ryu)
Application.GoTo も Select も受け付けないのはなぜでしょうね? 新しいブックで試しては? (seiya)
有難うございます。 >新しいブックで試しては? そのようにします。 (ryu)
ryuさん、そのコードと今回のUserFormが同居してるのですか?
VisibleでないシートはSelect/Activateできません。
If Target.Column=2 Then With Sheets("sheet5") .Range("a1").Value = Target.Row - 4 .Visible = -1 .Select End With End If
にしてください
(seiya)さん お早うございます。その後もいろいろ試してみたのですがダメで諦める しかないかなーと落胆しておりました。(seiya)さんはその後もいろいろお気を遣って いただいたのですね このコードでうまく動いてくれました。いつもいつも本当に有難うございます。 (ryu)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.