Сделайте переменную из COUNTA в столбце таблицы - PullRequest
1 голос
/ 11 июля 2019

Я хочу выполнить следующее: 'Подсчитать все непустые ячейки в столбце 1 таблицы на активном листе. Сохранить это количество ячеек как переменную «TransQty». «Если количество равно 0, сообщение« Нет проектов на этой вкладке помечены для перехода ». «Если число больше 0, да / нет сообщение« Проекты TransQty будут перенесены с этой вкладки. Хотите продолжить? » «Если« нет », конец. «Если« да », перейдите к остальной части кода.

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

Sub Transition_from_Queue()

Dim TransRange As Range
Dim TransQty As Integer

Set TransRange = Worksheets("Project Queue").DateBodyRange("TableQueue[Transition]")

For Each TransRange In Selection
    If Application.WorksheetFunction.CountA(TransRange) Then
        TransQty = TransQty + 1
    End If
Next TransRange

If TransQty = 0 Then
    MsgBox "No projects on this tab are marked for transition."
        Else
        If TransQty > 0 Then
            MsgBox Range("TransQty") & "projects will be transitioned from this tab." & vbNewLine & "Would you like to continue?"
        End If
End If

Я обнаружил несколько проблем после попытки кода несколькими разными способами. 1) Я неправильно определяю столбец таблицы и не могу понять, что я делаю неправильно. Я хочу использовать заголовок столбца, а не положение столбца. 2) Независимо от того, есть ли у меня текст в 0 или 100 ячейках целевого столбца, я получаю сообщение для TransQty = 0.

1 Ответ

0 голосов
/ 11 июля 2019

Ваш код довольно близок к тому, что вам нужно.В моем примере ниже есть два основных момента.Первый - назначить столбцу таблицы прямо значение Range.Второй момент - как проверить ячейку, чтобы увидеть, пуста ли она.Использование COUNTA хорошо для подсчета количества ячеек во всем диапазоне, которые пусты, но не работают (как я думаю) - причина вашего цикла.

Option Explicit

Sub test()
    Dim thisSheet As Worksheet
    Set thisSheet = ActiveSheet

    '--- this is not really needed, but shows how to get a variable
    '    for the whole table
    Dim thisTable As ListObject
    Set thisTable = thisSheet.ListObjects("TableQueue")

    Dim transitionData As Range
    Set transitionData = thisSheet.Range("TableQueue[Transition]")

    '--- this gets you how many non-blank cells in the range
    Dim transQty As Long
    transQty = WorksheetFunction.CountA(transitionData)

    '--- BONUS CODE!!!!  totals up the non-blank data in the range
    '    (though not asked for by OP)
    Dim data As Range
    Dim transitionQty As Double
    For Each data In transitionData
        If Not IsEmpty(data.Value) Then
            transitionQty = transitionQty + data.Value
        End If
    Next data

End Sub
...