Проблема при выборе нескольких столбцов книги - PullRequest
0 голосов
/ 27 сентября 2019

Мой VBA прошел долгий путь с помощью этой темы:

VBA с помощью ListBox для множественного выбора всего столбца в Excel

Использование этого решения:

Dim Ws As Worksheet, Rng As Range, c As Range, Sel As Range
Dim i As Long, Xval As Variant
Set Ws = ThisWorkbook.Sheets("Sheet1")
Set Rng = Ws.Range(Ws.Cells(2, 1), Ws.Cells(2, Me.ListBox1.ListCount))

    For i = 0 To Me.ListBox1.ListCount - 1
        If Me.ListBox1.Selected(i) Then
        Xval = Me.ListBox1.List(i)
            Set c = Rng.Find(Xval, LookIn:=xlValues)
                If Not c Is Nothing Then
                    If Sel Is Nothing Then
                    Set Sel = Ws.Columns(c.Column)
                    Else
                    Set Sel = Union(Sel, Ws.Columns(c.Column))
                    End If
                End If
        End If
    Next
    If Not Sel Is Nothing Then
    Sel.Select
 End If

Так что эта работа отлично подходит для открытого одностраничного CSV-файла в Excel, как я и хотел.Проект вырос и теперь использует несколько рабочих книг с разными именами файлов и именами вкладок.

Для простоты три имени файлов: start.csv, run.csv, stop.csv.каждая из которых содержит только одну вкладку / лист ...., но может быть легко объединена в один файл и иметь 3 вкладки ..... так что это не является жестким ограничением.

Так как она вытягиваетсравнить / заголовки из строки 2 файла, чтобы заполнить список, который является заголовком столбца, каждый файл имеет одинаковый набор заголовков для каждого из 3 файлов ..... так что происходит, когда я выбираю нужный сигнал, он выделяет столбец, который совпадает во всех 3 файлах одновременно, и затем вылетает, когда выбрано 2 или более.

Что я хотел бы сделать, это выбрать ТОЛЬКО сигнал из пользовательской формы спискана активной рабочей книге / листе, который находится в фокусе, не на всех 3 файлах.

Я пробовал следующее:

'Set Ws = ThisWorkbook.Sheets("Sheet1")
'Set Ws = ThisWorkbook.Sheets(1)
Set Ws = ThisWorkbook.ActiveSheet
'Set Ws = ActiveSheet

и при обычном использовании для одного листа вариант 4 имеетработал через dev .... но это то, что вылетает при использовании нескольких рабочих книг.

Я перепробовал все 3 других варианта, но ни один из них, похоже, не решил проблему, поэтому я в растерянностикак сказать это выбрать только на активном, в фокусе, книга / лист.

Я пытался посмотреть, смогу ли я захватить имя вкладки / листа и вставить его в Ws как лист, но я получаю ошибки несоответствия.Поэтому я не могу разобраться в правильном синтаксисе, чтобы эта работа работала на нескольких листах.

Есть идеи, как мне решить эту проблему?

TY.

РЕДАКТИРОВАТЬ:

Добавление изображения на основе вопроса

Error Image and Flow Clarification

DebugStop

Это код, который вызывает список для обновления.Затем label.caption обновляется, каждый раз вызывая эту функцию для обновления списка сигналов:

Private Sub UpdateSignalListBox()

    'If Me.ChkBoxAutoUpdateSignalBox = True Then

        'Figure out how many actual columns headers there are and then search for signal names

Dim FoundColumnRangeCalculated As Variant
Dim Lastcol As Variant
Dim FoundColumnRange As Variant

        With ActiveSheet
        Lastcol = .Cells(2, .Columns.Count).End(xlToLeft).Column
        ''MsgBox Lastcol
        End With

        'Convert numerical column location to letter value to use as dynamic range header lookup

Dim NumberToColumn As Variant
Dim SearchColumn

        SearchColumn = Lastcol
        NumberToColumn = Left(Cells(1, SearchColumn).Address(1, 0), InStr(1, Cells(1, SearchColumn).Address(1, 0), "$") - 1)

        'MsgBox NumberToColumn

        'Build the actual range from found column headers
        FoundColumnRangeCalculated = "A2:" & (NumberToColumn & Lastcol)

        'Transfer headers vertically to the list box for user to see

        ListBox1.List = Application.WorksheetFunction.Transpose(Range(FoundColumnRangeCalculated))
        ListBox1.Selected(0) = True

    'End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...