vba - [vba]Viewsingle Filter 属性返回运行时错误
问题描述
我一直在为 MS Project 编写一个相当复杂的例程。长话短说,每当我尝试访问单个视图对象的过滤器属性时,我都会收到运行时错误“1101”(参数无效)。我可以在即时和代码中访问所有其他属性(无论它是否存在)。
实际的代码是
If vS.Filter <> "" Then '有一个过滤器 ..do stuff End if
对象模型声明 .Filter 属性是 Set/Get(并且 .Filter 名称是字符串)。
所以,我很困惑 - 如果有人遇到过这个知道答案,我将不胜感激。
//添加代码片段。我已经为过滤器修复了这个问题,但是相同的修复程序不适用于表 IF(我想这对于过滤器可能是相同的)视图遭受了一些损坏并且缺少表(或过滤器?)对象。我认为我需要为运行时错误添加一个错误检查器 - 在这种情况下,似乎无法实际测试是否存在 Get/Set Object 属性。
Dim v As View, vS As ViewSingle, vC As ViewCombination, pctDone As Single, lcount As Long Dim f As Filter, t As Table
对于 ThisProject.Views 中的每个 v
lcount = lcount + 1
If v.Single Then 'Process Single views first
Set vS = ThisProject.ViewsSingle.Item(v.Name)
'Check for Resource type
Select Case True
Case v.Type = pjResourceItem
'check filter
Set f = vS.Filter
If f.Name <> "" Then 'have a filter
For lnglist = 1 To ColRFExPreview.Count
If f.Name = ColRFExPreview.Item(lnglist) Then
lngLbInd = lnglist - 1
f.Name = VTI_FRM.LB_ResFltrs.List(lngLbInd)
vS.Filter = f
End If
Next
End If
'check table (we will always check the table)
Set t = vS.Table
For lnglist = 1 To ColRTExPreview.Count
If t.Name = ColRTExPreview.Item(lnglist) Then
lngLbInd = lnglist - 1
t.Name = VTI_FRM.LB_ResTbles.List(lngLbInd)
vS.Table = t
End If
Next
Case Else 'Not a resource type
'check filter
Set f = vS.Filter
If f.Name <> "" Then 'have a filter
For lnglist = 1 To ColTFExPreview.Count
If f.Name = ColTFExPreview.Item(lnglist) Then
lngLbInd = lnglist - 1
f.Name = VTI_FRM.LB_FILTERS.List(lngLbInd)
vS.Filter = f
End If
Next
End If
'check table (we will always check the table)
Set t = vS.Table
For lnglist = 1 To ColTTExPreview.Count
If t.Name = ColTTExPreview.Item(lnglist) Then
lngLbInd = lnglist - 1
t.Name = VTI_FRM.LB_TABLES.List(lngLbInd)
vS.Table = t
End If
Next
End Select
Else 'Combination View - just need to check that Bottomview and topview need to change
Set vC = ThisProject.ViewsCombination(v.Name)
For lnglist = 1 To ColViewExPreview.Count
If vC.BottomView.Name = ColViewExPreview.Item(lnglist) Then
lngLbInd = lnglist - 1
vC.BottomView.Name = VTI_FRM.LB_Views.List(lngLbInd)
End If
If vC.TopView.Name = ColViewExPreview.Item(lnglist) Then
lngLbInd = lnglist - 1
vC.TopView.Name = VTI_FRM.LB_Views.List(lngLbInd)
End If
Next
End If
解决方案
推荐阅读
- python - “IOError:get 中的大小不匹配!” 通过 SFTP 检索文件时
- ipython - 如何在提示符处显示行号时启动 IPython?
- c# - Entity Framework Core 种子数据
- java - 为什么 Arrays.copyOf 这么慢?
- php - 如何为 PhpStorm 设置 Xdebug
- arcore - 具有场景形式的动画对象
- javascript - 如何从js中的数组中删除具有共同值的对象?
- sql-server-2012 - SQL Server 选择查询需要很长时间才能使用 WHERE 子句执行
- android - 带有片段的垂直 ViewPager
- c++ - 获取在新选项卡中启动的浏览器窗口的进程句柄值