对象'_Global'的方法'范围'失败

时间:2015-02-24 13:18:05

标签: excel vba excel-vba range

嗨,我是vba的新手,第一天使用它,我试图获取以下代码来读取列表并删除所有的字母和空格,所以我只是留在右边的列中的数字。这段代码是我在网上找到的,我正在尝试为自己的目的进行编辑,任何帮助都会被大大提高。 我仍在疯狂地搜索,看看我能找到什么。 我在线上开始出现'For each cell'

Sub Remove_Alphabets_SpecialChar_RetainDecimalNumber_Test()
   Dim RegX As Object
   Dim Rng As Range
   Set RegX = CreateObject("vbscript.regexp")
   With RegX
     .Global = True
     .Pattern = "[^-0-9-.]"
   End With
   Range(Range("d4").End(xlDown)).Select
   For Each cell In Range(Selected)
     Rng.Offset(, 1) = RegX.Replace(Rng, "")
   Next cell
 End Sub

1 个答案:

答案 0 :(得分:1)

除非您声明并指定一个名为 Selected 的变量(可以输入 Range ),否则不会出现 Selected 这样的内容。但是,有一种称为 Selection 的东西,它引用当前选定的单元格。

Range(Range("d4"), Range("d4").End(xlDown)).Select
For Each cell In Range(Selection)
  Rng.Offset(, 1) = RegX.Replace(Rng, "")
Next cell

我还将您从D列中的最后一个单元格中选择的范围扩展到包括D4中的所有单元格到D列中的最后一个单元格。

顺便说一句,最好进入VBE的工具►选项►编辑器并检查需要变量声明。可能需要一些时间来习惯,但从长远来看,您的代码将会受益。

<强>附录:

如果我至少没有尝试让你在代码编写中使用.SelectSelection,那将是我的疏忽。依赖于当前选择的内容容易出错和冲突。这是您编写的直接单元格引用的例程。

Sub Remove_Alphabets_SpecialChar_RetainDecimalNumber_Test()
   Dim r As Long, RegX As Object
   Set RegX = CreateObject("vbscript.regexp")
   With RegX
     .Global = True
     .Pattern = "[^-0-9-.]"
   End With
   For r = 4 To Range("d4").End(xlDown).Row
     Cells(r, "D") = RegX.Replace(Cells(r, "D").Value, "")
   Next r
   Set RegX = Nothing
End Sub