Sub MyFileCbox()
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  Rem 同一フォルダ内文書ファイル選択処理([開く]/[閉じる]随時切り替え)
  Rem 作譜:Hitrock Camellia Shinopy
  Rem 言語:Word VBA
  Rem 機能...
  Rem   指定したフォルダ内の文書ファイル名を取得し、コンボボックスに表示する。
  Rem   コンボボックスからファイル名を選択して、文書ファイルを開く。
  Rem   別ファイルを選択すると、既に開いている文書ファイルを閉じて、
  Rem   選択した文書ファイルを開く。
  Rem 注記...
  Rem   1. MyFileCboxを起動して使用。
  Rem   2. 表示する文書ファイルの[タイトル][サブタイトル][コメント]を取得して、
  Rem      コンボボックスのポップ ヒントで表示する。
  Rem 履歴...
  Rem   第01版:2007/04/24:作成。
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  Rem 参照設定する場合...
  Rem  Microsoft Shell Controls And Automation
  Rem  Microsoft Scripting RunTime
  Rem   Microsoft VBScript Regular Expressions 5.5
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  Dim myTitle As String
  Dim myFolder As String
  Dim myFiles As String
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  '
  myTitle = "MyFileCbox"
  '
  myFiles = ""
  Call MyFileCboxMyFiles(myFolder, myFiles)
  '
  Select Case myFiles
    Case ""
      Rem 処理キャンセル
      Exit Sub
    Case vbCr
      MsgBox "文書ファイル(*.doc)がありません。"
      Exit Sub
  End Select
  myFiles = " " & myFiles
  myFiles = Left(myFiles, Len(myFiles) - 1)
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  '
  Call MyFileCboxCmmdBar(myTitle, myFolder, myFiles)
  Call MyFileCboxBttn(myTitle)
End Sub ' MyFileCbox *----*----*    *----*----*    *----*----*    *----*----*

Sub MyFileCboxBttn(myTitle As String)
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  Rem 各コマンドコントロール処理
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  Dim i As Long
  '
  Dim myBttnPrev As CommandBarControl
  Dim myCboxItem As CommandBarControl
  Dim myBttnNext As CommandBarControl
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  '
  Set myBttnPrev = CommandBars(myTitle).Controls(1)
  Set myCboxItem = CommandBars(myTitle).Controls(2)
  Set myBttnNext = CommandBars(myTitle).Controls(3)
  '
  Select Case CommandBars(myTitle & "Exec").Controls(1).TooltipText
    Case "[初期]"
      CommandBars(myTitle & "Exec").Controls(1).TooltipText = ""
      '
      myBttnPrev.Enabled = False
      myBttnNext.Enabled = False
      Rem *----*----*    *----*----*
    Case "[前へ]"
      CommandBars(myTitle & "Exec").Controls(1).TooltipText = ""
      '
      i = myCboxItem.ListIndex
      i = i - 1
      myCboxItem.ListIndex = i
      If i = 1 Then
        myBttnPrev.Enabled = False
        myBttnNext.Enabled = True
      Else
        myBttnPrev.Enabled = True
        myBttnNext.Enabled = True
      End If
      Call MyFileCboxItem(myTitle)
      Rem *----*----*    *----*----*
    Case "[次へ]"
      CommandBars(myTitle & "Exec").Controls(1).TooltipText = ""
      '
      i = myCboxItem.ListIndex
      i = i + 1
      myCboxItem.ListIndex = i
      If i >= myCboxItem.DropDownLines - 1 Then
        myBttnPrev.Enabled = True
        myBttnNext.Enabled = False
      Else
        myBttnPrev.Enabled = True
        myBttnNext.Enabled = True
      End If
      Call MyFileCboxItem(myTitle)
      Rem *----*----*    *----*----*
    Case "[文書選択]"
      CommandBars(myTitle & "Exec").Controls(1).TooltipText = ""
      '
      If myCboxItem.DropDownLines <= 2 Then
        myBttnPrev.Enabled = False
        myBttnNext.Enabled = False
      Else
        Select Case myCboxItem.ListIndex
          Case 1
            myBttnPrev.Enabled = False
            myBttnNext.Enabled = True
          Case myCboxItem.DropDownLines - 1
            myBttnPrev.Enabled = True
            myBttnNext.Enabled = False
          Case Else
            myBttnPrev.Enabled = True
            myBttnNext.Enabled = True
        End Select
      End If
      Call MyFileCboxItem(myTitle)
  End Select
