以下は、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
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
はじめ、InStrRev を使ってみましたが、思った結果がでなかったので(後でわかりました)文字列を反転 して、先頭から”¥”の探し出し、その文字のある手前まで切り出して、ファイル名を取得しました。なん と、InStrRev 関数は、後ろから文字を探すのですが、見つけた場所の位置を、後ろから数えた位置では なく、前から数えた位置を返すみたいでした。下記のようにして t_file_name にファイル名を取り込 みました。 ‘====読み込みのファイル名取り出し==== Dim STR As String Dim t_file_name As String