Avatar of thandel
thandel
 asked on

Sort of emtpy cells

I have a 2003 Excel Sheet in that before it prints its does some checking of data for missing data (user form)

I have a cell that when I edit it (F2), view it, or msgbox it, its emtpy... however in my code "IsEmpty" is thinks its not emtpy.  If I edit the cell and just press delete then it treats it as emtpy as nothing was in the cell and the cursor doesn't move left when I "deleted" the text).

What is causing this and how can I prevent or check for these mysterious characters?  I would like to remove them so I can truly check if the cell is empty.

Thank you.
Microsoft Excel

Avatar of undefined
Last Comment
dlmille

8/22/2022 - Mon
Kyle Abrahams

Most likely a space.  EG:  " " 

Try the trim function in your code, if there is no trim:  Replace(" ", "")  (eg: replace blank spaces with nothing).  Note: this is for the initial check only of IsEmpty.
Martin Liss

It probably contains a Tab or some other unprintable character.
kgerb

It might be an empty string ("").  To test you can try these in the immediate window.

?isempty(Range("A1"))
?Range("A1") = vbnullstring

For a blank string IsEmpty will return false and vbnullstring will return true.

Kyle
All of life is about relationships, and EE has made a viirtual community a real community. It lifts everyone's boat
William Peck
thandel

ASKER
I am using isempty now...  vbnullstring it seems to catch this condition.  What is the difference? Can I not trust isempty anymore?
thandel

ASKER
Thanks Ged but already trimmed and there isn't any spaces.... just nothing in the cell... but there is!?!?!?!?
Martin Liss

Do Debug.Print Asc(cell contents).

What does it show?
⚡ FREE TRIAL OFFER
Try out a week of full access for free.
Find out why thousands trust the EE community with their toughest problems.
thandel

ASKER
I just entered: Do Debug.Print Asc(I19) and got a compile error of expected while or until.
thandel

ASKER
Sorry I tried Debug.Print Asc(I19) but got an error of : "Run time error 5"
Martin Liss

It should be

Debug.Print Asc(Range("I19").Value)
This is the best money I have ever spent. I cannot not tell you how many times these folks have saved my bacon. I learn so much from the contributors.
rwheeler23
dlmille

use:

Range("I19").Value = Replace(WorksheetFunction.Clean(WorksheetFunction.Trim(Range("I19").Value)), Chr(160), vbNullString)

You can try that in the immediate window if you want, then type the following:

debug.print Len(Range("I19"))

You SHOULD get a zero length string after all that...

This should trim multiple spaces, remove the nonprintables (most) and the chr(160) nonprintable.  Likely this gets the high end if not all of the nonprintable space you'd be dealing with.

PS - the IsEmpty() function by definition identifies whether a variant variable has been initialized.  Its not for testing cell ranges, but to advise if a variant variable is holding some type of data.

Select the IsEmpty word in your code and hit F1 for more help on the topic.

Dave
Martin Liss

Nice code dlmille.
thandel

ASKER
Thank you... however this doesn't seem to be "cleaning" the cell.  If I enter a space.... it removes the space but Isempty still thinks its not empty.  After running Replace(WorksheetFunction.Clean(WorksheetFunction.Trim(Range("I19").Value)), Chr(160), vbNullString) what is left in the cell to still think there is something in the cell?

Should I be using a different type of check?
⚡ FREE TRIAL OFFER
Try out a week of full access for free.
Find out why thousands trust the EE community with their toughest problems.
dlmille

Please review my post.

The IsEmpty() function is not for checking a cells content.

did you check the Length of what was in the cell?

Debug.Print Len(Range("I19").Value)

?
Martin Liss

Did you do?

Debug.Print Asc(Range("I19").Value)
thandel

ASKER
Hmmm I added this after your cleanup and it seems to work with isempty better.

If Len(Target.Value) = 0 Then Target.Value = Null
Experts Exchange has (a) saved my job multiple times, (b) saved me hours, days, and even weeks of work, and often (c) makes me look like a superhero! This place is MAGIC!
Walt Forbes
dlmille

If Len(Target.Value) = 0

then Target.Value is null - that is a truism.  You don't need to set it.  If its length is zero, there is nothing there ,:)
dlmille

Again, IsEmpty() is NOT a function designed to do what you're trying to use it for.  

It is for testing the contents of Variant variables.  See my original post

Dave
dlmille

Of course, if you populate a variant with a cell's contents, then you can use IsEmpty, sure.

Perhaps that's what you're doing?

Like:

IsEmpty(Selection) ???

or

dim myCheck as variant

mycheck = range("A19").value

if IsEmpty(myCheck) then

is this what you're doing?

Dave
⚡ FREE TRIAL OFFER
Try out a week of full access for free.
Find out why thousands trust the EE community with their toughest problems.
ASKER CERTIFIED SOLUTION
dlmille

THIS SOLUTION ONLY AVAILABLE TO MEMBERS.
View this solution by signing up for a free trial.
Members can start a 7-Day free trial and enjoy unlimited access to the platform.
See Pricing Options
Start Free Trial
GET A PERSONALIZED SOLUTION
Ask your own question & get feedback from real experts
Find out why thousands trust the EE community with their toughest problems.
thandel

ASKER
Thanks Dave that was what I was doing IsEmpty(Selection).... but now I am modifying the code to use Len to check. Thanks!
dlmille

I see - yes, I can see how the "raw" use of selection in the function would translate to variant.  Thanks for clarifying your use.

Dave