End Sub ' MyFileCboxBttn *----*----*    *----*----*    *----*----*    *----*----*

Sub MyFileCboxItem(myTitle As String)
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  Rem [文書選択]実行処理
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  Dim myFolder As String
  Dim myFile As String
  Dim myText As String
  Dim x As Long
  Dim i As Long
  Dim myAns As Long
  '
  Dim myBttnPrev As CommandBarControl
  Dim myCboxItem As CommandBarControl
  Dim myBttnNext As CommandBarControl
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  '
  Set myBttnPrev = CommandBars(myTitle).Controls(1)
  Set myCboxItem = CommandBars(myTitle).Controls(2)
  Set myBttnNext = CommandBars(myTitle).Controls(3)
  '
  Rem 既に開いている文書ファイルを選択した場合は処理しない。
  If myCboxItem.Text = ActiveWindow.Document.Name Then Exit Sub
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  '
  x = CommandBars(myTitle).Controls.Count
  If CommandBars(myTitle).Controls(x).FaceId = 579 Then
    ActiveWindow.Close SaveChanges:=wdDoNotSaveChanges
  Else
    If ActiveDocument.Saved = True Then
      ActiveWindow.Close SaveChanges:=wdDoNotSaveChanges
    Else
      On Error Resume Next
      ActiveDocument.Close SaveChanges:=wdPromptToSaveChanges
      If Err.Number <> 0 Then
        myCboxItem.ListIndex = CommandBars(myTitle & "Exec").Controls(1).DescriptionText
        On Error GoTo 0
        Exit Sub
      End If
    End If
  End If
  '
  myFolder = myCboxItem.DescriptionText
  myFile = myCboxItem.Text
  '
  Documents.Open FileName:=myFolder & "\" & myFile, AddToRecentFiles:=False
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  '
  Rem [タイトル][サバタイトル][コメント]を取得。
  If Len(ActiveDocument.BuiltInDocumentProperties("Title")) <> 0 Then
    myText = ActiveDocument.BuiltInDocumentProperties("Title")
  Else
    myText = myCboxItem.Text
  End If
  myCboxItem.Caption = myText
  '
  If Len(ActiveDocument.BuiltInDocumentProperties("Subject")) <> 0 Then
    myText = ActiveDocument.BuiltInDocumentProperties("Subject")
  Else
    myText = myCboxItem.Text
  End If
  If Len(ActiveDocument.BuiltInDocumentProperties("Comments")) <> 0 Then
    myText = myText & vbCrLf & ActiveDocument.BuiltInDocumentProperties("Comments")
  End If
  myCboxItem.TooltipText = myText
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  '
  Rem [前へ][次へ]のポップ ヒントにファイル名を設定。
  x = myCboxItem.ListIndex
  '
  If myBttnPrev.Enabled = False Then
    myBttnPrev.TooltipText = "前へ"
  Else
    i = x - 1
    myCboxItem.ListIndex = i
    myBttnPrev.TooltipText = myCboxItem.Text
    myCboxItem.ListIndex = x
  End If
  '
  If myBttnNext.Enabled = False Then
    myBttnNext.TooltipText = "次へ"
  Else
    i = x + 1
    myCboxItem.ListIndex = i
    myBttnNext.TooltipText = myCboxItem.Text
    myCboxItem.ListIndex = x
  End If
  '
  With CommandBars(myTitle & "Exec").Controls(1)
    .DescriptionText = myCboxItem.ListIndex
  End With
