【问题标题】:string with sheet names convert to array formula (code)带有工作表名称的字符串转换为数组公式(代码)
【发布时间】:2013-10-23 18:25:04
【问题描述】:

我有一个公式化的单元格,其中包含一个字符串,仅指定我想在某些条件下修改某些单元格的工作表:

注意事项: 工作表“Total”和“Test1”到“Test20”具有相同的格式(我有更多具有不同名称和格式的工作表,我根本不想修改)。

假设我想修改工作表“Total”、“Test2”、“Test7”和“Test12”中的单元格 A5

一个隐藏的公式化单元格(比如 B50)已被公式化以获取以下文本字符串:“Array("Total", "Test2", "Test7", "Test12")"。我将此值分配给一个变量,希望它成为 vba 代码的一部分,其中 Sheets(SheetNamesList).Select 实际上可以是 Sheets(Array("Total", "Test2", "Test7", "Test12")).Select

我收到一个 Suscript 超出范围错误,调试时突出显示 [Sheets(SheetNamesList).Select] 行。

下面是我的代码。谢谢你们的cmets

Sub Active_to_Installed()

Dim SheetNamesList As String

SheetNamesList = Sheets("Names").Range("B50").Value

If Range("B50").Value = "A" Then

Range("B50").Activate
Sheets(SheetNamesList).Select
ActiveSheet.Activate
Range("A5").Select
ActiveCell.FormulaR1C1 = "I"

Else

Range("A5").Activate
Sheets(SheetNamesList).Select
ActiveSheet.Activate
Range("A5").Select
ActiveCell.FormulaR1C1 = "A"

End If
End sub

【问题讨论】:

  • 出错时SheetNamesList的值是多少?在 Locals 窗口中检查这一点,或在 Immediate 窗口中写入 ?SheetNamesList
  • +1 让我学到新东西。谢谢。

标签: arrays excel vba


【解决方案1】:

正确的syntaxSheets(Array("Sheet4", "Sheet5")).Select,但您使用的单元格的值很可能是一个字符串。您需要将该字符串转换为Sheets的数组

Dim SheetNameArray As Variant
Dim Counter As Integer

SheetNameArray = Split(Worksheets("Names").Range("B50").Value, ",")
Sheets(SheetNameArray).Select

我实际上从未同时选择多个工作表,而且您无法拥有多个活动工作表,因此您无法激活。你也不能在这里一次改变所有的公式。因此,您需要按如下方式遍历工作表。

Dim SheetNameArray As Variant
Dim Counter As Integer

SheetNameArray = Split(Worksheets("Names").Range("B50").Value, ",")
For Each s In SheetNameArray
   Worksheets(s).Range("A5").Formula = "=2+3"
Next s

Sheets(SheetNameArray).Select

注意:您需要将 B50 中的值从 Array("Total", "Test2", "Test7", "Test12") 更改为 Total, Test2, Test7, Test12

【讨论】:

  • @igornachov,这对你有帮助吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-23
  • 2016-11-20
  • 2021-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多