Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6591 / 13646 ツリー ←次へ | 前へ→

【44352】指定したシートを開きたい asam 06/11/13(月) 19:43 質問[未読]
【44355】Re:指定したシートを開きたい 06/11/13(月) 20:56 質問[未読]
【44357】Re:指定したシートを開きたい Mi 06/11/13(月) 22:34 発言[未読]
【44378】Re:指定したシートを開きたい asam 06/11/14(火) 16:11 発言[未読]
【44379】Re:指定したシートを開きたい Kein 06/11/14(火) 17:01 回答[未読]
【44386】Re:指定したシートを開きたい asam 06/11/14(火) 19:22 お礼[未読]
【44381】Re:指定したシートを開きたい 06/11/14(火) 17:19 回答[未読]
【44387】Re:指定したシートを開きたい asam 06/11/14(火) 19:24 お礼[未読]

【44352】指定したシートを開きたい
質問  asam  - 06/11/13(月) 19:43 -

引用なし
パスワード
   はじめまして。VBA超初心者です。
バージョンはExcel2000です。


ファイルを開いたら必ずAというシートが開き
A1セルにコードを入力したら、そのコードと同じシート名の
シートを開き、該当するシートがない時は、
「該当するシートがありません。」
というコメントが出るように設定したいのですが
どのように設定したらよろしいでしょうか?

シートの数は不特定です。

もしくは、ファイルを開いたときに
「コードを入力してください」というボックスが出て
コードを入力できるようにすることが
できるのであれば、その方法も教えてください。

よろしくお願いいたします。

【44355】Re:指定したシートを開きたい
質問    - 06/11/13(月) 20:56 -

引用なし
パスワード
   どこまで分かっていますか?

****************************************************************
・してはいけない質問について
困ったことは基本的にどんな質問をされてもかまわないのですが、その中でも不適切な質問、というのがあります。以下のような質問は原則としてしないでください。お願いします。

 ・セキュリティ上好ましくない結果を招く内容
   例:ExcelやAccessのセキュリティレベルを変更するコード
     ファイルのパスワードを調べる(破る)コード

 ・丸投げ
   「○○するにはどうすればいいか教えてください」といったような、
   コードを最初から最後まで教えてもらうことを期待するような質問
****************************************************************

【44357】Re:指定したシートを開きたい
発言  Mi  - 06/11/13(月) 22:34 -

引用なし
パスワード
   ▼asam さん:
今までトライしたコードの状態を示されては?
一寸ヒントのレベル
Sub 指定シート開く()
Dim sh As Worksheet
  For Each sh In Sheets 
   If sh.Name = Range("A1").Value Then
    Sheets(sh.Name).Activate
    Exit Sub
    End If
  Next   
    MsgBox "該当するシートはありません"  
End Sub

後はThisWorkbookにオープンしたとき・・・を作成されては

 

【44378】Re:指定したシートを開きたい
発言  asam  - 06/11/14(火) 16:11 -

引用なし
パスワード
   申し訳ございません。


Private Sub Workbook_Open()

Sheets("メインページ").Select
Dim code As String
code = InputBox("コードを入力してください", "自分のシートを開く")
Sheets(code).Select
 
End Sub

と作ってみたのですが、該当するコードがなかったときに

MsgBoxで "該当するシートはありません"

と表示され、キャンセルボタンを押したらメインページを開きたいのですが
そのへんのところがよく分からなかったので・・・
質問の仕方が悪くて申し訳ありませんでした。

【44379】Re:指定したシートを開きたい
回答  Kein  - 06/11/14(火) 17:01 -

引用なし
パスワード
   Private Sub Workbook_Open()
  Dim code As String
  Dim MyS As Worksheet
  Dim Flg As Boolean

  Sheets("メインページ").Select
  Do
   code = InputBox("コードを入力してください", "自分のシートを開く")
   If code = "" Then Exit Sub: Flg = False
   On Error Resume Next
   Set NyS = Worksheets(code)
   If Err.Number <> 0 Then
     MsgBox "その名前のシートはありません", 48
     Err.Clear: Flg = True
   End If
   On Error GoTo 0
  Loop While Flg = True
  MyS.Activate: Set MyS = Nothing
End Sub

やるとすればこんなコードになりますが、シート名のように変更する頻度が少ない
ものを、いちいちキーをタイプして指定するのはあまり賢いやり方ではありません。
一字打ち間違えても"シートがない"という判定をされてしまうからです。
ま、シート数が多くてタブをスクロールするのがたいへんなら、既存のツールバーに
コンボボックスを配置して、全シートをループしてシート名をリストアップするとか
メインページのIV列あたりに全シート名を入力、ダブルクリックイベントで目的の
シートを開くなどの工夫をするのがベターでしょう。
仮に後者の仕組みを作るとするなら・・

ThisWorkbookモジュール

Private Sub Workbook_Open()
  Dim i As Long

  Sheets("メインページ").Select
  If IsEmpty(Range("IO1").Value) Then
   For i = 1 To Worksheets.Count
     Range("IO:IV").Cells(i).Value = Worksheets(i).Name
   Next i
   Range("IO1:IV1").EntireColumn.AutoFit
  End If
  Application.GoTo Range("IO1"), True
End Sub

Sheets("メインページ")のシートモジュール

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _
Cancel As Boolean)
  Dim Snm As String

  If Intersect(Target, Range("IO:IV")) Is Nothing Then Exit Sub
  With Target
   If IsEmpty(.Value) Then Exit Sub
   Snm = CStr(.Value)
  End With
  Cancel = True
  Worksheets(Snm).Activate
End Sub

【44381】Re:指定したシートを開きたい
回答    - 06/11/14(火) 17:19 -

引用なし
パスワード
   Kein さんが詳細に解説されているので参照してください。

一例です

Private Sub Workbook_Open()
  Dim SHT As Worksheet
  Dim code As String, MB As String
  Sheets("メインページ").Select
  Do
    code = InputBox("コードを入力してください", "自分のシートを開く")
    For Each SHT In Sheets
      If SHT.Name = code Then
        Sheets(code).Select
        Exit Sub
      End If
    Next
    MB = MsgBox("該当するシートはありません" & vbCrLf & "再入力しますか?", vbOKCancel)
    If MB = vbCancel Then
      Sheets("メインページ").Activate
      Exit Sub
    End If
  Loop
End Sub

【44386】Re:指定したシートを開きたい
お礼  asam  - 06/11/14(火) 19:22 -

引用なし
パスワード
   >keinさん

回答ありがとうございます。

なぜ、いちいちタイプして指定しようとしたのかといいますと
このファイルを多数の人が編集をするのですが、
その際、自分のシートに対して編集してほしいのですが、
ファイルを開いたとき、別の人のシートが開いていると
ついそのまま、他人のファイルを編集してしまうかもしれないので
それを回避するため、ファイルを開くたびにコードを入力して
シートを開こうと思ったのでした。

【44387】Re:指定したシートを開きたい
お礼  asam  - 06/11/14(火) 19:24 -

引用なし
パスワード
   >注さん

回答、ありがとうございます。

試してみたらできました。

該当するシートがなかったとき、再入力を促すコメントが出るのは
非常によかったです。
このようにしなかったら、間違ったコードを入力した時、対処できないですね。
気が付きませんでした。

とても参考になりました。

6591 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free