Mam Userform z kilkoma tekstami i przyciskiem polecenia. Po wprowadzeniu i przesłane informacje są przekazywane do pierwszego pustego wiersza.

Potrzebuję kodu, który byłby tekst counta() w ciągu 4 kolumn w tym wierszu. Tak przetłumacz =IF(IsBlank($A2),"",COUNTA(E2:H2) do kodu VBA, aby obliczyć po złożeniu użytkownika informacji.

0
Novato 23 luty 2019, 19:37

2 odpowiedzi

Najlepsza odpowiedź

enter image description here

Option Explicit

Sub test()
    Debug.Print "Var 1 : "; CountRangeIf("not(A3="""")", Range("E3:H3"))

    Dim testCriteria As Boolean
    testCriteria = Not (Range("A3").Value = "")
    Debug.Print "Var 2 : "; CountRangeIf_Var2(testCriteria, Range("E3:H3"))
End Sub

Public Function CountRangeIf(IfCriteriaString As String, CountRange As Range) As Variant
    Dim resultCriteria As Boolean
    CountRangeIf = ""           ' Result = "" if Criteria is false
    resultCriteria = Evaluate(IfCriteriaString)
    With Application.WorksheetFunction
        If resultCriteria Then
            CountRangeIf = .CountA(CountRange)
        End If
    End With
End Function

Public Function CountRangeIf_Var2(IfCriteria As Boolean, CountRange As Range) As Variant
    CountRangeIf_Var2 = ""           ' Result = "" if Criteria is false
    With Application.WorksheetFunction
        If IfCriteria Then
            CountRangeIf_Var2 = .CountA(CountRange)
        End If
    End With
End Function
0
simple-solution 23 luty 2019, 17:19

Zakładając, że używamy arkusza1 i zakładając, że Twój wiersz # jest już przechowywany w zmiennej Thenownum

Następujące powinno być blisko tego, o co prosiłeś

    If Trim(CStr(Sheets("Sheet1").Range("A" & ThisRowNum).Value)) = "" then
       xCtr = 0  ' Your formula used a null string - you can fix this
    else
       xCtr = WorksheetFunction.CountA(Sheets("Sheet1").Range("E" & ThisRowNum &":H" & ThisRowNum))
    endif

Zmienna XCTR jest wynikiem

0
Tin Bum 23 luty 2019, 17:11