End Sub ' MyFileCboxItem *----*----*    *----*----*    *----*----*    *----*----*

Sub MyFileCboxMyFiles(myFolder As String, myFiles As String)
  Dim myShell As Variant ' Shell32.Shell
  Dim myBrowseFolder As Variant ' Shell32.Folder
  '
  Dim myFso As Variant ' Scripting.FileSystemObject
  Dim myScriptingFiles As Variant ' Scripting.Files
  Dim myScriptingFile As Variant ' Scripting.File
  '
  Dim myText As String
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  '
  Set myShell = CreateObject("Shell.Application")
  Rem [フォルダの参照]ダイアログボックス表示
  myText = "文書ファイルの保存先フォルダを指定して下さい。"
  If Application.Windows.Count < 1 Then
    Documents.Add DocumentType:=wdNewBlankDocument
  End If
  Set myBrowseFolder = myShell.BrowseForFolder(0, myText, 1 + 16, ActiveDocument.Path)
  If myBrowseFolder Is Nothing Then
    Exit Sub
  Else
    myFolder = myBrowseFolder.Items.Item.Path
  End If
  '
  Set myFso = CreateObject("Scripting.FileSystemObject")
  Rem ファイルを名を取り込む
  Set myScriptingFiles = myFso.GetFolder(myFolder).Files
  myFiles = vbCr
  For Each myScriptingFile In myScriptingFiles
    Select Case Right(myScriptingFile, 4)
      Case ".doc"
        myFiles = myFiles & myScriptingFile.Name & vbCr
    End Select
  Next ' myScriptingFile
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  '
  Set myShell = Nothing
  Set myBrowseFolder = Nothing
  Set myFso = Nothing
  Set myScriptingFiles = Nothing
  Set myScriptingFile = Nothing
End Sub ' MyFileCboxMyFiles *----*----*    *----*----*    *----*----*    *----*----*

Sub MyFileCboxCmmdBar(myTitle As String, myFolder As String, myFiles As String)
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  Rem ツールバー処理
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  Dim MyArray As Variant
  Dim i As Long
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  '
  Rem 同名ツールバーの削除
  On Error Resume Next
  CommandBars(myTitle).Delete
  CommandBars(myTitle & "Exec").Delete
  On Error GoTo 0
  '
  Rem ステータスバーの表示
  Application.DisplayStatusBar = True
  '
  Dim myCmmdBar As CommandBar
  Dim myBttnPrev As CommandBarControl
  Dim myCboxItem As CommandBarControl
  Dim myBttnNext As CommandBarControl
  Dim myBttnSave As CommandBarControl
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  '
  Set myCmmdBar = CommandBars.Add(Name:=myTitle, Position:=msoBarTop, Temporary:=True)
  Set myBttnPrev = myCmmdBar.Controls.Add(Type:=msoControlButton, Before:=1, Temporary:=True)
  Set myCboxItem = myCmmdBar.Controls.Add(Type:=msoControlComboBox, Before:=2, Temporary:=True)
  Set myBttnNext = myCmmdBar.Controls.Add(Type:=msoControlButton, Before:=3, Temporary:=True)
  Set myBttnSave = myCmmdBar.Controls.Add(Type:=msoControlButton, Before:=4, Temporary:=True)
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  '
  With myBttnPrev
    .DescriptionText = "文書ファイル切り替え処理"
    .Style = msoButtonIcon
    .Caption = myTitle
    .TooltipText = "前へ"
    .FaceId = 1925
    .OnAction = myTitle & "MyBttnPrev"
  End With
  '
  MyArray = Split(myFiles, vbCr)
  '
  With myCboxItem
    .DescriptionText = myFolder
    .BeginGroup = True
    .Style = msoComboLabel
    .Caption = "文書名"
    '
    For i = 1 To UBound(MyArray)
      .AddItem MyArray(i), i
    Next ' i
    '
    .ListIndex = 0
    .TooltipText = "フォルダ:" & myFolder
    .DropDownLines = i
    .DropDownWidth = 200
    .OnAction = myTitle & "MyCboxItem"
  End With
  '
  With myBttnNext
    .DescriptionText = "文書ファイル切り替え処理"
    .BeginGroup = True
    .Style = msoButtonIcon
    .Caption = myTitle
    .TooltipText = "次へ"
    .FaceId = 1924
    .OnAction = myTitle & "MyBttnNext"
  End With
  '
  With myBttnSave
    .DescriptionText = "文書ファイル切り替え処理"
    .BeginGroup = True
    .Style = msoButtonIcon
    .Caption = myTitle
    .TooltipText = "変更があっても、保存しない。"
    .FaceId = 579
    .OnAction = myTitle & "MyBttnSave"
  End With
  '
  myCmmdBar.Visible = True
  '
  CommandBars.Add Name:=myTitle & "Exec", Position:=msoBarPopup, Temporary:=True
  CommandBars(myTitle & "Exec").Controls.Add Type:=msoControlButton, Before:=1, Temporary:=True
  With CommandBars(myTitle & "Exec").Controls(1)
    .DescriptionText = myCboxItem.ListIndex
    .Caption = "実行!"
    .FaceId = 329
    .TooltipText = "[初期]"
    '.Visible = True
  End With
