WorksheetFunction.Sum은 숫자에 대해 0을 반환합니다.

에반

여러분의 코드를 정리하세요. 많은 통곡과이를 갈고 난 후에, 문제는 내가 .Sum 논쟁에 넣은 여분의 괄호로 밝혀졌습니다. @BigBen과 @JvdV에 감사드립니다.

문제 : Worksheetfunction.Sum은 동적 범위에 대해 0의 합계를 반환하지만 rows.count> 1 대해서만 통화 형식의 참조 데이터에 대해서만 반환 됩니다.

추가 세부 정보 : 참조 통합 문서를 스크랩하고 사용자 입력에 따라 4 개의 서로 다른 텍스트 상자에 서로 다른 번호를 반환하도록 설정된 사용자 양식이 있습니다. 경우에 따라 숫자는 참조 통합 문서에있는 여러 행의 합계 여야합니다. 아래 코드를 사용하면 행 수가 1 인 한 모든 반환 텍스트 상자에 대해 꿈처럼 작동하지만 다른 항목에 대해서는 0 (또는 $ 0.00)을 반환합니다. 그러나 정수인 하나의 합계에 대해 모든 상황에서 잘 작동합니다. 나머지는 통화 형식입니다.

내가 한 일 : MsgBoxes를 사용하여 동적 범위가 올바른 주소, 즉 합계를 원하는 모든 셀을 반환하고 해당 주소의 숫자가 텍스트가 아니라 실제로 숫자인지 확인했습니다 (IsNumber에 대한 True 반환으로 확인 됨). . .Subtotal 및 .Aggregate를 사용하여 도움이 될 수 있는지 확인했지만 누락 된 개체 및 기타 오류가 발생하여 VBA를 처음 사용했기 때문에 엉뚱한 소리를 냈습니다.

코드:

내 기본 논리는 다음과 같습니다. textbox.value에 대한 모든 참조 (csrWorkbook) 시트에서 검색합니다. 발견되면 병합 된 영역의 높이를 측정합니다 (내가 알고 있지만 병합 결정은 내 급여보다 높음). 4 개의 다른 관련 수량을 찾으려면 오른쪽으로 오프셋하십시오. 여러 행이있는 경우이 수량을 합산하십시오. 합계를 4 개의 다른 텍스트 상자로 반환합니다.

도움!

    Private Sub ScrapeButton_Click()

    'Enter search term into first TB
    'click search button
    'result DOES(!!) appear in second TB

    'Variables
    Dim csrWorkbook As Workbook
    Dim refWorkbook As Workbook
    Dim refVariables As Worksheet
    Dim csrFilePath As String
    Dim csrFileName As String
    Dim slinAddress As String
    Dim ws As Worksheet
    Dim sheetCount As Long
    Dim rowCount As Long
    Dim slinCell As Excel.Range
    Dim quantCells As Excel.Range
    Dim costCells As Excel.Range
    Dim feeCells As Excel.Range
    Dim totalCells As Excel.Range
    Dim i As Integer
    Dim iCost As Double
    Dim iFee As Double
    Dim iTotal As Double


    Set refWorkbook = Workbooks("AutomationBackbone.xlsm")
    csrFileName = refWorkbook.Sheets("Variable Storage").Range("A2").Value
    Set csrWorkbook = Workbooks(csrFileName)

    sheetCount = csrWorkbook.Sheets.Count

    'search all worksheets for data in a known column
    For i = 1 To sheetCount
        Set slinCell = csrWorkbook.Sheets(i).Range("C1:C100").find(Me.TextBox1.Value)
            If Not slinCell Is Nothing Then

                'Find sums and populate
                rowCount = slinCell.MergeArea.Rows.Count 'count the number of rows in merged area
                Set quantCells = slinCell.Offset(0, 2).Resize(rowCount, 1) 'establish a new range of that same height
                Set costCells = quantCells.Offset(0, 6)
                Set feeCells = quantCells.Offset(0, 7)
                Set totalCells = quantCells.Offset(0, 8)

                Me.iQuantityTB.Value = Application.WorksheetFunction.Sum((quantCells)) 'populate the Initial Quantity
                iCost = Application.WorksheetFunction.Sum((costCells)) 'find sum of Cost range
                iFee = Application.WorksheetFunction.Sum((feeCells)) 'find sum of Fee range
                iTotal = Application.WorksheetFunction.Sum((totalCells)) 'find sum of Total range

                Me.iCostTB.Value = iCost 'populate textboxes
                Me.iFeeTB.Value = iFee
                Me.iTotalTB.Value = iTotal

