Использовать несколько коллекций (или других типов) для одного и того же аргумента "с ..."? - PullRequest
0 голосов
/ 22 марта 2019

У меня есть диапазон (скажем, A1: A100).Я добавил 7 коллекций, и каждая коллекция содержит набор отдельных ячеек.

Строка смещения (0,1) из столбца «A» предопределена и может представлять собой любое трехзначное созвездие «y» и «п».Я написал аргумент, где у = 1 и п = 0.

Исходя из этого, я написал несколько операторов IF (см., Например, ниже)

If M(1) = 1 And M(2) = 1 And M(3) = 1 Then

    Count = Count + 1   ' unique
    Robust(Count) = SI_number   'unique

    With Robust(Count)               
        .Offset(1, 0) = SI_name  'unique
        .Font.ThemeColor = xlThemeColorDark1
        .HorizontalAlignment = xlLeft
        .Font.Size = 5
        .Font.Name = "xxx"
        .VerticalAlignment = xlCenter
        .HorizontalAlignment = xlCenter
    end with

' Robust and T is of type collection    

Есть ли какой-нибудь способ использовать одни и те же аргументы "с .." для нескольких диапазонов / коллекций?

У меня будет 7 разных заявлений IF.Каждый из них будет иметь определенную коллекцию (собственное имя) с отдельными ячейками, которые будут использоваться при выполнении условия.Чтобы избежать множества повторяющихся строк, я хотел бы сделать (в коде):

With collection(1-7)
    .action (same code as above)
    .action
    ..
    ..

End with

Одна идея, которая у меня была, заключалась в создании отдельного макроса, который можно вызывать из моего основного макроса так, чтобы:

With X
    .action
    .action
    ..
    ..
End with.

Где X может быть от 1 до 7. С помощью «with» или любой другой функции можно сохранить collection1, collection 2, ..., collection 7 в той же переменной (илиэквивалентный тип), поэтому в конце каждого оператора If есть X = Collection ()

Call format 'macro that formats the cell/text

Другой вопрос, как добавить, скажем, 20 отдельных ячеек в коллекцию?Код повторяется с несколькими «диапазонами collection.add (xx» .. и т. Д.

1 Ответ

0 голосов
/ 23 марта 2019

Это Sub format(), который должен делать то, что вы ожидаете, вместе с test_collection() Sub, чтобы проверить его.

Option Explicit

Sub test_collection()
    Dim c1 As Collection
    Dim c2 As Collection
    Dim i As Integer

    Set c1 = New Collection
    Set c2 = New Collection

    c1.Add Sheet1.Range("A1")
    c1.Add Sheet1.Range("A2")
    c1.Add Sheet1.Range("A3")

    c2.Add Sheet1.Range("B1")
    c2.Add Sheet1.Range("B2")
    c2.Add Sheet1.Range("B3")

    '''   adding bunch of cells using a loop
    For i = 4 To 20
        c1.Add Sheet1.Range("A" & i)
    Next i

    format c1
    format c2

End Sub

Sub format(in_coll As Collection)
    '''   input is collection and we have to cycle through each individual cell in the collection
    Dim i As Integer

    For i = 1 To in_coll.Count
        With in_coll(i)
            '.Offset(1, 0) = SI_name
            .Font.ThemeColor = xlThemeColorDark1
            .HorizontalAlignment = xlLeft
            .Font.Size = 5
            .Font.Name = "xxx"
            .VerticalAlignment = xlCenter
            .HorizontalAlignment = xlCenter
        End With
    Next i
End Sub

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

Sub test_range()
    Dim c1 As Range
    Dim c2 As Range
    Dim i As Integer

    Set c1 = Sheet1.Range("A1:A20")
    Set c2 = Sheet1.Range("B1:B3")

    format_range c1
    format_range c2

End Sub

Sub format_range(in_rng As Range)
    '''   input is range and we can update the cells in a bulk

    With in_rng
        '.Offset(1, 0) = SI_name
        .Font.ThemeColor = xlThemeColorDark1
        .HorizontalAlignment = xlLeft
        .Font.Size = 5
        .Font.Name = "xxx"
        .VerticalAlignment = xlCenter
        .HorizontalAlignment = xlCenter
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...