先日こちらで教えていただいたのですが、
途中でわからなくなってしまったので教えてください。
https://teratail.com/questions/257404
ユーザーフォームでリストボックスを二つ作って、
一つ目のリストには同じフォルダにあるファイル名が表示されるようになりました。
ここで、同じファイルの名前がシートの数だけ出てきてしまいます。
リストボックス1のリストが重複がないようにしたいです。
次に、リストボックス2にシート名を表示させることができません。
リストボックス1から連動するようにしたくて調べているのですがうまくいきません。
今あるシート名を.AddItemで入れてしまうと、シートの数が変わったときに対応できなくなってしまいます。
この2点について教えていただけませんでしょうか?
よろしくお願いいたします。
Private Sub UserForm_Initialize() Set一覧取得 With Me.ListBox1 .List = ThisWorkbook.Worksheets(1).Range("C1").CurrentRegion.Value .ColumnWidths = "100;0;0;0" End With End Sub Sub Set一覧取得() With ThisWorkbook.Worksheets(1).Cells(1) 'シートの初期化 .CurrentRegion.ClearContents 'ファイルのフルパス一覧の取得 Setファイルのフルパス一覧 .Cells 'シート名の一覧取得 Setシートの一覧 .CurrentRegion '作業列のクリア .EntireColumn.ClearContents End With End Sub Sub Setファイルのフルパス一覧(ByRef c As Range) Const csPath As String = "C:\Users\新しいフォルダー\" Dim ixRow As Long Dim buf As String buf = Dir(csPath & "*.xls?") Do Until Len(buf) = 0 ixRow = ixRow + 1 c(ixRow, "A").Value = csPath & buf buf = Dir() Loop End Sub Sub Setシートの一覧(ByRef rng As Range) Dim c As Range Dim wbk As Workbook Dim wsh As Worksheet Dim ixRow As Long For Each c In rng Set wbk = Workbooks.Open(c.Value) For Each wsh In wbk.Worksheets ixRow = ixRow + 1 With rng(ixRow, "B") .Offset(, 1).Value = wbk.Name .Offset(, 2).Value = wsh.Name .Offset(, 3).Value = wsh.UsedRange.Address(False, False, xlA1, True) .Value = Get表示名(.Offset(, 3).Value) End With Next wbk.Close False Next End Sub Function Get表示名(ByVal sName As String) As String Dim i As Long i = InStr(sName, "'") If i > 0 Then Get表示名 = Left(sName, i - 1) End If End Function
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/01 00:46