Невозможно установить диапазон в метод Listbox.RowSource или метод Listbox.List - PullRequest
0 голосов
/ 21 ноября 2018

Когда строка достигает lbxFoilInfoDisplay.RowSource = "tblFoilInfoHelper!A1:" & Col_Letter(TotalColumnsCount("Foil Purchases.xlsm", "List_Box")) & TotalRowsCount("Foil Purchases.xlsm", "List_Box", "tblFoilInfoHelper"), я получаю ошибку:

enter image description here

Когда я пытаюсь заменить ее на: lbxFoilInfoDisplay.List = ThisWorkbook.Worksheets("List_Box").Range("A1:" & Col_Letter(TotalColumnsCount("Foil Purchases.xlsm", "List_Box")) & TotalRowsCount("Foil Purchases.xlsm", "List_Box", "tblFoilInfoHelper")), я получаюошибка:

enter image description here

Я считаю, что имя таблицы является правильным, как показано на рисунке ниже:

enter image description here

Option Explicit
Dim filterRangeFoilProfile As Range, filteredRangeFoilProfile As Range
Private Sub cbxSupplier_AfterUpdate()
Dim Supplier_col As Long

lbxFoilInfoDisplay.RowSource = vbNullString
Supplier_col = ThisWorkbook.Worksheets("Foil Profile").ListObjects("tblFoilProfile").ListColumns("SUPPLIER").Index
filterRangeFoilProfile.AutoFilter Field:=Supplier_col, Criteria1:=cbxSupplier.Text
On Error Resume Next
Set filteredRangeFoilProfile = Intersect(filterRangeFoilProfile, filterRangeFoilProfile.Offset(1, 0)).SpecialCells(xlCellTypeVisible)
On Error GoTo 0

If Not filteredRangeFoilProfile Is Nothing Then
    ThisWorkbook.Worksheets("Foil Profile").ListObjects("tblFoilProfile").DataBodyRange.SpecialCells(xlCellTypeVisible).Copy
    ThisWorkbook.Worksheets("List_Box").Cells(2, 1).PasteSpecial
    lbxFoilInfoDisplay.RowSource = "tblFoilInfoHelper!A1:" & Col_Letter(TotalColumnsCount("Foil Purchases.xlsm", "List_Box")) & TotalRowsCount("Foil Purchases.xlsm", "List_Box", "tblFoilInfoHelper")
    'lbxFoilInfoDisplay.List = ThisWorkbook.Worksheets("List_Box").Range("A1:" & Col_Letter(TotalColumnsCount("Foil Purchases.xlsm", "List_Box")) & TotalRowsCount("Foil Purchases.xlsm", "List_Box", "tblFoilInfoHelper"))
End If

End Sub

Пользовательские функции (для добавления контекста):

1.)

Function Col_Letter(lngCol As Long) As String
    Dim vArr
    vArr = Split(Cells(1, lngCol).Address(True, False), "$")
    Col_Letter = vArr(0)
End Function

2.)

Function TotalRowsCount(WBString As String, WorksheetNameString As String, TableNameString As String) As Long

Dim Total_columns As Long
Dim i As Long

Total_columns = Workbooks(WBString).Worksheets(WorksheetNameString).ListObjects(TableNameString).ListColumns.Count

ReDim Rows_count(1 To Total_columns) As Long
For i = 1 To Total_columns
    With Workbooks(WBString).Worksheets(WorksheetNameString).ListObjects(TableNameString).ListColumns(i).Range
    Rows_count(i) = .Find(What:="*", _
        After:=.Cells(1), _
        Lookat:=xlPart, _
        LookIn:=xlFormulas, _
        SearchOrder:=xlByRows, _
        SearchDirection:=xlPrevious, _
        MatchCase:=False).Row
    End With
Next i
TotalRowsCount = WorksheetFunction.Max(Rows_count)

End Function

3.)

Function TotalColumnsCount(WBString As String, WorksheetNameString As String) As Long

Dim lastColumn As Long
lastColumn = Workbooks(WBString).Worksheets(WorksheetNameString).Cells(1, Columns.Count).End(xlToLeft).Column
TotalColumnsCount = lastColumn

End Function

1 Ответ

0 голосов
/ 21 ноября 2018

Используйте имя листа вместо имени таблицы.т.е.: "List_Box! A1:" & ...

lbxFoilInfoDisplay.RowSource = "List_Box!A1:" & Col_Letter(TotalColumnsCount("Foil Purchases.xlsm", "List_Box")) & TotalRowsCount("Foil Purchases.xlsm", "List_Box", "tblFoilInfoHelper")

Может найти какое-то применение для этого ... или нет.Вы также можете сделать это, используя таблицу, но вам все равно нужно использовать имя листа, чтобы получить адрес ячеек.т. е.

ActiveSheet.ListObjects(1).Range.Cells(3, 1).Address

Это полезно, если вам нужно сослаться на конкретные ячейки в вашей таблице и меньше заботиться о том, где эта таблица расположена.Однако это только для того, чтобы помочь вам построить адресную часть, а не заменять имя листа именем таблицы.

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