Сумма VBA возвращается 0 - PullRequest
0 голосов
/ 27 апреля 2020

Итак, я делаю макрос, который отображает прирост капитала инвестиционного портфеля с использованием переменных MV и IV. Он основан на значениях в рабочем листе ws, который основан на тексте, введенном в поле со списком cmbSummary. Каждый раз, когда я пытаюсь запустить макрос, появляется окно сообщения с 0, что не является правильным значением. Как мне решить эту проблему и сделать в окне сообщения правильное значение?

Dim portfolio As String
portfolio = Me.cmbSummary.Text

Dim ws As Worksheet
Set ws = Sheets(Me.cmbSummary.Text)

Dim lastrow As Integer
lastrow = Sheets(portfolio).Range("B" & Sheets(portfolio).Rows.Count).End(xlUp).Row

Dim MV As Long
MV = WorksheetFunction.Sum(ws.Columns("L:L"))

Dim IV As Long
IV = WorksheetFunction.Sum(ws.Columns("I:I"))

Dim CapGain As Long
CapGain = (MV - IV) / IV

MsgBox CapGain

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

Это один из тех случаев, когда неисправность заключается в процедуре тестирования. Поэтому существуют разные ответы на ваш вопрос, в зависимости от того, хотите ли вы исправить свой проект или процедуру тестирования.

  1. [Длинный тип данных] / [Длинный тип данных] возвращает результат типа Длинный данные , Поскольку результатом вашего деления является значение ниже нуля, MsgBox правильно отображает 0 в качестве результата. Чтобы исправить отображение в MsgBox, вы должны были бы умножить на 100.
  2. Когда вы выполняете те же вычисления и присваиваете результат ячейке (или выводите результат в окно отладки), VBA даст вам результат выражается в типе данных Double, то есть со всеми десятичными знаками и десятичной точкой с плавающей запятой. Отображение этого результата в ячейке будет зависеть от формата ячейки. Это может быть 0, если в ячейке отображаются только целые числа.

Поэтому нужно обратить внимание на типы данных задействованных переменных three М.В., IV и результат. Во-вторых, MsgBox - это обработчик текста. Не ожидайте, что он справится с числами лучше, чем вы заявляете, что вы сами. Если вы не обращаете внимания, MsgBox, скорее всего, «подумает», что вам все равно.

0 голосов
/ 27 апреля 2020

Изменить тип переменной на Двойной

Dim CapGain As Long

на

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