【问题标题】:VBA Handeling of Excel Cell containing both Text and Formula-Value包含文本和公式值的 Excel 单元格的 VBA 处理
【发布时间】:2016-11-18 17:58:07
【问题描述】:

我刚开始使用 VBA for Excel,但遇到了一个我找不到解决方案的问题。我想制作一个宏来复制工作表并将副本重命名为单元格 B8 中指定的内容。现在,单元格 B8 包含一个字符串和一个值(基于公式),如下所示。

单元格 B8 的内容

如何让 VBA 使用名称(字符串和数字)作为新工作表的名称?

Sub NewFunction()

Dim counter As Integer

Sheets(1).Copy After:=Sheets(1)

ActiveSheet.name = Sheets(1).Range("B8").CStr

End Sub

提前致谢!

【问题讨论】:

  • .CStr更改为.Value
  • 我试过了。它不起作用。
  • 您在尝试时收到什么错误信息?

标签: vba excel macros


【解决方案1】:

首先,您不能在工作表名称中使用“/”。它可能会出错,但 Excel 会忽略它。

其次,您更改了错误工作表上的名称。您添加了一个新工作表,然后引用了旧工作表。

第三,不需要使用 .CStr ,因为单元格的值是你想要的,因为这是默认属性,所以也不需要使用 .Value 。

【讨论】:

  • 1) 我不认为第二个建议是正确的:在Copy() 方法之后,新工作表变为 active 工作表,而后者和 old i> 工作表在单元格“B8”中具有相同的信息,以便 ActiveSheet.name = Sheets(1).Range("B8") 可以工作(前提是正在使用有效的工作表名称)2)在第三个建议中我只想强调这不是有 "no需要使用 .CStr",但不能使用它,因为 Cstr 不是 Range 对象的属性或方法
  • 没错,两者的 B8 应该相同。
  • 非常感谢您的cmets,认为问题并没有自满地解决。对“B8”(ActiveSheet.name = Sheets(1).Range("B8")) 的调用采用 ="CO"&RANDBETWEEN(1;800)" 而不是单元格的实际字符串/值 (CO 745)。
【解决方案2】:

你快到了

Sheets(1).Copy After:=Sheets(1)
ActiveSheet.name = Replace(Replace(Replace(Replace(Range("B8"), "\", "-"), "/", "-"), "?", "-"), "*", "-")

在哪里

  • Worksheet对象的Copy()方法之后,新的工作表成为活动的一个

  • VBA Replace() 方法 chain 是为了确保您没有在新工作表名称中使用禁止字符

仍然存在可能重复名称的问题,如果您搜索,可以通过您可以在此处找到的特定功能来处理此问题

【讨论】:

  • 感谢您的回复。这是一个聪明的方法!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多