'original code commented out to see if being more explicit helped.
     'Narrator: it didn't
                'Me.iCostTB.Value = Application.WorksheetFunction.Sum((quantCells.Offset(0, 6))) 'populate the Initial Cost
                'Me.iFeeTB.Value = Application.WorksheetFunction.Sum((quantCells.Offset(0, 7))) 'populate the Initial Fee
                'Me.iTotalTB.Value = Application.WorksheetFunction.Sum((quantCells.Offset(0, 8))) 'populate the Initial Total

                Exit Sub
            End If
        Next i
    End Sub

편집 : 명확성을 위해 사진이 추가되었습니다.

이것은 텍스트 상자를 채우기 위해 가져오고 합계하려는 데이터의 형식과 비슷합니다.

빅 벤

괄호가 다시 표시됩니다!


여분의 괄호를 포함하면 내부 표현식이 평가 되고 결과가 전달됩니다 Sum.

그래서

Application.WorksheetFunction.Sum((costCells))

다음과 같다

Application.WorksheetFunction.Sum(costCells.Value)

기본 데이터가 인 경우 0을 반환합니다 Currency.

Sum여기 에서 s 동작에 대한 재현 가능한 작은 예로서 (내가 예상 한 것과는 다릅니다) :

Dim x(0 To 1) As Currency
x(0) = 1
x(1) = 2

Debug.Print Application.Sum(x) '<~ returns zero.

참고 .Value2않습니다 하지 사용 Currency데이터 유형 및 라인

Application.WorksheetFunction.Sum(costCells.Value2)

기본 값에 관계없이 올바른 결과를 반환합니다.

유사한 동작이 여기 에 언급되고 설명 되었습니다 .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Bash 형식은 HM에 대해 0을 반환합니다.

분류에서Dev

Double.ToString은 0에 대해 빈 값을 반환합니다.

분류에서Dev

MySQL은 null 응답에 대해 0을 반환합니다.

분류에서Dev

순환 계승 함수 프로그램은 C에서 큰 숫자 입력에 대해 0을 반환합니다.

분류에서Dev

MySQL은 때때로 count (*)에 대해 0을 잘못 반환합니다.

분류에서Dev

숫자를 반복하는 .BAT 파일-10보다 작은 숫자에 0을 더해야합니다.

분류에서Dev

JavaScript : 문자열 / 숫자를 숫자 또는 null로 변환하고 0에 대해 0을 반환합니까?

분류에서Dev

getChildAt (0)은 ListView에 대해 무엇을 반환합니까?

분류에서Dev

PFTwitterUtils logInWithBlock은 항상 userId에 대해 nil을 반환합니다.

분류에서Dev

FindControl은 RadEditor에 대해 null을 반환합니다.

분류에서Dev

쿼리는 각 행에 대해 가장 높은 숫자를 반환합니다.

분류에서Dev

Python 2.7 : 특정 자릿수에 대해 가능한 모든 숫자 0-9 조합을 반환하는 방법은 무엇입니까?

분류에서Dev

sagemath는 부정적분에 대해 0을 반환합니다.

분류에서Dev

math.exp ()는 float에 대해 0을 반환합니다.

분류에서Dev

parseFloat는 -2.00에 대해 0-2.00을 반환합니다.

분류에서Dev

PHP IntlDateFormatter :: format은 시간대에 대해 빈 값을 반환합니다.

분류에서Dev

SQL은 지난주의 각 요일에 생성 된 레코드 수에 대해 0을 반환합니다.

분류에서Dev

Arduino 정수 배열은 항상 인덱스 0에 대해 3 값을 반환합니다.

분류에서Dev

CGColorComponents는 UIColor whiteColor에 대해 검정 (0, 0, 0)을 반환합니다.

분류에서Dev

Laravel 부울은 쿼리에서 true / false 대신 "1"/ "0"을 반환합니다.

