工作表名称的字符串转换为数组公式(代码)

时间:2013-10-23 18:25:05

标签: arrays excel vba

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

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

假设我要在工作表“Total”,“Test2”,“Test7”和“Test12”中修改单元格A5

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

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

以下是我的代码。感谢您的评论

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

1 个答案:

答案 0 :(得分:0)

正确的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