éstas verdadero variar txt tres tiempo puede por para numero modificar mismo misma libro hojas formada filas falso examen está diferentes convertir configurar clic aulaclic aula archivos altura adquieren abrir excel vbscript excel-2007

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.