#1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 29
Default vbproper

I need to change a list into vbproper case.
Here is the code I am using, which works just fine.
Public Sub ProperCase()
Dim Rng As Range
For Each Rng In Selection.Cells
If Rng.HasFormula = False Then
Rng.Value = StrConv(Rng.Value, vbProperCase)
End If
Next Rng
End Sub
My problems is it lower cases the second letter in the State, such as
MN to Mn - I would like to keep it in upper case if possible.
Also in an address such as 23W482 it lowers the 'w'. I think I should
be able to keep that upper if I knew how to tell the macro to skip
alphas that are in the middle of numerics.
Can anyone help me out with these two little problems?
TIA
Joanne

  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 195
Default vbproper


Joanne wrote:
I need to change a list into vbproper case.
Here is the code I am using, which works just fine.
Public Sub ProperCase()
Dim Rng As Range
For Each Rng In Selection.Cells
If Rng.HasFormula = False Then
Rng.Value = StrConv(Rng.Value, vbProperCase)
End If
Next Rng
End Sub
My problems is it lower cases the second letter in the State, such as
MN to Mn - I would like to keep it in upper case if possible.
Also in an address such as 23W482 it lowers the 'w'. I think I should
be able to keep that upper if I knew how to tell the macro to skip
alphas that are in the middle of numerics.
Can anyone help me out with these two little problems?
TIA
Joanne


Not sure if this will work for you but here is an idea.

vbProperCase - Converts the first letter of every word in string to
uppercase.

vbUpperCase - Converts the string to uppercase characters.


'----------------------------
'Converts Text to Upper Case
'----------------------------
Public Sub ConvertToUpper()
'Test if control contains text
If IsNull(Screen.ActiveControl) = False Then
'convert text to Proper Case
Screen.ActiveControl = StrConv(Screen.ActiveControl,
vbUpperCase)
End If
End Sub

  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 7,247
Default vbproper

