ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   vbproper (https://www.excelbanter.com/excel-programming/368118-vbproper.html)

Joanne[_4_]

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


stevebriz

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


Chip Pearson

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




stevebriz

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


Dave Peterson

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

Peter T

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




Joanne[_4_]

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.





Joanne[_4_]

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





Joanne[_4_]

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



Dave Peterson

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

Chip Pearson

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.







Joanne[_4_]

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.





Joanne[_4_]

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.






Chip Pearson

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.







Peter T

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.








Jon Peltier

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.









Zone

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




All times are GMT +1. The time now is 11:18 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com