PC Review


Reply
Thread Tools Rate Thread

CountIf in VBA

 
 
Otto Moehrbach
Guest
Posts: n/a
 
      26th May 2008
Excel XP & Win XP
I have a range, TheRng, of cells all formatted as text. The user enters
numbers into those cells. I want to trap the instance of him entering a
number that has already been entered somewhere else in TheRng. I am trying
to use the CountIf worksheet function in a Worksheet_Change macro as
follows:
If Application.CountIf(TheRng, Target.Value) > 1 Then....
Or
If Application.CountIf(TheRng, CStr(Target.Value)) > 1 Then....
Or
If Application.CountIf(TheRng.Address, CStr(Target.Value)) > 1 Then....
Each try has produced a "Type Mismatch" error.
How can I get this to work? Thanks for your time. Otto


 
Reply With Quote
 
 
 
 
Per Jessen
Guest
Posts: n/a
 
      26th May 2008
On 26 Maj, 23:43, "Otto Moehrbach" <moehrbachoex...@bellsouth.net>
wrote:
> Excel XP & Win XP
> I have a range, TheRng, of cells all formatted as text. *The user enters
> numbers into those cells. *I want to trap the instance of him entering a
> number that has already been entered somewhere else in TheRng. *I am trying
> to use the CountIf worksheet function in a Worksheet_Change macro as
> follows:
> If Application.CountIf(TheRng, Target.Value) > 1 Then....
> Or
> If Application.CountIf(TheRng, CStr(Target.Value)) > 1 Then....
> Or
> If Application.CountIf(TheRng.Address, CStr(Target.Value)) > 1 Then....
> Each try has produced a "Type Mismatch" error.
> How can I get this to work? Thanks for your time. *Otto


Hi Otto

As it's a worksheetfunction you are trying to use in VBA, it should
look like this:

If Application.WorksheetFunction.CountIf(TheRng, Target.Value)) > 1
then..

Regards,
Per
 
Reply With Quote
 
Jim Rech
Guest
Posts: n/a
 
      26th May 2008
This variation on what you're doing works okay for me:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim TheRng As Range
Set TheRng = Range("A1:A10")
With Application
If .CountIf(TheRng, Target.Value) > 1 Then
.EnableEvents = False
.Undo
.EnableEvents = True
End If
End With
End Sub


--
Jim
"Otto Moehrbach" <(E-Mail Removed)> wrote in message
news:e2a1$(E-Mail Removed)...
> Excel XP & Win XP
> I have a range, TheRng, of cells all formatted as text. The user enters
> numbers into those cells. I want to trap the instance of him entering a
> number that has already been entered somewhere else in TheRng. I am
> trying to use the CountIf worksheet function in a Worksheet_Change macro
> as follows:
> If Application.CountIf(TheRng, Target.Value) > 1 Then....
> Or
> If Application.CountIf(TheRng, CStr(Target.Value)) > 1 Then....
> Or
> If Application.CountIf(TheRng.Address, CStr(Target.Value)) > 1 Then....
> Each try has produced a "Type Mismatch" error.
> How can I get this to work? Thanks for your time. Otto
>



 
Reply With Quote
 
Otto Moehrbach
Guest
Posts: n/a
 
      26th May 2008
Jim
Thanks for that. That appears to be just like what I have. The only
difference that I see is that my range is non-contiguous. My range is:
Set TheRng = Range("D1,F1,H1,J1,L1,N1")
Would that cause the "Type Mismatch" error?
If so I could just loop through the range and count the number of
Target.Value
I just changed my range to a contiguous range and it worked, so that answers
my question.
Thanks for your time. Otto
"Jim Rech" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> This variation on what you're doing works okay for me:
>
> Private Sub Worksheet_Change(ByVal Target As Range)
> Dim TheRng As Range
> Set TheRng = Range("A1:A10")
> With Application
> If .CountIf(TheRng, Target.Value) > 1 Then
> .EnableEvents = False
> .Undo
> .EnableEvents = True
> End If
> End With
> End Sub
>
>
> --
> Jim
> "Otto Moehrbach" <(E-Mail Removed)> wrote in message
> news:e2a1$(E-Mail Removed)...
>> Excel XP & Win XP
>> I have a range, TheRng, of cells all formatted as text. The user enters
>> numbers into those cells. I want to trap the instance of him entering a
>> number that has already been entered somewhere else in TheRng. I am
>> trying to use the CountIf worksheet function in a Worksheet_Change macro
>> as follows:
>> If Application.CountIf(TheRng, Target.Value) > 1 Then....
>> Or
>> If Application.CountIf(TheRng, CStr(Target.Value)) > 1 Then....
>> Or
>> If Application.CountIf(TheRng.Address, CStr(Target.Value)) > 1 Then....
>> Each try has produced a "Type Mismatch" error.
>> How can I get this to work? Thanks for your time. Otto
>>

