|
恐れ入りますが,お力をお貸し下さい。
A列 B列 C列
1行 保存場所 ファイル名 シート名
2行
上記のように2行目以降に保存場所,ファイル名及びシート名を入力するさせようと考えています。
その方法として,Worksheet_BeforeDoubleClick イベントを利用し,B列はダブルクリックすることで,Worksheet_BeforeDoubleClick イベントを発生させ,ファイル選択画面(GetOpenFilename)からファイル名を取得させます。
同時にA列にそのパスを記入させます。
C列もダブルクリックイベントを発生させ,ブックの全シート名をリスト化して必要なシートを選択入力させようと考えています。
以下のコードにしてみました。
'----- 全てシートモジュールに -------------------------------------
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _
Cancel As Boolean)
Dim OpenFile As String
Dim SearchFile As String
Dim MyFName As String
Dim MyCell As String
Dim shn() As Long
Dim FileCounter As Long
Dim i As Long
If Application.Intersect(Target, Range("B2:C65535") Is _
Nothing Then Exit Sub
Select Case Target.Column
Case 2
MyCell = ActiveCell
MyFName = Application.GetOpenFilename _
(Title:="ファイルを選んで下さい", _
FileFilter:="Excelファイル(*.xls),*xls")
If MyFName = "False" Then
ActiveCell = MyCell
Else
ActiveCell = Dir(MyFName)
End If
ActiveCell.Offset(, -1) = CurDir
Case 3
OpenFile = ActiveCell.Offset(, -1)
FilePath = ActiveCell.Offset(, -2)
SearchFile = FilePath & "\" & OpenFile
If SearchFile = "" Then Exit Sub
Application.ScreenUpdating = False
Workbooks.Open SearchFile
FileCounter = Worksheets.Count
For i = 1 To FileCounter
ReDim Preserve shn(i): shn(i) = Sheets(i).Name
Next i
With Selection.Validation
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, _
Formula1:=" ※ここの記述の仕方がわかりません! "
End With
Workbooks(OpenFile).Close (False)
Application.ScreenUpdating = True
End Select
Cancel = True
End Sub
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Application.Intersect(Target, Range("C2:C65535")) Is _
Nothing Then Exit Sub
If Target.Column = 3 Then
With Selection.Validation
.Delete
.Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween
End With
End If
End Sub
上記の※のところなのですが,取得した変数shn(i)をリスト化したいのですが,どのように記述したらよいのか分かりませんでした。
どのようにすればよいのでしょうか?よろしくお願いします。
|
|