以下は、VBA 標準モジュールに記載したプロシャージャです。
Sub ボタン2_Click() は、シートに貼り付けてある、マクロ起動用のものです。
Function sheets_set(Wb As Workbook) の中身は、本来ユーザーフォームの _Initialize()の項目に記入すべきでしょうが、Wb の引き渡し方法がわからないので、こちらに書きました。
---------------
Sub ボタン2_Click()
Call Select_sheet
End Sub
---------------
Function Select_sheet()
‘====読み込みフルパスファイル名の取得====
Dim fPath As Variant
Dim fType, prompt As String
fTyp = “Excelファイル(*.xlsm),*.xlsm,Excelファイル(*.xlsx),*.xlsx,Excelファイル(*.xls),*.xls”
prompt = “Excelファイルを選択してください”
fPath = Application.GetOpenFilename(fTyp, , prompt)
If fPath = False Then
MsgBox “ファイルが選択されていません。”
Exit Function
End If
‘====読み込みのファイル名取り出し====
Dim STR As String
Dim t_file_name As String
STR = StrReverse(fPath)
t_file_name = Right(fPath, InStr(STR, “\”) – 1)
‘====ファイルを開く処理====
Dim Wb As Workbook
If ThisWorkbook.FullName <> fPath Then
If fPath <> “” Then
For i = 1 To Workbooks.Count
If Workbooks(i).Name = t_file_name Then
BookFlag = True
End If
Next i
If BookFlag <> True Then
MsgBox “ファイルを開きます。”
Set Wb = Workbooks.Open(fPath, UpdateLinks:=Ture, ReadOnly:=Ture)
Call sheets_set(Wb)
UserForm1.Show vbModeless
Else
MsgBox “すでに開いているファイルを開こうとしてます。”
Exit Function
End If
End If
Else
MsgBox “自分自身を開こうとしてます。”
Exit Function
End If
End Function
-------------------------------------------
Function sheets_set(Wb As Workbook)
Dim i As Integer
With UserForm1.ListBox1
‘一つだけ選択
.MultiSelect = fmMultiSelectSingle
End With
For i = 1 To Wb.Worksheets.Count
UserForm1.ListBox1.AddItem (Wb.Worksheets(i).Name)
Next
UserForm1.ListBox1.ListIndex = 0
End Function
以下は、ユーザーフォームの方に記載したものです。
-------------------------
Private Sub CommandButton1_Click()
ThisWorkbook.Activate
Unload UserForm1
End Sub
-------------------------
Private Sub ListBox1_Click()
sh_name = ListBox1.List(ListBox1.ListIndex)
TextBox1.Text = sh_name
Worksheets(sh_name).Activate
End Sub
----------------------------------------------
Private Sub ListBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeyReturn Then
KeyCode = 0
ThisWorkbook.Activate
Unload Me
End If
End Sub
----------------------------------------------
Private Sub UserForm_Initialize()
With ListBox1
‘一つだけ選択
.MultiSelect = fmMultiSelectSingle
End With
End Sub