>
>



 
Reply With Quote
 
Jim Rech
Guest
Posts: n/a
 
      27th May 2008
>>I just changed my range to a contiguous range and it worked, so that
>>answers

my question.

Yeah, Countif accepts only one area. "Type mismatch" isn't very helpful but
I guess VB doesn't really know why the function failed.

--
Jim
"Otto Moehrbach" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
| Jim
| Thanks for that. That appears to be just like what I have. The only
| difference that I see is that my range is non-contiguous. My range is:
| Set TheRng = Range("D1,F1,H1,J1,L1,N1")
| Would that cause the "Type Mismatch" error?
| If so I could just loop through the range and count the number of
| Target.Value
| I just changed my range to a contiguous range and it worked, so that
answers
| my question.
| Thanks for your time. Otto
| "Jim Rech" <(E-Mail Removed)> wrote in message
| news:(E-Mail Removed)...
| > This variation on what you're doing works okay for me:
| >
| > Private Sub Worksheet_Change(ByVal Target As Range)
| > Dim TheRng As Range
| > Set TheRng = Range("A1:A10")
| > With Application
| > If .CountIf(TheRng, Target.Value) > 1 Then
| > .EnableEvents = False
| > .Undo
| > .EnableEvents = True
| > End If
| > End With
| > End Sub
| >
| >
| > --
| > Jim
| > "Otto Moehrbach" <(E-Mail Removed)> wrote in message
| > news:e2a1$(E-Mail Removed)...
| >> Excel XP & Win XP
| >> I have a range, TheRng, of cells all formatted as text. The user
enters
| >> numbers into those cells. I want to trap the instance of him entering
a
| >> number that has already been entered somewhere else in TheRng. I am
| >> trying to use the CountIf worksheet function in a Worksheet_Change
macro
| >> as follows:
| >> If Application.CountIf(TheRng, Target.Value) > 1 Then....
| >> Or
| >> If Application.CountIf(TheRng, CStr(Target.Value)) > 1 Then....
| >> Or
| >> If Application.CountIf(TheRng.Address, CStr(Target.Value)) > 1 Then....
| >> Each try has produced a "Type Mismatch" error.
| >> How can I get this to work? Thanks for your time. Otto
| >>
| >
| >
|
|


 
Reply With Quote
 
 
 
Reply

Thread Tools
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
COUNTIF is Off by 1 GooseMA Microsoft Excel Misc 4 8th Dec 2009 05:04 PM
Can I use COUNTIF with OR? AA Arens Microsoft Excel Discussion 3 20th Nov 2006 04:11 PM
How do I use a countif function according to two other countif fu. =?Utf-8?B?S2lyc3R5?= Microsoft Excel Worksheet Functions 2 20th Feb 2006 11:44 AM
COUNTIF or not to COUNTIF on a range in another sheet =?Utf-8?B?RWxsaWU=?= Microsoft Excel Worksheet Functions 4 15th Sep 2005 10:06 PM
COUNTIF in one colum then COUNTIF in another...??? =?Utf-8?B?Sm9ubmllUA==?= Microsoft Excel Worksheet Functions 3 22nd Feb 2005 02:55 PM


Features
 

Advertising
 

Newsgroups
 


All times are GMT +1. The time now is 12:04 PM.