对象“_Global”的方法 'range' 失败

Method 'range' of object' _Global' failed

你好,我是 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

没有 Selected 这样的东西,除非你声明并分配一个名为 的变量(可能类型 Range)已选中。但是,有一种叫做 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