excel - verdadero - se puede modificar la altura de 4 filas al mismo tiempo y éstas adquieren la misma altura
Cómo saber si una hoja de cálculo de Excel 2007 está abierta y quién la abre utilizando VBScript (2)
¿Has probado la propiedad Workbook.UserStatus? Aquí hay una cita de fragmento de código de la ayuda de Excel VBA:
users = ActiveWorkbook.UserStatus
With Workbooks.Add.Sheets(1)
For row = 1 To UBound(users, 1)
.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
¿Cómo puedo saber si una hoja de cálculo de Excel 2007 está abierta y quién la abre utilizando VBScript?
Estoy tratando de averiguar si un libro de trabajo de Excel está abierto actualmente por otro usuario y devolver quién es ese usuario en mi script.
Ya he descubierto a quién determinar si el libro de trabajo está actualmente abierto. Es una solución alternativa, pero básicamente abro el libro de trabajo y verifico si es de solo lectura. Eso funciona perfectamente; Lo he probado
Sé que esto es posible porque Excel le proporciona al usuario que tiene el archivo abierto si lo abre a través del navegador.
Aquí está mi código (isWorkbookOpen.vbs):
Set objExcelTestWorkbook = CreateObject("Excel.Application")
objExcelTestWorkbook.DisplayAlerts = False ''doesn''t display overwrite alert
testWorkbookFile = "I:/test_workbook.xlsx"
Set objBook = objExcelTestWorkbook.Workbooks.open(testWorkbookFile)
If objBook.ReadOnly Then
Wscript.echo "The file is read only"
Call EndScript
Else
Wscript.echo "The file is available"
Call EndScript
End If
Function EndScript
objExcelTestWorkbook.Workbooks.close
objExcelTestWorkbook.Quit
WScript.Echo "Closed " & testWorkbookFile
WScript.Quit
End Function
Además, ejecuto esto desde la línea de comando:
cscript isWorkbookOpen.vbs
Mis compañeros de trabajo de Genious me recordaron el archivo de "bloqueo" de Excel. Al abrir Excel, crea un archivo de sistema oculto que contiene el nombre de las personas que tienen abierto el archivo. Un archivo de bloqueo comienza con "~ $" antes del nombre de la hoja de cálculo. Ejemplo:
Si tiene una hoja de cálculo llamada testWorkbook.xlsx
, su archivo de bloqueo sería ~$testWorkbook.xlsx
ubicado en el mismo directorio.
Este es también un método más rápido y fácil de verificar si el archivo está abierto porque no está realmente abriendo el archivo como lo estaba haciendo antes. Ahora solo estoy comprobando si el archivo de bloqueo existe y, si lo hace, verifico quién es el "propietario" del archivo de bloqueo y esa será la persona que actualmente tiene abierta la hoja de cálculo. ¡Espero que esto ayude a alguien en el futuro!
Este es mi código que funciona a la perfección:
testWorkbookLockFile = "I:/~$test_workbook.xlsx"
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists(testWorkbookLockFile) Then
WScript.Echo "The file is locked by " & GetFileOwner(testWorkbookLockFile)
Else
WScript.Echo "The file is available"
End If
Function GetFileOwner(strFileName)
''http://www.vbsedit.com/scripts/security/ownership/scr_1386.asp
Set objWMIService = GetObject("winmgmts:")
Set objFileSecuritySettings = _
objWMIService.Get("Win32_LogicalFileSecuritySetting=''" & strFileName & "''")
intRetVal = objFileSecuritySettings.GetSecurityDescriptor(objSD)
If intRetVal = 0 Then
GetFileOwner = objSD.Owner.Name
Else
GetFileOwner = "Unknown"
End If
End Function
Quiero señalar que no escribí las tripas de la Función GetFileOwner. Me conecté al sitio web donde obtuve ese código en la función.
Además, si no tiene la ubicación asignada a la hoja de cálculo y está sobre la red, una ruta UNC no funcionará, debe mapear una unidad. Esto se puede hacer usando las siguientes 2 líneas de código:
Set objNetwork = WScript.CreateObject("WScript.Network")
objNetwork.MapNetworkDrive "Z:", "//Server1/Share1"
Con suerte, alguien se beneficiará de esto. Sé que no hay mucha información acerca de cómo hacer esto en la web ya que he estado buscando para siempre.