View Single Post
  #2   Report Post  
Posted to microsoft.public.excel.programming
K Dales[_2_] K Dales[_2_] is offline
external usenet poster
 
Posts: 1,163
Default Replace Column Letter only

One thing I note: You have Dim statements for Replacefrom and Replaceto but
you never set their values; instead you use rng for both inputbox results.
So the first inputbox result goes to rng, then rng immediately gets
overwritten by the second inputbox result. You never use rng in the code.

But beyond that I think there is an easier and faster way to do this:
Dim c as Range, i as Integer
Dim ReplaceFrom as String
Dim ReplaceTo as String

ReplaceFrom = InputBox("Letter to be replaced:")
ReplaceTo = InputBox("Letter to be replaced to:")

For Each c in Selection.SpecialCells(xlCellTypeFormulas)
With c
For i = 1 to 9
.Formula = Replace(.Formula, ReplaceFrom & i, ReplaceTo & i)
Next i
.Formula = Replace(.Formula, ReplaceFrom & "$", ReplaceTo & "$")
End With
Next c

I would also consider some way of validating the inputboxes to make sure
they give valid ranges, or put an error handler in here, since a simple typo
could make the code cause some pretty bad errors (suppose I type a number by
mistake as the "ReplaceTo" value - yikes!)
--
- K Dales


"al007" wrote:

I'm looking for a standard macro which would replace the column letter
of cell conting formula as at times the formula may contains sheet name
letters which might be replaced causing problem
I've trid the macro below but does not seem to work. Pls help with a
macro which would work in multiple situations (with or without dollar
sign)Thxs
Sub Replacecolumnletter()
Dim c As Range
Dim Frm As String
Dim pos As Long
Dim Replacefrom
rng = InputBox("Letter to be replaced.")
Dim Replaceto
rng = InputBox("Letter to be replaced to.")
For Each c In Selection
pos = 1
Frm = c.Formula
Do Until pos = 0
pos = InStr(pos, Frm, Replacefrom
Select Case Mid(Frm, pos + 1, 1)
Case 0 To 9, "$"
Frm = Left(Frm, pos - 1) & Replace(Frm, Replacefrom, Replaceto
pos, 1)
pos = pos + 1
End Select
Loop
c.Formula = Frm
Next c
End Sub