Screen.ActiveControl = StrConv(Screen.ActiveControl,

In VBA, there is no Screen object, as there is VB6. If you're
going to post code, post code that works.


--
Cordially,
Chip Pearson
Microsoft MVP - Excel
Pearson Software Consulting, LLC
www.cpearson.com





"stevebriz" wrote in message
oups.com...

Joanne wrote:
I need to change a list into vbproper case.
Here is the code I am using, which works just fine.
Public Sub ProperCase()
Dim Rng As Range
For Each Rng In Selection.Cells
If Rng.HasFormula = False Then
Rng.Value = StrConv(Rng.Value, vbProperCase)
End If
Next Rng
End Sub
My problems is it lower cases the second letter in the State,
such as
MN to Mn - I would like to keep it in upper case if possible.
Also in an address such as 23W482 it lowers the 'w'. I think I
should
be able to keep that upper if I knew how to tell the macro to
skip
alphas that are in the middle of numerics.
Can anyone help me out with these two little problems?
TIA
Joanne


Not sure if this will work for you but here is an idea.

vbProperCase - Converts the first letter of every word in
string to
uppercase.

vbUpperCase - Converts the string to uppercase characters.


'----------------------------
'Converts Text to Upper Case
'----------------------------
Public Sub ConvertToUpper()
'Test if control contains text
If IsNull(Screen.ActiveControl) = False Then
'convert text to Proper Case
Screen.ActiveControl = StrConv(Screen.ActiveControl,
vbUpperCase)
End If
End Sub



  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 195
Default vbproper


Chip Pearson wrote:
Screen.ActiveControl = StrConv(Screen.ActiveControl,


In VBA, there is no Screen object, as there is VB6. If you're
going to post code, post code that works.


--
Cordially,
Chip Pearson
Microsoft MVP - Excel
Pearson Software Consulting, LLC
www.cpearson.com





"stevebriz" wrote in message
oups.com...

Joanne wrote:
I need to change a list into vbproper case.
Here is the code I am using, which works just fine.
Public Sub ProperCase()
Dim Rng As Range
For Each Rng In Selection.Cells
If Rng.HasFormula = False Then
Rng.Value = StrConv(Rng.Value, vbProperCase)
End If
Next Rng
End Sub
My problems is it lower cases the second letter in the State,
such as
MN to Mn - I would like to keep it in upper case if possible.
Also in an address such as 23W482 it lowers the 'w'. I think I
should
be able to keep that upper if I knew how to tell the macro to
skip
alphas that are in the middle of numerics.
Can anyone help me out with these two little problems?
TIA
Joanne


Not sure if this will work for you but here is an idea.

vbProperCase - Converts the first letter of every word in
string to
uppercase.

vbUpperCase - Converts the string to uppercase characters.


'----------------------------
'Converts Text to Upper Case
'----------------------------
Public Sub ConvertToUpper()
'Test if control contains text
If IsNull(Screen.ActiveControl) = False Then
'convert text to Proper Case
Screen.ActiveControl = StrConv(Screen.ActiveControl,
vbUpperCase)
End If
End Sub


Oops sorry.!! your are right.

Public Sub upperCase()
Dim Rng As Range
For Each Rng In Selection.Cells
If Rng.HasFormula = False Then
Rng.Value = StrConv(Rng.Value, vbUpperCase)
End If
Next Rng
End Sub

  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 35,218
Default vbproper

But that changes all the text to upper case. Not quite what Joanne requested.

To Joanne: I think you're going to have to look at it character by
character--if you really want the case the way you want.

And you'll have to be careful.

Does ct become CT or Ct?

Is it an abbreviation for Court or Connecticut?

I don't think it's a trivial task. (I'd follow Steve's suggestion and use all
upper case!)


stevebriz wrote:
<<snipped

Oops sorry.!! your are right.

Public Sub upperCase()
Dim Rng As Range
For Each Rng In Selection.Cells
If Rng.HasFormula = False Then
Rng.Value = StrConv(Rng.Value, vbUpperCase)
End If
Next Rng
End Sub


--

Dave Peterson


  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,600
Default vbproper

Hi Joanne,

Not sure how far you need go but try and adapt the following to your needs

Option Explicit
Function ProperCustom(sIn As String) As String
Dim i As Long, j As Long
Dim ba() As Byte
Dim sa
Dim sTmp As String
Dim sOut As String

sOut = UCase(sIn)
sa = Split(sOut, " ") ' n/a in XL97
If IsArray(sa) Then
sOut = ""
'to do - handle if not an array, ie no spaces
For i = LBound(sa) To UBound(sa)
ba = sa(i)
's = ba
If sa(i) Like "*#*" Then
For j = 2 To UBound(ba) Step 2
If ba(j) 64 And ba(j) < 92 Then
ba(j) = ba(j) + 32
End If
Next

ElseIf UBound(ba) = 3 Then
If ba(0) 64 And ba(2) 64 And ba(0) < 92 And ba(2) < 92
Then
ba(2) = ba(2) + 32
End If
End If
If i Then
sTmp = ba
sOut = sOut & " " & sTmp
Else: sOut = ba
End If
Next

End If
ProperCustom = sOut
End Function

Sub test()
Dim s As String
Dim s2 As String
s = "abc ab a123bc4"
s2 = ProperCustom(s)
Debug.Print s
Debug.Print s2
'abc ab a123bc4
'ABC Ab A123bc4

End Sub

Only lightly tested, assumes the string includes spaces, also if the first
letter of mixed letters & numbers it should be upper but others lower.
Muliple spaces will trim to singles.

Need to be aware this string byte array string method is only reliable
with Latin text and characters 1-127.

Regards,
Peter T


"Joanne" wrote in message
...
I need to change a list into vbproper case.
Here is the code I am using, which works just fine.
Public Sub ProperCase()
Dim Rng As Range
For Each Rng In Selection.Cells
If Rng.HasFormula = False Then
Rng.Value = StrConv(Rng.Value, vbProperCase)
End If
Next Rng
End Sub
My problems is it lower cases the second letter in the State, such as
MN to Mn - I would like to keep it in upper case if possible.
Also in an address such as 23W482 it lowers the 'w'. I think I should
be able to keep that upper if I knew how to tell the macro to skip
alphas that are in the middle of numerics.
Can anyone help me out with these two little problems?
TIA
Joanne



  #7   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 29
Default vbproper

What?!

Chip Pearson wrote:

Screen.ActiveControl = StrConv(Screen.ActiveControl,


In VBA, there is no Screen object, as there is VB6. If you're
going to post code, post code that works.




  #8   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 29
Default vbproper

Thanks Dave - I'll give it some consideration. Didn't realize it could
be so complicated - shows what I know about Excel VBA

Dave Peterson wrote:

But that changes all the text to upper case. Not quite what Joanne requested.

To Joanne: I think you're going to have to look at it character by
character--if you really want the case the way you want.

And you'll have to be careful.

Does ct become CT or Ct?

Is it an abbreviation for Court or Connecticut?

I don't think it's a trivial task. (I'd follow Steve's suggestion and use all
upper case!)


stevebriz wrote:
<<snipped

Oops sorry.!! your are right.

Public Sub upperCase()
Dim Rng As Range
For Each Rng In Selection.Cells
If Rng.HasFormula = False Then
Rng.Value = StrConv(Rng.Value, vbUpperCase)
End If
Next Rng
End Sub




  #9   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 29
Default vbproper

Thanks for your consideration Steve
Thing is, the file is currently in Upper Case and I was hoping to
change it to VbProper, but when I run the code I noticed that MN
becomes Mn and 28W124 becomes 28w124. These are the two issuses I was
hoping to address.
Again, thanks
stevebriz wrote:


Joanne wrote:
I need to change a list into vbproper case.
Here is the code I am using, which works just fine.
Public Sub ProperCase()
Dim Rng As Range
For Each Rng In Selection.Cells
If Rng.HasFormula = False Then
Rng.Value = StrConv(Rng.Value, vbProperCase)
End If
Next Rng
End Sub
My problems is it lower cases the second letter in the State, such as
MN to Mn - I would like to keep it in upper case if possible.
Also in an address such as 23W482 it lowers the 'w'. I think I should
be able to keep that upper if I knew how to tell the macro to skip
alphas that are in the middle of numerics.
Can anyone help me out with these two little problems?
TIA
Joanne


Not sure if this will work for you but here is an idea.

vbProperCase - Converts the first letter of every word in string to
uppercase.

vbUpperCase - Converts the string to uppercase characters.


'----------------------------
'Converts Text to Upper Case
'----------------------------
Public Sub ConvertToUpper()
'Test if control contains text
If IsNull(Screen.ActiveControl) = False Then
'convert text to Proper Case
Screen.ActiveControl = StrConv(Screen.ActiveControl,
vbUpperCase)
End If
End Sub


  #10   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 35,218
Default vbproper

Chip was telling Steve that Steve's code wouldn't work in excel's VBA.

Joanne wrote:

What?!

Chip Pearson wrote:

Screen.ActiveControl = StrConv(Screen.ActiveControl,


In VBA, there is no Screen object, as there is VB6. If you're
going to post code, post code that works.



--

Dave Peterson


  #11   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 7,247
Default vbproper

What "What?!"?

I was indicating that code posted by stevebriz wouldn't work.


--
Cordially,
Chip Pearson
Microsoft MVP - Excel
Pearson Software Consulting, LLC
www.cpearson.com



"Joanne" wrote in message
...
What?!

Chip Pearson wrote:

Screen.ActiveControl = StrConv(Screen.ActiveControl,


In VBA, there is no Screen object, as there is VB6. If you're
going to post code, post code that works.






  #12   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 29
Default vbproper

I get it - a bit slow on the uptake on this Monday
Thanks Chip for your input

Chip Pearson wrote:

What "What?!"?

I was indicating that code posted by stevebriz wouldn't work.




  #13   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 29
Default vbproper

Got it - like I told Chip, I am a bit slow on this Monday
Thanks for your efforts, and of course, the code Steve offered doesn't
work, just as you and Chip indicated. I guess I am back at the drawing
board.
Dave Peterson wrote:

Chip was telling Steve that Steve's code wouldn't work in excel's VBA.

Joanne wrote:

What?!

Chip Pearson wrote:

Screen.ActiveControl = StrConv(Screen.ActiveControl,

In VBA, there is no Screen object, as there is VB6. If you're
going to post code, post code that works.





  #14   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 7,247
Default vbproper

I get it - a bit slow on the uptake on this Monday

Become an independent consultant. When business is good, every
day's a Monday. When business is weak, every day's a Saturday.
Both have their unique charm.


--
Cordially,
Chip Pearson
Microsoft MVP - Excel
Pearson Software Consulting, LLC
www.cpearson.com



"Joanne" wrote in message
...
I get it - a bit slow on the uptake on this Monday
Thanks Chip for your input

Chip Pearson wrote:

What "What?!"?

I was indicating that code posted by stevebriz wouldn't work.






  #15   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,600
Default vbproper

I guess I am back at the drawing board.

Did you try the example I posted, perhaps it might work on Tuesday!

Regards,
Peter T

"Joanne" wrote in message
...
Got it - like I told Chip, I am a bit slow on this Monday
Thanks for your efforts, and of course, the code Steve offered doesn't
work, just as you and Chip indicated. I guess I am back at the drawing
board.
Dave Peterson wrote:

Chip was telling Steve that Steve's code wouldn't work in excel's VBA.

Joanne wrote:

What?!

Chip Pearson wrote:

Screen.ActiveControl = StrConv(Screen.ActiveControl,

In VBA, there is no Screen object, as there is VB6. If you're
going to post code, post code that works.









  #16   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 6,582
Default vbproper

LOL

- Jon
-------
Jon Peltier, Microsoft Excel MVP
Tutorials and Custom Solutions
http://PeltierTech.com
_______


"Chip Pearson" wrote in message
...
I get it - a bit slow on the uptake on this Monday


Become an independent consultant. When business is good, every day's a
Monday. When business is weak, every day's a Saturday. Both have their
unique charm.


--
Cordially,
Chip Pearson
Microsoft MVP - Excel
Pearson Software Consulting, LLC
www.cpearson.com



"Joanne" wrote in message
...
I get it - a bit slow on the uptake on this Monday
Thanks Chip for your input

Chip Pearson wrote:

What "What?!"?

I was indicating that code posted by stevebriz wouldn't work.








  #17   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 269
Default vbproper

Joanne,
I've had something similar to this, so I'll jump in. This should
fix the state problem. It presumes that the state will always have a
space before and after it. DC is included but not PR (Puerto Rico)!
Notice also the change to your routine, below.
James

Function FixState(FixStr As String) As String
Dim StateStr As String, z As Integer, Loc As Integer
StateStr = " AL AK AZ AR CA CO CT DE DC FL GA HI ID IL IN IA KS KY
LA " _
& " ME MD MA MI MN MS MO MT NE NV NH NJ NM NY NC ND OH OK OR " _
& " PA RI SC SD TN TX UT VT VA WA WV WI WY "
For z = 1 To Len(FixStr)
Loc = InStr(StateStr, UCase(Mid(FixStr, z, 4)))
If Loc 0 Then
FixStr = Left(FixStr, z - 1) & Mid(StateStr, Loc, 4) &
Right(FixStr, Len(FixStr) - z - 3)
Exit For
End If
Next z
FixState = FixStr
End Function


Public Sub ProperCase()
Dim Rng As Range
For Each Rng In Selection.Cells
If Rng.HasFormula = False Then
Rng.Value = FixState(StrConv(Rng.Value, vbProperCase))
End If
Next Rng
End Sub


Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

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



All times are GMT +1. The time now is 02:39 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright ©2004-2025 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"