Home |
Search |
Today's Posts |
#1
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
I tried to use the ISNumber() function within VBA but it is not usable.
2 Questions: 1. How can I know which functions can be used in VBA and which can not? 2. How do I determine if the value of a cell is a number? I don't want to enter a formula in a cell and then test the value of that cell, I just want to do it in the code if possible. Thanks... |
#2
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]() In Excel 2002 vba help look for: "List of Worksheet Functions Available to Visual Basic" The name of the help file changes somewhat in each xl version. You didn't specify what version you are using. -- Try: IsNumeric -- Jim Cone San Francisco, USA http://www.realezsites.com/bus/primitivesoftware (Excel Add-ins / Excel Programming) "Mike H." wrote in message I tried to use the ISNumber() function within VBA but it is not usable. 2 Questions: 1. How can I know which functions can be used in VBA and which can not? 2. How do I determine if the value of a cell is a number? I don't want to enter a formula in a cell and then test the value of that cell, I just want to do it in the code if possible. Thanks... |
#3
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Worked for me
MsgBox Application.IsNumber(1) but why bother when you have IsNumeric in VBA? -- HTH Bob (there's no email, no snail mail, but somewhere should be gmail in my addy) "Mike H." wrote in message ... I tried to use the ISNumber() function within VBA but it is not usable. 2 Questions: 1. How can I know which functions can be used in VBA and which can not? 2. How do I determine if the value of a cell is a number? I don't want to enter a formula in a cell and then test the value of that cell, I just want to do it in the code if possible. Thanks... |
#4
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
IsNumeric actually works slightly differently, which may be useful
Dim myVar myVar = "1" MsgBox Application.IsNumber(myVar) MsgBox IsNumeric(myVar) -- HTH Bob (there's no email, no snail mail, but somewhere should be gmail in my addy) "Mike H." wrote in message ... I tried to use the ISNumber() function within VBA but it is not usable. 2 Questions: 1. How can I know which functions can be used in VBA and which can not? 2. How do I determine if the value of a cell is a number? I don't want to enter a formula in a cell and then test the value of that cell, I just want to do it in the code if possible. Thanks... |
#5
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Isnumeric works just fine, but strangely enough, isnumber() is in the help
list you referred to as being available in VBA. So now I don't know if I can trust the list or not??? BTW, I am using Excel 2003. |
#6
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
I tried this, which didn't work:
If IsNumber(ActiveCell.Value) = True Then MsgBox ("It is true") Else MsgBox ("It is false") End If But your method definitely works. Thanks. |
#7
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
IsNumeric actually works slightly differently, which may be useful
Dim myVar myVar = "1" MsgBox Application.IsNumber(myVar) MsgBox IsNumeric(myVar) The bulk of my VB experience is with the compiled version, so the usage expectations may be different between that group and the Excel VBA user community; but, over in the compiled group, IsNumeric is usually used to "proof" a TextBox entry from a user to make sure an entered number is either digits only or digits coupled with a single decimal point. Other valid number formations usually screw up the remainder of the code manipulations. For example, if a user is looking for a 3-digit number, and entry of 1e9 does him/her no good. Because of the way compiled VB users expect IsNumeric to work, and because it doesn't work that way, I repeatedly post the following message in reply to suggestions to use IsNumeric. I offer it here to the Excel community **in case** is should apply to a user's particular situation. Rick From a previous post of mine (to the **compiled** VB newsgroups in case that should matter)... I usually try and steer people away from using IsNumeric to "proof" supposedly numeric text. Consider this (also see note below): ReturnValue = IsNumeric("($1,23,,3.4,,,5,,E67$)") Most people would not expect THAT to return True. IsNumeric has some "flaws" in what it considers a proper number and what most programmers are looking for. I had a short tip published by Pinnacle Publishing in their Visual Basic Developer magazine that covered some of these flaws. Originally, the tip was free to view but is now viewable only by subscribers.. Basically, it said that IsNumeric returned True for things like -- currency symbols being located in front or in back of the number as shown in my example (also applies to plus, minus and blanks too); numbers surrounded by parentheses as shown in my example (some people use these to mark negative numbers); numbers containing any number of commas before a decimal point as shown in my example; numbers in scientific notation (a number followed by an upper or lower case "D" or "E", followed by a number equal to or less than 305 -- the maximum power of 10 in VB); and Octal/Hexadecimal numbers (&H for Hexadecimal, &O or just & in front of the number for Octal). NOTE: ====== In the above example and in the referenced tip, I refer to $ signs and commas and dots -- these were meant to refer to your currency, thousands separator and decimal point symbols as defined in your local settings -- substitute your local regional symbols for these if appropriate. As for your question about checking numbers, here are two functions that I have posted in the past for similar questions..... one is for digits only and the other is for "regular" numbers: Function IsDigitsOnly(Value As String) As Boolean IsDigitsOnly = Len(Value) 0 And _ Not Value Like "*[!0-9]*" End Function Function IsNumber(ByVal Value As String) As Boolean ' Leave the next statement out if you don't ' want to provide for plus/minus signs If Value Like "[+-]*" Then Value = Mid$(Value, 2) IsNumber = Not Value Like "*[!0-9.]*" And _ Not Value Like "*.*.*" And _ Len(Value) 0 And Value < "." And _ Value < vbNullString End Function Here are revisions to the above functions that deal with the local settings for decimal points (and thousand's separators) that are different than used in the US (this code works in the US too, of course). Function IsNumber(ByVal Value As String) As Boolean Dim DP As String ' Get local setting for decimal point DP = Format$(0, ".") ' Leave the next statement out if you don't ' want to provide for plus/minus signs If Value Like "[+-]*" Then Value = Mid$(Value, 2) IsNumber = Not Value Like "*[!0-9" & DP & "]*" And _ Not Value Like "*" & DP & "*" & DP & "*" And _ Len(Value) 0 And Value < DP And _ Value < vbNullString End Function I'm not as concerned by the rejection of entries that include one or more thousand's separators, but we can handle this if we don't insist on the thousand's separator being located in the correct positions (in other words, we'll allow the user to include them for their own purposes... we'll just tolerate their presence). Function IsNumber(ByVal Value As String) As Boolean Dim DP As String Dim TS As String ' Get local setting for decimal point DP = Format$(0, ".") ' Get local setting for thousand's separator ' and eliminate them. Remove the next two lines ' if you don't want your users being able to ' type in the thousands separator at all. TS = Mid$(Format$(1000, "#,###"), 2, 1) Value = Replace$(Value, TS, "") ' Leave the next statement out if you don't ' want to provide for plus/minus signs If Value Like "[+-]*" Then Value = Mid$(Value, 2) IsNumber = Not Value Like "*[!0-9" & DP & "]*" And _ Not Value Like "*" & DP & "*" & DP & "*" And _ Len(Value) 0 And Value < DP And _ Value < vbNullString End Function Rick |
#8
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Thanks Rick for all the info. I actually will use one of the version of the
isnumber function that you posted. Thanks a lot. When you talked about the compiled version of Visual Basic, is it possible to extract my code from a spreadsheet and compile that somehow and then use that code instead of working with the code within the spreadsheet? |
#9
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Thanks Rick for all the info. I actually will use one of the version of
the isnumber function that you posted. Thanks a lot. You are welcome and I am glad you found something useful in there. When you talked about the compiled version of Visual Basic, is it possible to extract my code from a spreadsheet and compile that somehow and then use that code instead of working with the code within the spreadsheet? You can't compile from within Excel. The compiled version I was referring to is Microsoft's Visual Basic 6 (the version I use) or earlier. These have been somewhat abandoned by Microsoft in favor of their VB.NET (now called VB200x) where the x is either 2, 3 or 5; although VB6 still works, even in Vista. If you have one of these compiled versions of VB, you can open an Excel session and create or modify a spreadsheet's content via property and method manipulations, but the experience is not the same as working in Excel directly. Rick |
#10
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Yes, buy VB, and create a dll.
-- HTH Bob (there's no email, no snail mail, but somewhere should be gmail in my addy) "Mike H." wrote in message ... Thanks Rick for all the info. I actually will use one of the version of the isnumber function that you posted. Thanks a lot. When you talked about the compiled version of Visual Basic, is it possible to extract my code from a spreadsheet and compile that somehow and then use that code instead of working with the code within the spreadsheet? |
#11
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
DLL... yes, I forgot about that... you can go that route too.
Rick "Bob Phillips" wrote in message ... Yes, buy VB, and create a dll. -- HTH Bob (there's no email, no snail mail, but somewhere should be gmail in my addy) "Mike H." wrote in message ... Thanks Rick for all the info. I actually will use one of the version of the isnumber function that you posted. Thanks a lot. When you talked about the compiled version of Visual Basic, is it possible to extract my code from a spreadsheet and compile that somehow and then use that code instead of working with the code within the spreadsheet? |
#12
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
You told me this over two months ago. It took that long for IT. They just
installed Microsoft Visual Studio 2005 Professional. Can you give me some pointers on where to begin. I have a vba project that I'd like to make into a .dll. "Bob Phillips" wrote: Yes, buy VB, and create a dll. -- HTH Bob (there's no email, no snail mail, but somewhere should be gmail in my addy) "Mike H." wrote in message ... Thanks Rick for all the info. I actually will use one of the version of the isnumber function that you posted. Thanks a lot. When you talked about the compiled version of Visual Basic, is it possible to extract my code from a spreadsheet and compile that somehow and then use that code instead of working with the code within the spreadsheet? |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Forum | |||
ISNUMBER | Excel Discussion (Misc queries) | |||
ISNUMBER | Excel Worksheet Functions | |||
ISNUMBER | Excel Worksheet Functions | |||
ISNumber VBA | Excel Programming | |||
ISNUMBER | Excel Programming |