在Excel VBA中,如何确定窗口底部视图中当前有多少工作表选项卡。。?

在Excel VBA中,如何确定窗口底部视图中当前有多少工作表选项卡。。?,excel,vba,Excel,Vba,在Excel VBA 2007中,如何确定窗口底部视图中当前有哪些工作表选项卡。。?我看不到此类对象的任何对象属性 请注意,这个问题并不是询问当前是否隐藏了任何工作表,而是我在查找当前显示在窗口底部选项卡栏中的选项卡数量 理想情况下,任何此类函数都应返回起始工作表索引编号或名称,以及结束索引或计数,或者返回当前显示选项卡的工作表范围 我看到了ScrollWorkbookTabs功能,但它实际上并不适用于此。另外,工作表.Tab对象没有相关属性,比如称为.WithinView 我想包括一个代码示例

在Excel VBA 2007中,如何确定窗口底部视图中当前有哪些工作表选项卡。。?我看不到此类对象的任何对象属性

请注意,这个问题并不是询问当前是否隐藏了任何工作表,而是我在查找当前显示在窗口底部选项卡栏中的选项卡数量

理想情况下,任何此类函数都应返回起始工作表索引编号或名称,以及结束索引或计数,或者返回当前显示选项卡的工作表范围

我看到了
ScrollWorkbookTabs
功能,但它实际上并不适用于此。另外,
工作表.Tab
对象没有相关属性,比如称为
.WithinView


我想包括一个代码示例,但我甚至找不到一个地方来开始这个问题。

我知道这并不完全是你想要的,但下面是我对答案的看法。它使四个工作表标签从左到右呈现一种“竞速”黄色。我选择不从活动工作表中展开,因为滚动条可能已向左或向右滚动,并且在动画期间不会显示该活动工作表。
为了保持示例的简单性,我选择不保留任何现有的图纸颜色,但在必要时可以实现

Option Explicit

Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)

Private Sub Workbook_NewSheet(ByVal Sh As Object)

    '' "lens flare" when adding a new worksheet

    Dim delay As Long

    Dim i As Long
    For i = 1 To Sheets.Count + 3

        ''color tab yellow
        If i <= Sheets.Count Then
            Sheets(i).Tab.Color = vbYellow
        End If

        ''clear trailing tab color
        If i > 3 Then
            Sheets(i - 3).Tab.ColorIndex = xlColorIndexNone
        End If

        ''pause for 150ms -> 30ms
        delay = IIf(Sheets.Count < Round((160 - 30) / 5), 160 - (Sheets.Count * 5), 30)
        Sleep delay

    Next i

End Sub
选项显式
私有声明PtrSafe子睡眠库“kernel32”(ByVal dwr作为LongPtr)
专用子工作簿\新闻纸(ByVal Sh作为对象)
添加新工作表时的“镜头光斑”
延迟时间越长
我想我会坚持多久
对于i=1至板材。计数+3
“颜色标签黄色”
如果我三岁的话
工作表(i-3).Tab.ColorIndex=xlColorIndexNone
如果结束
''暂停150毫秒->30毫秒
延迟=IIf(Sheets.Count<四舍五入((160-30)/5),160-(Sheets.Count*5),30)
睡眠延迟
接下来我
端接头

我知道这不完全是你想要的,但这是我对答案的看法。它使四个工作表标签从左到右呈现一种“竞速”黄色。我选择不从活动工作表中展开,因为滚动条可能已向左或向右滚动,并且在动画期间不会显示该活动工作表。
为了保持示例的简单性,我选择不保留任何现有的图纸颜色,但在必要时可以实现

Option Explicit

Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)

Private Sub Workbook_NewSheet(ByVal Sh As Object)

    '' "lens flare" when adding a new worksheet

    Dim delay As Long

    Dim i As Long
    For i = 1 To Sheets.Count + 3

        ''color tab yellow
        If i <= Sheets.Count Then
            Sheets(i).Tab.Color = vbYellow
        End If

        ''clear trailing tab color
        If i > 3 Then
            Sheets(i - 3).Tab.ColorIndex = xlColorIndexNone
        End If

        ''pause for 150ms -> 30ms
        delay = IIf(Sheets.Count < Round((160 - 30) / 5), 160 - (Sheets.Count * 5), 30)
        Sleep delay

    Next i

End Sub
选项显式
私有声明PtrSafe子睡眠库“kernel32”(ByVal dwr作为LongPtr)
专用子工作簿\新闻纸(ByVal Sh作为对象)
添加新工作表时的“镜头光斑”
延迟时间越长
我想我会坚持多久
对于i=1至板材。计数+3
“颜色标签黄色”
如果我三岁的话
工作表(i-3).Tab.ColorIndex=xlColorIndexNone
如果结束
''暂停150毫秒->30毫秒
延迟=IIf(Sheets.Count<四舍五入((160-30)/5),160-(Sheets.Count*5),30)
睡眠延迟
接下来我
端接头

我不知道对象模型中的任何东西,但出于好奇,我不得不问,这个用例是什么?我也这么想;我在“本地人”窗口中以“停止”模式搜索对象已经快一个小时了。我想做的是提供一个视觉提示,当标签添加了一个颜色变化,在标签上来回滚动一次,就像镜头光斑一样。但它应该只发生在当前视图中的选项卡上;如果添加了100多个选项卡,那么在所有这些选项卡上执行这些操作是没有意义的。我当然可以一直这样做固定的数字,如10,但我更希望有准确的计数/范围。也许只是“耀斑”到前30张,并减缓耀斑根据出现的张数更改耀斑速度。这个想法很怪,我有点喜欢,你不能从对象模型中知道。“选项卡栏”的宽度取决于主窗口的宽度和用户可调节的水平滚动条面板的宽度:如果没有一些严重的Win32攻击,我想不出任何查询这些对象的方法。您可能可以使用Microsoft UI Automation,并检查文档中每个选项卡项控件的
IsOffscreen
属性。我不知道对象模型中的任何东西,但出于好奇,我不得不问,这个用例是什么?我也这么想;我在“本地人”窗口中以“停止”模式搜索对象已经快一个小时了。我想做的是提供一个视觉提示,当标签添加了一个颜色变化,在标签上来回滚动一次,就像镜头光斑一样。但它应该只发生在当前视图中的选项卡上;如果添加了100多个选项卡,那么在所有这些选项卡上执行这些操作是没有意义的。我当然可以一直这样做固定的数字,如10,但我更希望有准确的计数/范围。也许只是“耀斑”到前30张,并减缓耀斑根据出现的张数更改耀斑速度。这个想法很怪,我有点喜欢,你不能从对象模型中知道。“选项卡栏”的宽度取决于主窗口的宽度和用户可调节的水平滚动条面板的宽度:如果没有一些严重的Win32攻击,我想不出任何查询这些对象的方法。您可能可以使用Microsoft UI Automation,并检查文档中每个选项卡项控件的
IsOffscreen
属性。