Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于选项卡名称excel vba更改选项卡颜色_Vba_Excel - Fatal编程技术网

基于选项卡名称excel vba更改选项卡颜色

基于选项卡名称excel vba更改选项卡颜色,vba,excel,Vba,Excel,我希望能够根据选项卡单元格的名称更改选项卡颜色。我试图让我的版本从名称列表中选择以更改选项卡名称: Sub SheetTabColor() Dim mySheets As Worksheets Dim mySheet As Worksheet Set mySheets = Sheets(Array("Christine", "Marina", "Roberto", "Urszula", "Lois", "Matt", "Stephanie",

我希望能够根据选项卡单元格的名称更改选项卡颜色。我试图让我的版本从名称列表中选择以更改选项卡名称:

Sub SheetTabColor()

        Dim mySheets As Worksheets
        Dim mySheet As Worksheet

        Set mySheets = Sheets(Array("Christine", "Marina", "Roberto", "Urszula", "Lois", "Matt", "Stephanie", "Sally", "Iryna", "Katherine", "Matthew", "Julio", "Lavinia"))

        For Each mySheet In mySheets
            mySheet.Tab.Color = RGB(0, 255, 255)
        Next


    End Sub
运行此脚本后,我在“Set mySheets=”行中得到一个错误


如果您有任何反馈,我将不胜感激,我知道我可能还不太接近。

试试看,它会将名称数组作为字符串而不是工作表

Sub SheetTabColor()

    Dim mySheets() As Variant
    Dim mySheet As Variant

    mySheets = Array("Christine", "Marina", "Roberto", "Urszula", "Lois", "Matt", "Stephanie", "Sally", "Iryna", "Katherine", "Matthew", "Julio", "Lavinia")

    For Each mySheet In mySheets
        ThisWorkbook.Worksheets(mySheet).Tab.Color = RGB(0, 255, 255)
    Next

End Sub
如果数组中的任何名称未作为工作表名称找到,则此代码将失败

以下内容将跳过任何未找到的内容:

Sub SheetTabColor()

    Dim mySheets() As Variant
    Dim mySheet As Variant

    mySheets = Array("Christine", "Marina", "Roberto", "Urszula", "Lois", "Matt", "Stephanie", "Sally", "Iryna", "Katherine", "Matthew", "Julio", "Lavinia")

    For Each mySheet In mySheets
        On Error Resume Next
            ThisWorkbook.Worksheets(mySheet).Tab.Color = RGB(0, 255, 255)
        On Error GoTo 0
    Next

End Sub
工作表与工作表不同


您试图将
工作表
分配给
工作表
,因此出现错误

使用相同的类型,代码就会起作用

Sub test()

    Dim mySheets As Sheets
    Dim mySheet As Worksheet

    Set mySheets = Sheets(Array("Sheet1", "Sheet2", "Sheet3"))
    For Each mySheet In mySheets
        mySheet.Tab.Color = RGB(0, 255, 255)
    Next

 End Sub

这是首选的方法,但在上下文中,如果仍然需要排列表,您也可以执行
mySheets=array(sheets(“Christine”)、
等。FWIW此代码比公认的答案更稳健、更一致。@Zerk除了使用
sheets(“abc”)
之外,其他方法都会破坏此答案的强度,它使用适当的
工作簿
对象明确限定集合,并使用
工作表
集合取消对
工作表
对象的引用,而不是
工作表
集合,这可能会产生惊喜。我使用这种方法的唯一问题是每个
循环的
,用于迭代一个数组,但由于涉及的项目很少,所以这并不重要。@Mat'smugh只是好奇,总是渴望学习,没有循环,你会怎么做?如果代码意味着只处理
工作表
-工作表,然后,它应该是
[ActiveWorkbook.]工作表,而不是
[ActiveWorkbook.]工作表。
工作表
集合可以保存任何类型的工作表,包括
工作表
,但也可以保存例如
图表
工作表。也就是说,在我看来,用一张纸包裹整个阵列的做法是过分的。