Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
Solved

# Listbox Value Not Registering for Calculation

Posted on 2013-05-13
Medium Priority
361 Views
I am trying to build a mortgage calculator application with VB and I have list box to select the number of years, but it does not seem to be actually factoring into the solution.
This is the code:
``````Private Sub calcbutton_Click(sender As System.Object, e As System.EventArgs) Handles calcbutton.Click
'The car price should appear in terms of dollars and cents.
Dim carprice As Double
'The APR needs two percentage points
Dim interestrate As Double
'Money down should be dollars and cents
Dim moneydown As Double
'Dim loan term As Double
Dim loanterm As Double
'Dim Payment as Double
Dim payment As Double
Dim monthlyinterest As Double
Dim months As Double
Dim loanamount As Double

'Declare where the values are coming from
carprice = Val(Carpricetext.Text)
interestrate = Val(IRTextbox.Text)
moneydown = Val(Dwnpymnttext.Text)
loanterm = Val(LnTrmList.SelectedValue)
loanamount = (carprice - moneydown)

Do While loanterm <= 5
monthlyinterest = (interestrate / 100) / 12
months = 12 * loanterm

'calculate payments - rate * month = monthly payments
payment = _
Pmt(monthlyinterest, months, -loanamount)

'displays results
paymenttxt.Text = payment

Loop
End Sub
``````
loanterm = Val(LnTrmList.SelectedValue) should tell me the value that is selected, but that part of the equation is just coming up zero.  Any ideas on what I did wrong?
0
Question by:aclaus225
[X]
###### Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points
• 7
• 6
• 4

LVL 10

Expert Comment

ID: 39162126
Shouldn't LnTrmList.SelectedValue be LnTrmList.SelectedItem.Value?

I'm not in front of a box with VB on it, but I think that's where you're slightly awry.

Use your trace environment and watches to keep an eye on LnTrnList.SelectedItem.Value to check, or use a MsgBox to display the value...
0

Author Comment

ID: 39162166
MsgBox after the calculation showed that Months was registering as 0.
0

LVL 86

Accepted Solution

Mike Tomlinson earned 1000 total points
ID: 39162185
You should be using SelectedItem(), not SelectedValue().  Also, you don't need the loop:
``````        'Declare where the values are coming from
carprice = Val(Carpricetext.Text)
interestrate = Val(IRTextbox.Text)
moneydown = Val(Dwnpymnttext.Text)
loanterm = Val(LnTrmList.SelectedItem)

loanamount = (carprice - moneydown)
monthlyinterest = (interestrate / 100) / 12
months = 12 * loanterm

'calculate payments - rate * month = monthly payments
payment = Pmt(monthlyinterest, months, -loanamount)

'displays results
paymenttxt.Text = payment
``````
0

Author Comment

ID: 39162237
This is what I have:
``````        'The car price should appear in terms of dollars and cents.
Dim carprice As Double
'The APR needs two percentage points
Dim interestrate As Double
'Money down should be dollars and cents
Dim moneydown As Double
'Dim loan term As Double
Dim loanterm As Double
'Dim Payment as Double
Dim payment As Double
Dim monthlyinterest As Double
Dim months As Double
Dim loanamount As Double

'Declare where the values are coming from
carprice = Val(Carpricetext.Text)
interestrate = Val(IRTextbox.Text)
moneydown = Val(Dwnpymnttext.Text)
loanterm = Val(LnTrmList.SelectedItem)

loanamount = (carprice - moneydown)
monthlyinterest = (interestrate / 100) / 12
months = 12 * loanterm

'calculate payments - rate * month = monthly payments
payment = Pmt(monthlyinterest, months, -loanamount)

'displays results
paymenttxt.Text = payment
End Sub
``````

And it still does not seem to do the calculation.
It will not do the payment = line as "Argument 'NPer' is not a valid value."
0

LVL 86

Expert Comment

ID: 39162246
What kind of values do you have in your ListBox?  I put in years, such as: 3, 4, 5 ,6 , 7, etc...
0

Author Comment

ID: 39162261
The values in the listbox are:
1
2
3
4
5
0

LVL 10

Expert Comment

ID: 39162265
NPer is the number of months in the PMT calculation.

If your number of months is still showing as "0" then your calculation won't work.

I get the error "Argument 'NPer' is not a valid value." if I do this calculation:

Payment = Pmt(0.25, 0, 2000)

are you using SelectedItem or SelectedItem.value?  Does it make a difference?
0

LVL 86

