1

Excel 现在可以存储个人过滤视图,以帮助在同时使用的文档中进行协作。我只能找到有关加载项的 Microsoft 文档,但该功能在我的 Excel 版本的 MS Excel for Microsoft 365 MSO (16.0.13127.20266) 32bit 中可用。

https://docs.microsoft.com/en-us/javascript/api/excel/excel.namedsheetview?view=excel-js-preview

我正在尝试存储当前应用的 NamedSheetView 名称属性(用于以后的恢复选项),但此代码失败:

Dim sh1 As Worksheet
Dim xViewName As String
Set sh1 = ThisWorkbook.Sheets(Sheet6.Name)
xViewName = sh1.NamedSheetView.Name

但是此代码有效(使用先前创建的“测试”视图):

sh1.NamedSheetViews.GetItem("Test").Activate

如果这个 NamedSheetViews 是一个集合,我应该能够获取 item 属性,但是这些代码也失败了:

strName = sh1.NamedSheetViews.GetItem(1).Name
strName = sh1.NamedSheetViews.Item(1).Name

任何人都曾成功获得工作表的当前 NamedSheetView 吗?

4

2 回答 2

1

这是我探测未知对象属性的方法:

测试方法

我从对 Object 的引用开始。如果我不知道 Object 是什么,我会使用TypeName()它来返回它的类名(数据类型)。然后我声明该数据类型的变量。当我钻取结构时,清洗、冲洗并重复。声明变量后,选择变量并按 F1 打开该数据类型的 Microsoft 帮助文档。

模块代码

Sub WhatIsThat()
    Const TestName As String = "TestName"
    Dim View As NamedSheetViewCollection
    Set View = Sheet6.NamedSheetViews
    
    On Error Resume Next
    View.GetItem(TestName).Delete
    On Error GoTo 0
    
    View.Add TestName
    Dim SheetView As NamedSheetView
    Dim n As Long
    For n = 0 To View.Count - 1
        Debug.Print View.GetItemAt(n).Name
        Set SheetView = View.GetItemAt(n)
        Debug.Print SheetView.Name
    Next
    Stop
End Sub

即时窗口测试

?TypeName(Sheet6.NamedSheetViews)
?View.GetItemAt(0).Name
?TypeName( View.GetItemAt(0))
于 2020-11-12T08:50:56.000 回答
0

解决方案:(感谢 TinMan 的大力帮助)

Dim SheetView As NamedSheetView 
Dim sh1 As Worksheet
Dim ActiveSheetView as string 
Set sh1 = ThisWorkbook.Sheets(Sheet6.Name) 
Set SheetView = sh1.NamedSheetViews.GetActive
ActiveSheetView = SheetView.Name

应用:

sh1.NamedSheetViews.GetItem(ActiveSheetView).Activate
于 2020-11-26T11:34:10.917 回答