【问题标题】:VBA replacement - syntax error?VBA 替换 - 语法错误?
【发布时间】:2018-02-27 16:33:46
【问题描述】:

我正在尝试在 VBA 中执行替换功能。 显然我有一些语法问题,我是菜鸟。 我目前的做法:

Dim i As Integer

For i = 1 To 100

   Rows("i:i").Select
    Selection.Replace What:="i.xlsx", Replacement:="i+1.xlsx", LookAt:=xlPart _
        , SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

Next i

谁能帮我更正 i 的语法?另外,我想循环直到文件结束,而不是 100 行,我该怎么做?

感谢帮助

【问题讨论】:

  • 你需要连接字符串。
  • 您将要在 For ... Next 中后退一步。看起来您想将 1.xlsx 更改为 2.xlsx,然后在下一个循环中将 2.xlsx 更改为 3.xlsx。
  • @Jeeped 不取决于Rows("i:i") 是否也意味着引用i 循环计数器变量?
  • FWIW 你应该声明i As Long。否则,当您开始处理大于 32,767 的行号时,您将不可避免地遇到整数溢出。

标签: vba excel replace syntax


【解决方案1】:

"i" 是一个字符串字面量;因此,它的值在整个循环执行过程中是恒定的:无论i 的值如何,它始终是"i"

如果您希望变量i 作为搜索/替换字符串的一部分(例如12.xlsx),那么您需要连接其字符串表示; What:=i & ".xlsx"Replacement:=i + 1 & ".xlsx"

避免非常脆弱的.Select 指令也相当容易。使用您感兴趣的范围,而不是使用 Selection

Rows("i:i").Replace ...

或者你的意思是"i:i" 也是你的循环计数器?因为Range("I:I") 指向column I。如果您打算在第 12 次迭代时执行Rows("12:12"),那么您也需要在此处连接范围地址:

Rows(i & ":" & i).Replace ...

如果不是这种情况,那么您需要注意 @Jeeped's comment 在循环进行时您的值的状态。

【讨论】:

  • 感谢您的建议:这是我录制并正在尝试调整的宏:Rows("05:05").Select Selection.Replace What:="01.xlsx", Replacement:="02.xlsx", LookAt:=xlPart _ , SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Rows("06:06").Select Selection.Replace What:="01.xlsx", Replacement:="03.xlsx", ...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-25
  • 2015-06-01
  • 1970-01-01
  • 2020-12-17
  • 2016-12-26
相关资源
最近更新 更多