2017-02-17 14 views
0

Я новичок в SO, поэтому, пожалуйста, простите любые нюансы, которые я не включаю в мой вопрос. Я пришел к вам, ребята, за помощью в кодировке, которую я пишу в Excel VBA. У меня есть ячейка, которая представляет собой сумму диапазона ячеек, которые заполняются десятичными знаками и отформатированы как проценты (например, Cell C4 = 40,00%, фактическое значение C4 = 0,4). в моем коде я имею T заявление I /, что гласит:Ошибка Excel VBA 'If Then Else'

If PC.Range("c16").Value = 1 Then 

' do a bunch of stuff ' 

Else: 

MsgBox "Percentages don't add to 100%." 

Проблема я есть порядок этого диапазона значений ячеек иногда вызывает код для входа в Else часть кода , хотя ячейка DOES = 1. Кто-нибудь видел это или может кто-нибудь помочь? Я могу предоставить другую информацию, если это необходимо, и даже при необходимости отправлю код Excel целиком.

Спасибо всем заранее, и я с нетерпением жду обучения!

Крис

+0

Это номер с плавающей запятой? Я бы попробовал 'Debug.Print TypeName (PC.Range (« c16 »). Value)', чтобы убедиться, что он не попадает к вам как двойной. – Comintern

ответ

0

Для отладки кода, попробовать что-то вроде этого:

Dim dDebug as Double 

dDebug = PC.Range("C16").Value 

msgbox dDebug ' or use Debug.Print if you have the immediate window showing 

If PC.Range("c16").Value = 1 Then 

' do a bunch of stuff ' 

Else ' Note that I have removed the colon on the else given that it is not needed. 
    MsgBox "Percentages don't add to 100%." 

Это должно показать вам именно значение, что ваш код видит. Не видя книги, с которой вы работаете, я бы сделал ставку на то, что происходит, похоже, что значение равно 1, но на самом деле оно округляется.

Если это не так, моя следующая ставка будет заключаться в том, что ПК не устанавливается должным образом, и проверяется неправильное значение.

+0

спасибо за ваше предложение, у меня на самом деле есть: Debug.Print PC.Range ("c16"). Значение, которое печатает значение ячейки, и печатается до 4 десятичных знаков в окне теста. Уловка заключается в том, что изменение значений процентов иногда устраняет проблему. –

+0

В этом случае существует вероятность какого-то округления, когда он объединяет ваши числа. Не видя своего файла, трудно определить, где и как это происходит. Вы можете попробовать «CDec (PC.Range (« C16 »). Value) = 1», чтобы гарантировать, что число остается десятичным числом во время сравнения. Код не должен округлять его, но не мешает быть уверенным. В противном случае на вашем рабочем столе происходит что-то еще. –

+0

Вау благодарит Брэндона! что, кажется, это исправлено! Это восхитительно! –