Expert Comment

ID: 39162290
After the changes, it worked perfectly for me.  =\

You could also make sure there is an item selected in the ListBox:

If LnTrmList.SelectedIndex <> -1 Then
loanterm = Val(LnTrmList.SelectedItem)

loanamount = (carprice - moneydown)
monthlyinterest = (interestrate / 100) / 12
months = 12 * loanterm

Debug.Print("loanterm = " & loanterm)
Debug.Print("months = " & months)

'calculate payments - rate * month = monthly payments
payment = Pmt(monthlyinterest, months, -loanamount)

'displays results
paymenttxt.Text = payment
Else
End If

With the Debug.Prints() in there, what do you get in the Immediate window?
0

Author Comment

ID: 39162321
Predictably, I get: Please Select a Term.  I have no other code on this form.

Option Strict On

Public Class childform

Private Sub calcbutton_Click(sender As System.Object, e As System.EventArgs) Handles calcbutton.Click
'The car price should appear in terms of dollars and cents.
Dim carprice As Double
'The APR needs two percentage points
Dim interestrate As Double
'Money down should be dollars and cents
Dim moneydown As Double
'Dim loan term As Double
Dim loanterm As Double
'Dim Payment as Double
Dim payment As Double
Dim monthlyinterest As Double
Dim months As Double
Dim loanamount As Double

'Declare where the values are coming from
carprice = Val(Carpricetext.Text)
interestrate = Val(IRTextbox.Text)
moneydown = Val(Dwnpymnttext.Text)
loanterm = CDbl(LnTrmList.SelectedItem)

If LnTrmList.SelectedIndex <> -1 Then
loanterm = Val(LnTrmList.SelectedItem)

loanamount = (carprice - moneydown)
monthlyinterest = (interestrate / 100) / 12
months = 12 * loanterm

Debug.Print("loanterm = " & loanterm)
Debug.Print("months = " & months)

'calculate payments - rate * month = monthly payments
payment = Pmt(monthlyinterest, months, -loanamount)

'displays results
paymenttxt.Text = CStr(payment)
Else
End If

End Sub

End Class
0

LVL 10

Expert Comment

ID: 39162322
I'm now in front of a VB machine as well.

I've recreated the problem quite simply (not bothered naming my textboxes etc).

And this works!

``````Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Payment As Double
Dim loanamount As Double = (Val(TextBox1.Text) - Val(TextBox3.Text))
Dim monthlyinterest As Double = (Val(TextBox2.Text) / 100) / 12
Dim loanterm = Val(ListBox1.SelectedItem)
Dim months = 12 * loanterm

'calculate payments - rate * month = monthly payments
Payment = Pmt(monthlyinterest, months, -loanamount)

'displays results
TextBox4.Text = Payment

End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End Sub
``````
0

LVL 10

Assisted Solution

CSIPComputing earned 1000 total points
ID: 39162363
If you're getting a "Please select a term", something is wrong with your listbox (you knew this though!).

Does your form look like this?
0

Author Comment

ID: 39162407
CSIP,

The only difference between your form and mine is that the listbox is shrunken to only show one value at a time with an arrow.
0

Author Comment

ID: 39162409
Wow, I hate to admit it, but my mistake with this was simply that I did not select the number (highlight).
0

LVL 10

Expert Comment

ID: 39162414
Is your list box set to allow multiple selections?

If so, you need to read the selected values in a different way.

I'll set my box like that and see if it makes a difference.
0

LVL 10

Expert Comment

ID: 39162420
Doh!

Glad you got to the bottom of it!
0

LVL 10

Expert Comment

ID: 39162430
Fair split.  I'm happy :-)
0

LVL 86

Expert Comment

ID: 39162524
Hehe!...did you by chance stay up all night?

Drink some coffee bud.   ;)
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

The debugging module of the VB 6 IDE can be accessed by way of the Debug menu item. That menu item can normally be found in the IDE's main menu line as shown in this picture. Â  There is also a companion Debug Toolbar that looks like the followinâ€¦
You can of course define an array to hold data that is of a particular type like an array of Strings to hold customer names or an array of Doubles to hold customer sales, but what do you do if you want to coordinate that data? This article describesâ€¦
As developers, we are not limited to the functions provided by the VBA language. In addition, we can call the functions that are part of the Windows operating system. These functions are part of the Windows API (Application Programming Interface). Uâ€¦
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that aâ€¦
###### Suggested Courses
Course of the Month10 days, 13 hours left to enroll