我的新VBA代码有点问题..
以下是发生的事情: 我有一个excel,其中有两张(+1包含一个数据库)。表1包含G列中的电话号码,格式如下:050-7080-6030 / 301-123-456 / 06-1234-4567等。我需要将其复制到表2,同时删除" - " (我通过创建一个表来实现这一点 - 请参阅下面的代码 - 出于各种原因)。我只是使用复制部分的录制将其粘贴为一个值 - 它工作得很好 - 但是,在工作表2上,我在运行第二个宏后丢失了所有前导零。我已经尝试将单元格格式应用为整个工作表(两者都是)的文本,甚至是像NumberFormat这样的vba代码......但是似乎没有任何工作。知道如何解决这个问题吗?提前致谢! 以下是代码:
Sub copy()
'copy
Rows("4:6").Select
Selection.copy
Sheets("Sheet2").Select
Range("A4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub
Sub Multi_FindReplace()
Dim wks As Worksheet
Dim fndList As Integer
Dim rplcList As Integer
Dim tbl As ListObject
Dim myArray As Variant
Set wks = Sheets("Sheet2")
Set tbl = Worksheets("DBs").ListObjects("Phone")
Set TempArray = tbl.DataBodyRange
myArray = Application.Transpose(TempArray)
fndList = 1
rplcList = 2
With wks
For x = LBound(myArray, 1) To UBound(myArray, 2)
.Range("G3:I100").Replace What:=myArray(fndList, x), Replacement:=myArray(rplcList, x), _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=True, _
SearchFormat:=False, ReplaceFormat:=False
Next x
End With
End Sub
答案 0 :(得分:1)
问题是由Excel处理替换的方式引起的。它会将您的文本字符串重新格式化为一个数字,当然会丢弃前导零。
使用replace命令实际上会保留原始格式。
On Error GoTo Done:
Do
Range("G3:I100").Select
Selection.Find(What:="-", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
ActiveCell = Replace(ActiveCell.Value, "-", "")
Loop
Done:
请注意,这在技术上是一个无限循环,因为没有条件退出循环。这里的退出实际上是由于没有找到" - "而产生的错误。在指定的范围内。
如果你有一个有限的搜索区域,我觉得这是一个简单的方法。如果它是一个可变区域,则用循环前定义的数组替换选择线。