MS project:如果列在“任务”视图中可见,如何签入VBA?

MS project:如果列在“任务”视图中可见,如何签入VBA?,vba,ms-project,Vba,Ms Project,我在MSP中编写了一个VBA宏,以插入一列(TaskColumn Flag20)来显示特定的指示器。它工作得很好,只是每次打开项目文件时都会创建列。因此,我正在寻找一种方法来检查列是否存在,以及在打开文件时是否可见。我找不到关于这种可能性的任何信息 非常感谢。一个更好的方法可能是使用包含所需列的自定义表创建/编辑特定视图。然后你不必检查任何东西,只要选择那个视图,它就会一直给你你想要的 如果要自动显示视图,请编写一个使用该方法的宏。更好的方法可能是使用包含所需列的自定义表创建/编辑特定视图。然后

我在MSP中编写了一个VBA宏,以插入一列(TaskColumn Flag20)来显示特定的指示器。它工作得很好,只是每次打开项目文件时都会创建列。因此,我正在寻找一种方法来检查列是否存在,以及在打开文件时是否可见。我找不到关于这种可能性的任何信息


非常感谢。

一个更好的方法可能是使用包含所需列的自定义表创建/编辑特定视图。然后你不必检查任何东西,只要选择那个视图,它就会一直给你你想要的


如果要自动显示视图,请编写一个使用该方法的宏。

更好的方法可能是使用包含所需列的自定义表创建/编辑特定视图。然后你不必检查任何东西,只要选择那个视图,它就会一直给你你想要的


如果要自动显示视图,请编写一个使用该方法的宏。

以下是一种以编程方式获取所有可见列的方法

'The function returns all of the visible column names as a delimiter separated string.
'   Call with a string as the first parameter to represent a custom delimiter, or leave
'   blank to use the default of a comma ,
Function GetColumns(Optional customDelimeter As String) As String
    If customDelimeter = "" Then customDelimeter = ","  'handle custom delimeter

    Dim viewableColumns As String 'create return value

    SelectRow Row:=1, RowRelative:=False 'select the 1st row then parse all columns composing that row
    For Each lngFieldID In MSProject.ActiveSelection.FieldIDList
        Dim columnName As String
        If lngFieldID > 0 Then

            'convert the column ID to a string of the field name, either custom or built-in
            columnName = Trim((CustomFieldGetName(lngFieldID)))
            If Len(columnName) = 0 Then
              columnName = Trim(FieldConstantToFieldName(lngFieldID)) ' use the built-in field name
            End If

            'append return value
            viewableColumns = viewableColumns & customDelimeter & columnName
        End If
    Next

    'get rid of the first delimeter
    If Len(viewableColumns) > 0 Then
        viewableColumns = Right(viewableColumns, Len(viewableColumns) - 1)
    End If

    GetColumns = viewableColumns

End Function

下面是一种以编程方式获取所有可见列的方法

'The function returns all of the visible column names as a delimiter separated string.
'   Call with a string as the first parameter to represent a custom delimiter, or leave
'   blank to use the default of a comma ,
Function GetColumns(Optional customDelimeter As String) As String
    If customDelimeter = "" Then customDelimeter = ","  'handle custom delimeter

    Dim viewableColumns As String 'create return value

    SelectRow Row:=1, RowRelative:=False 'select the 1st row then parse all columns composing that row
    For Each lngFieldID In MSProject.ActiveSelection.FieldIDList
        Dim columnName As String
        If lngFieldID > 0 Then

            'convert the column ID to a string of the field name, either custom or built-in
            columnName = Trim((CustomFieldGetName(lngFieldID)))
            If Len(columnName) = 0 Then
              columnName = Trim(FieldConstantToFieldName(lngFieldID)) ' use the built-in field name
            End If

            'append return value
            viewableColumns = viewableColumns & customDelimeter & columnName
        End If
    Next

    'get rid of the first delimeter
    If Len(viewableColumns) > 0 Then
        viewableColumns = Right(viewableColumns, Len(viewableColumns) - 1)
    End If

    GetColumns = viewableColumns

End Function

最终工作代码,感谢Jerred S

Public Sub CheckFlag20Column()
    SelectRow Row:=1, RowRelative:=False 'select the 1st row then parse all columns composing that row
    For Each lngFieldID In MSProject.ActiveSelection.FieldIDList
        Dim columnName As String
        If lngFieldID > 0 Then
            columnName = Trim(FieldConstantToFieldName(lngFieldID)) ' use the built-in field name
            If columnName = "Flag20" Then
                SelectTaskColumn Column:="Flag20"
                ColumnDelete
            End If
        End If
    Next
End Sub

最终工作代码,感谢Jerred S

Public Sub CheckFlag20Column()
    SelectRow Row:=1, RowRelative:=False 'select the 1st row then parse all columns composing that row
    For Each lngFieldID In MSProject.ActiveSelection.FieldIDList
        Dim columnName As String
        If lngFieldID > 0 Then
            columnName = Trim(FieldConstantToFieldName(lngFieldID)) ' use the built-in field name
            If columnName = "Flag20" Then
                SelectTaskColumn Column:="Flag20"
                ColumnDelete
            End If
        End If
    Next
End Sub

如果感兴趣的是测试单个列,请尝试以下操作。 适用于其常量名称或用户指定的自定义名称

公共函数IsColumnVisible(名称为字符串)
IsColumnVisible=False
转到LeaveIsColumnVisible时出错
如果列被隐藏,则SelectTaskColumn:=Name'将出错
IsColumnVisible=True
LeaveIsColumnVisible:
端函数

如果您对测试单个列感兴趣,请尝试以下操作。 适用于其常量名称或用户指定的自定义名称

公共函数IsColumnVisible(名称为字符串)
IsColumnVisible=False
转到LeaveIsColumnVisible时出错
如果列被隐藏,则SelectTaskColumn:=Name'将出错
IsColumnVisible=True
LeaveIsColumnVisible:
端函数

哦,太好了!我没想到这个域名能帮我。我去看看。非常感谢杰瑞德!哦,非常好!我没想到这个域名能帮我。我去看看。非常感谢杰瑞德!