End Sub ' MyFileCboxCmmdBar *----*----*    *----*----*    *----*----*    *----*----*

Sub MyFileCboxMyBttnPrev(Optional myDummy As Boolean)
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  Rem [前へ]ボタン処理
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  Dim myTitle As String
  '
  myTitle = "MyFileCbox"
  '
  CommandBars(myTitle & "Exec").Controls(1).TooltipText = "[前へ]"
  Call MyFileCboxBttn(myTitle)
End Sub ' MyFileCboxMyBttnPrev *----*----*    *----*----*    *----*----*    *----*----*

Sub MyFileCboxMyCboxItem(Optional myDummy As Boolean)
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  Rem [文書選択]ボタン処理
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  Dim myTitle As String
  Dim x As Long
  '
  myTitle = "MyFileCbox"
  x = CommandBars(myTitle).Controls.Count - 2 ' コマンドバー右端から2番目[文書選択]
  '
  CommandBars(myTitle & "Exec").Controls(1).TooltipText = "[文書選択]"
  Call MyFileCboxBttn(myTitle)
End Sub ' MyFileCboxMyCboxItem *----*----*    *----*----*    *----*----*    *----*----*

Sub MyFileCboxMyBttnNext(Optional myDummy As Boolean)
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  Rem [次へ]ボタン処理
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  Dim myTitle As String
  '
  myTitle = "MyFileCbox"
  '
  CommandBars(myTitle & "Exec").Controls(1).TooltipText = "[次へ]"
  Call MyFileCboxBttn(myTitle)
End Sub ' MyFileCboxMyBttnNext *----*----*    *----*----*    *----*----*    *----*----*

Sub MyFileCboxMyBttnSave(Optional myDummy As Boolean)
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  Rem [保存可否]ボタン処理
  Rem *----*----*    *----*----*    *----*----*    *----*----*
  Dim myTitle As String
  '
  myTitle = "MyFileCbox"
  '
  With CommandBars(myTitle).Controls(CommandBars(myTitle).Controls.Count)
    If .FaceId = 579 Then
      .FaceId = 538
      .TooltipText = "変更を保存するか確認する。"
    Else
     .FaceId = 579
     .TooltipText = "変更があっても、保存しない。"
    End If
  End With
End Sub ' MyFileCboxMyBttnSave *----*----*    *----*----*    *----*----*    *----*----*
inserted by FC2 system