View Single Post
  #10   Report Post  
Posted to microsoft.public.excel.programming
Don G[_2_] Don G[_2_] is offline
external usenet poster
 
Posts: 4
Default RoundDown function not working in code

On Aug 15, 6:05*pm, Ron Rosenfeld wrote:
On Sun, 15 Aug 2010 15:25:43 -0700 (PDT), Don G
wrote:





On Aug 15, 1:44*pm, Ron Rosenfeld wrote:
On Sun, 15 Aug 2010 12:06:47 -0700 (PDT), Don G
wrote:


I'm using Excel 2003 VBA. In the immediate window I enter


? application.rounddown(-0.775,2) *and it gives the result -0.77


In the following code


'Deal with SHEETCREDIT
* *SheetCredit = CashIn - CashDue
* *'dealing with negative sheetcredit
* *If SheetCredit < 0 Then SheetCredit =
Application.RoundDown(SheetCredit, 2)
* *'display this on the form
* *SheetsForm.DriverCreditBox.Value = Format(SheetCredit, "currency")


SheetCredit is -0.775 and the result is -0.78 *Any idea why?


I cannot reproduce your results. *In the immediate window (MS VB 6.5):


?FORMAT(application.RoundDown(-0.775,2),"currency")
($0.77)


What are the actual values for CashIn and CashDue


Ron, in the immediate window I get the same results you do, which is
what I expect and want. My concern is that running from code to put
values onto a user form the result is -0.78 not what the immediate
window gives.
In my procedure the value of CashIn is 53.4 and CashDue is 54.175 both
are declared as currency.


I appreciate your thoughts on my problem, Thanks


Is SheetCredit also declared as Currency?

I'm not sure exactly where the problem lies or why the following seems
to apply. *But RoundDown is technically NOT a member of the
Application Class. *Rather it is a member of the WorksheetFunction
Class.

Now I know that worksheetfunctions frequently can be called as a
member of the application class, and that seems to work. *But
apparently not in this case.

If you call RoundDown as a member of the Worksheetfunction class, your
formula seems to work.

It also seems to work if you declare SheetCredit as Double; but I
would use the WorksheetFunction.RoundDown instead.

e.g:

====================================
Option Explicit
Sub foo()
Const CashIn As Currency = 53.4
Const CashDue As Currency = 54.175
Dim SheetCredit As Currency

'Deal with SHEETCREDIT
* * SheetCredit = CashIn - CashDue
* * 'dealing with negative sheetcredit
* * Debug.Print "SheetCredit not Rounded", SheetCredit
* * If SheetCredit < 0 Then SheetCredit =
WorksheetFunction.RoundDown(SheetCredit, 2)
* * 'display this on the form
* *' SheetsForm.DriverCreditBox.Value = Format(SheetCredit,
"currency")
* *Debug.Print "SheetCredit", SheetCredit
End Sub
==================================- Hide quoted text -

- Show quoted text -


Thanks so much Ron I really appreciate you taking on my problem and
finding the solution.

Many Thanks
Don G