Установка строкового значения myTerm на основе различных комбинаций содержимого ячейки - PullRequest
0 голосов
/ 22 ноября 2018

Можно ли установить значение myTerm, используя серию операторов If?

У меня есть 3 столбца на листе, в которые будут добавляться данные в течение года.

У меня есть следующие сценарии:

K имеет данные и M & O = "Осень"K и M имеют данные, а O пусто = "Весна"К, М и О все имеют данные = Лето

Я написал следующее (фрагмент полного кода):

Sub FilterProgressData()

    Dim myTerm As String

    If SrcWs.Cells(i, "O").Value = "" And SrcWs.Cells(i, "M").Value = "" And _
        SrcWs.Cells(i, "K").Value <> "" Then
            myTerm = "Autumn"

    ElseIf SrcWs.Cells(i, "O").Value = "" And SrcWs.Cells(i, "M").Value <> "" _
        And SrcWs.Cells(i, "K").Value <> "" Then
            myTerm = "Spring"

    ElseIf SrcWs.Cells(i, "O").Value <> "" And SrcWs.Cells(i, "M").Value <> "" _
        And SrcWs.Cells(i, "K").Value <> "" Then
            myTerm = "Summer"

, но получил 'Ошибка времени выполнения' 1004 'ошибка - ошибка приложения или объекта '

Любые советы будут с благодарностью приняты!

Спасибо.

Ответы [ 2 ]

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

Пара проблем, которые я мог видеть в вашем фрагменте:

  • SrcWs не объявлен / не создан нигде в вашем фрагменте.
  • i не назначен.Если он неявно преобразуется в 0 (при использовании Cells()), то вы пытаетесь получить доступ к нулевой строке таблицы (которая не существует и выдаст ошибку).

Допустим, вы хотите присвоить значение myTerm на основе значений в столбцах K, M, O и строках от 1 до 100 (например, ради).Затем вы можете попробовать что-то вроде следующего:

Option Explicit

Sub ConditionallyAssignMyTerm()
    Dim SrcWs As Worksheet
    Set SrcWs = ThisWorkbook.Worksheets("Sheet1")

    Dim i As Long ' Might be better to rename this to rowIndex or something more descriptive than just i

    With SrcWs
        Dim myTerm As String

        Dim columnKisBlank As Boolean
        Dim columnMisBlank As Boolean
        Dim columnOisBlank As Boolean

        For i = 1 To 100 ' Arbitrary loop values
            columnKisBlank = CellIsBlank(.Cells(i, "K"))
            columnMisBlank = CellIsBlank(.Cells(i, "M"))
            columnOisBlank = CellIsBlank(.Cells(i, "O"))

            If (Not columnKisBlank) And columnMisBlank And columnOisBlank Then
                myTerm = "Autumn"

            ElseIf (Not columnKisBlank) And (Not columnMisBlank) And columnOisBlank Then
                myTerm = "Spring"

            ElseIf (Not columnKisBlank) And (Not columnMisBlank) And (Not columnOisBlank) Then
                myTerm = "Summer"
            End If
        Next i

    End With
End Sub

Function CellIsBlank(ByRef cellToCheck As Range) As Boolean
    CellIsBlank = VBA.IsEmpty(cellToCheck.Value2) Or (Len(cellToCheck.Value2) = 0)
End Function
0 голосов
/ 22 ноября 2018

Это отлично работает.Я не вижу проблемы с вашим утверждением if.

Option Explicit

Sub FilterProgressData()
Dim myTerm As String
Dim i As Integer
Dim SrcWs As Worksheet
Set SrcWs = Worksheets("Sheet1")

i = 1

    If SrcWs.Cells(i, "O").Value = "" And SrcWs.Cells(i, "M").Value = "" And _
        SrcWs.Cells(i, "K").Value <> "" Then
            myTerm = "Autumn"

    ElseIf SrcWs.Cells(i, "O").Value = "" And SrcWs.Cells(i, "M").Value <> "" _
        And SrcWs.Cells(i, "K").Value <> "" Then
            myTerm = "Spring"

    ElseIf SrcWs.Cells(i, "O").Value <> "" And SrcWs.Cells(i, "M").Value <> "" _
        And SrcWs.Cells(i, "K").Value <> "" Then
            myTerm = "Summer"

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