분류에서Dev

PHAsset은 PHImageManager를 사용할 때 UIImage에 대해 nil 값을 반환합니다.

분류에서Dev

Laravel은 모델의 기존 값에 대해 null을 반환합니다.

분류에서Dev

glGetUniformLocation은 GLSL의 구조체 배열에 대해 -1을 반환합니다.

분류에서Dev

C ++ GetCurrentThemeName은 클래식 Windows 테마에 대해 빈 값을 반환합니다.

분류에서Dev

ParseObject getString ()은 포인터 열에 대해 null을 반환합니다.

분류에서Dev

ParseObject getString ()은 포인터 열에 대해 null을 반환합니다.

분류에서Dev

C # : Type.GetType은 System.Collections.Generic.Stack에 대해 null을 반환합니다.

분류에서Dev

Facebook Graph API는 항상 CARE 반응에 대해 0을 반환합니다.

분류에서Dev

poll ()은 macOS에서 256 개 이상의 설명자에 대해 EINVAL을 반환합니다.

Related 관련 기사

  1. 1

    Bash 형식은 HM에 대해 0을 반환합니다.

  2. 2

    Double.ToString은 0에 대해 빈 값을 반환합니다.

  3. 3

    MySQL은 null 응답에 대해 0을 반환합니다.

  4. 4

    순환 계승 함수 프로그램은 C에서 큰 숫자 입력에 대해 0을 반환합니다.

  5. 5

    MySQL은 때때로 count (*)에 대해 0을 잘못 반환합니다.

  6. 6

    숫자를 반복하는 .BAT 파일-10보다 작은 숫자에 0을 더해야합니다.

  7. 7

    JavaScript : 문자열 / 숫자를 숫자 또는 null로 변환하고 0에 대해 0을 반환합니까?

  8. 8

    getChildAt (0)은 ListView에 대해 무엇을 반환합니까?

  9. 9

    PFTwitterUtils logInWithBlock은 항상 userId에 대해 nil을 반환합니다.

  10. 10

    FindControl은 RadEditor에 대해 null을 반환합니다.

  11. 11

    쿼리는 각 행에 대해 가장 높은 숫자를 반환합니다.

  12. 12

    Python 2.7 : 특정 자릿수에 대해 가능한 모든 숫자 0-9 조합을 반환하는 방법은 무엇입니까?

  13. 13

    sagemath는 부정적분에 대해 0을 반환합니다.

  14. 14

    math.exp ()는 float에 대해 0을 반환합니다.

  15. 15

    parseFloat는 -2.00에 대해 0-2.00을 반환합니다.

  16. 16

    PHP IntlDateFormatter :: format은 시간대에 대해 빈 값을 반환합니다.

  17. 17

    SQL은 지난주의 각 요일에 생성 된 레코드 수에 대해 0을 반환합니다.

  18. 18

    Arduino 정수 배열은 항상 인덱스 0에 대해 3 값을 반환합니다.

  19. 19

    CGColorComponents는 UIColor whiteColor에 대해 검정 (0, 0, 0)을 반환합니다.

  20. 20

    Laravel 부울은 쿼리에서 true / false 대신 "1"/ "0"을 반환합니다.

  21. 21

    PHAsset은 PHImageManager를 사용할 때 UIImage에 대해 nil 값을 반환합니다.

  22. 22

    Laravel은 모델의 기존 값에 대해 null을 반환합니다.

  23. 23

    glGetUniformLocation은 GLSL의 구조체 배열에 대해 -1을 반환합니다.

  24. 24

    C ++ GetCurrentThemeName은 클래식 Windows 테마에 대해 빈 값을 반환합니다.

  25. 25

    ParseObject getString ()은 포인터 열에 대해 null을 반환합니다.

  26. 26

    ParseObject getString ()은 포인터 열에 대해 null을 반환합니다.

  27. 27

    C # : Type.GetType은 System.Collections.Generic.Stack에 대해 null을 반환합니다.

  28. 28

    Facebook Graph API는 항상 CARE 반응에 대해 0을 반환합니다.

  29. 29

    poll ()은 macOS에서 256 개 이상의 설명자에 대해 EINVAL을 반환합니다.

뜨겁다태그

보관