Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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文件对话框:检查.selecteditems(1)是否由其他用户打开_Excel_Vba - Fatal编程技术网

Excel VBA文件对话框:检查.selecteditems(1)是否由其他用户打开

Excel VBA文件对话框:检查.selecteditems(1)是否由其他用户打开,excel,vba,Excel,Vba,我正在使用文件对话框选择文件,但我需要知道文件是否已打开。 我尝试过使用GetAttr,但我总是得到代码32(自上次备份以来文件已更改) 我也尝试过使用MSDN()中的IsFileOpen,但是当我的同事打开文件时,这个方法总是返回我自己的用户。IsFileOpen在文件关闭时按预期工作,正如我在同事关闭文件时测试的那样 我应该如何执行IsFileOpen以返回我同事的用户名而不是我自己的用户名 更新3并回复Ricardo Rodrigues: 从MSDN上的文章来看,建议的解决方案没有返回我所

我正在使用文件对话框选择文件,但我需要知道文件是否已打开。 我尝试过使用GetAttr,但我总是得到代码32(自上次备份以来文件已更改)
我也尝试过使用MSDN()中的IsFileOpen,但是当我的同事打开文件时,这个方法总是返回我自己的用户。IsFileOpen在文件关闭时按预期工作,正如我在同事关闭文件时测试的那样

我应该如何执行IsFileOpen以返回我同事的用户名而不是我自己的用户名

更新3并回复Ricardo Rodrigues: 从MSDN上的文章来看,建议的解决方案没有返回我所需要的,恐怕。。。 (“UserStatus属性不返回有关以只读方式打开指定工作簿的用户的信息。”)

更新2并回复Tim Williams和Ricardo Rodrigues: 我现在看到了使用GetFileOwner过程的错误。。。当然,它给出了我自己的用户名,因为实际上是我创建了这个文件

里卡多:我会测试你的程序,然后再回来

更新并回复Tim Williams:

Function GetFileOwner(fileDir As String, fileName As String) As String

 'On Error Resume Next
Dim secUtil As Object
Dim secDesc As Object
Set secUtil = CreateObject("ADsSecurityUtility")
Set secDesc = secUtil.GetSecurityDescriptor(fileDir & fileName, 1, 1)
GetFileOwner = secDesc.Owner

结束函数

我相信您要查找的是UserStatus属性()

返回提供信息的基于1的二维数组 关于将工作簿作为共享列表打开的每个用户。第一 第二个维度的元素是第二个 元素是用户上次打开工作簿的日期和时间, 第三个元素是表示列表类型的数字(1) 表示独占,2表示共享)。只读变量

示例

此示例创建一个新工作簿,并在其中插入有关将活动工作簿作为共享列表打开的所有用户的信息

users = ActiveWorkbook.UserStatus
With Workbooks.Add.Sheets(1)
    For row = 1 To UBound(users, 1)
        .Cells(row, 1) = users(row, 1)
        .Cells(row, 2) = users(row, 2)
        Select Case users(row, 3)
            Case 1
                .Cells(row, 3).Value = "Exclusive"
            Case 2
                .Cells(row, 3).Value = "Shared"
        End Select
    Next
End With

我相信您要查找的是UserStatus属性()

返回提供信息的基于1的二维数组 关于将工作簿作为共享列表打开的每个用户。第一 第二个维度的元素是第二个 元素是用户上次打开工作簿的日期和时间, 第三个元素是表示列表类型的数字(1) 表示独占,2表示共享)。只读变量

示例

此示例创建一个新工作簿,并在其中插入有关将活动工作簿作为共享列表打开的所有用户的信息

users = ActiveWorkbook.UserStatus
With Workbooks.Add.Sheets(1)
    For row = 1 To UBound(users, 1)
        .Cells(row, 1) = users(row, 1)
        .Cells(row, 2) = users(row, 2)
        Select Case users(row, 3)
            Case 1
                .Cells(row, 3).Value = "Exclusive"
            Case 2
                .Cells(row, 3).Value = "Shared"
        End Select
    Next
End With

“当我的同事打开文件时,此方法始终返回我自己的用户”-您链接的代码不会返回打开文件的人,只返回文件当前是否已锁定。您是否使用了另一段代码?我使用的是ADsSecutiryUtility的GetSecurityDescriptor的Owner属性:这不是您在问题中链接的代码……任何以只读方式打开文件的人都可能无法检测到:这就是您需要了解的吗?@TimWilliams:是的!:)“当我的同事打开文件时,此方法始终返回我自己的用户”-您链接的代码不会返回打开文件的人,只返回文件当前是否已锁定。您是否使用了另一段代码?我使用的是ADsSecutiryUtility的GetSecurityDescriptor的Owner属性:这不是您在问题中链接的代码……任何以只读方式打开文件的人都可能无法检测到:这就是您需要了解的吗?@TimWilliams:是的!:)