[[20070224132245]] 『シート見出し』(ryu) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

 『シート見出し』(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.