Solved

Excel Name goes away when set to empty string

Posted on 2016-08-18
10
44 Views
Last Modified: 2016-08-19
I have an Excel 2010 workbook with Names.  When I set a Name to the empty string it disappears.  Is this known behavior?  Is there a way to keep a name around with an empty string value or do I have to put some sort of dummy value in there?
0
Comment
Question by:koughdur
  • 5
  • 4
10 Comments
 
LVL 45

Expert Comment

by:Martin Liss
Comment Utility
Can you explain further what you mean when you say you "set a Name to the empty string"?
0
 

Author Comment

by:koughdur
Comment Utility
ThisWorkbook.Names("MyName").Value = ""
0
 
LVL 45

Expert Comment

by:Martin Liss
Comment Utility
Ok, when a Name has to be attached to something so it makes sense that it would go away when it isn't. I don't know why you'd want to keep it around (can you explain?), but certainly assigning something to it would keep it.
0
 

Author Comment

by:koughdur
Comment Utility
I want to use Names rather than Globals to save values.  A blank string is a valid value that I would want to save.  Mostly I associate names with cells, but these values are not really associated with any particular worksheet or cell.
0
 
LVL 45

Expert Comment

by:Martin Liss
Comment Utility
Ok, this is a workaround. Run the FindOut sub and it will tell you if the name exists. If it doesn't you can treat it like it's blank.

Function NameExists(nme As String) As Boolean
Dim n As Name

For Each n In Names
    If nme = n.Name Then
        NameExists = True
        Exit Function
    End If
Next

End Function
Sub FindOut()
If Not NameExists("MyName1") Then
    MsgBox "It's gone"
End If
End Sub

Open in new window

0
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 

Author Comment

by:koughdur
Comment Utility
Thanks for the idea, but that will be rather cumbersome.  I'm using the Names to store previous values for a bunch of different cells.

When I was using globals I could just remember the values like this:

PrevValue = Range("MyCell").Value

and reset the cell later with the previous value like so:

Range("MyCell").Value = PrevValue

The problem with globals is that they go away if any of the macros error out.  Which means the user has to close and reopen the workbook in order for the globals to be recreated.  I was hoping that Names would stick around, but evidently Bill Gates is too smart for me and wants to save me space by getting rid of a perfectly good name just because it has an empty string in it.

What I'm going to do is find an obscure location on an obscure worksheet and store my Names associated with those cells then I can do this:

Worksheet("Obscure").Range("PrevValue") = Worksheet("Main").Range("MyCell").Value

and

Worksheet("Main").Range("MyCell").Value = Worksheet("Obscure").range("PrevValue")
0
 
LVL 45

Accepted Solution

by:
Martin Liss earned 500 total points
Comment Utility
What about using custom document properties?

Sub SetUpVars()

With ActiveWorkbook.CustomDocumentProperties
    .Add Name:="Var1", _
        LinkToContent:=False, _
        Type:=msoPropertyTypeString, _
        Value:="save me"
    .Add Name:="Var2", _
        LinkToContent:=False, _
        Type:=msoPropertyTypeNumber, _
        Value:=1000
End With

End Sub

Sub CreateError()
MsgBox 6 / 0

End Sub
Sub ShowThem()

MsgBox ActiveWorkbook.CustomDocumentProperties("Var1")
MsgBox ActiveWorkbook.CustomDocumentProperties("Var2")
End Sub

Open in new window

0
 
LVL 47

Expert Comment

by:Wayne Taylor (webtubbs)
Comment Utility
...evidently Bill Gates is too smart for me and wants to save me space by getting rid of a perfectly good name just because it has an empty string in it.

This line of code...

    ThisWorkbook.Names("MyName").Value = ""

...is not setting the Name value to an empty string. It is in fact the equivalent to the RefersTo property in that it refers to the formula (see here). So, while this...

   ThisWorkbook.Names("MyName").Value = "bob"

...looks like it sets the value to "bob", it actually sets the value to ="bob".

With this in mind, instead of using the Value property, how about using the Comment value? That can actually be an empty string and will be retained.
0
 

Author Closing Comment

by:koughdur
Comment Utility
Martin:  Thanks.  I had forgotten about those.  I will look to see if I can implement, but I may go with Named cell ranges as that is what I am using for saving other values.

Wayne:  I am saving some stuff in comments, but there are issues with those as well.  They are a bit kludgy to get things in and out of and the show up as red triangles in the cells.  I'm actually thinking of moving away from those using Named cell ranges for those as well.
0
 
LVL 45

Expert Comment

by:Martin Liss
Comment Utility
You're welcome and I'm glad I was able to help.

In my profile you'll find links to some articles I've written that may interest you.

Marty - Microsoft MVP 2009 to 2016
              Experts Exchange MVE 2015
              Experts Exchange Top Expert Visual Basic Classic 2012 to 2015
0

Featured Post

Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

Join & Write a Comment

Drop Down List with Unique/Distinct Values (Part II - ComboBox or ListBox and Data Validation List Bonus!) David Miller (dlmille) Intro This article focuses on delivering unique, sorted lists to list objects (e.g., ComboBox, ListBox) and Dat…
Introduction While answering a recent question (http:/Q_27311462.html), I created an alternative function to the Excel Concatenate() function that you might find useful.  I tested several solutions and share the results in this article as well as t…
This Micro Tutorial will demonstrate on a Mac how to change the sort order for chart legend values and decrpyt the intimidating chart menu.
This Micro Tutorial will demonstrate how to use longer labels with horizontal bar charts instead of the vertical column chart.

728 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now