Mostrar cuantos usuarios tienen abierto un libro de Excel

Tengo un libro de Excel en modo compartido en donde puede llegar a tener más de 10 personas usándolo a la misma vez, la idea que tengo en mente es que quien habrá el libro de Excel le aparezca un mensaje indicando cuáles personas tiene abierto el archivo, en la pestaña Revisar y en la sección compartir libro se muestra a todos los usuarios que lo tienen en uso, quiero eso mismo pero en macro y que lo muestre al abrir el archivo, estuve intentandolo con el application. Username pero no he dado en el clavo.

Si se puede hacer me gustaría que me ayudaran, si es algo imposible me informan para descartar la idea.

1 Respuesta

Respuesta
1

[Hola

Prueba esto:

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

Tomado de aquí:

https://msdn.microsoft.com/en-us/vba/excel-vba/articles/workbook-userstatus-property-excel 

Lee el enlace.

Saludos]

Abraham Valencia

Funciona bien, pero no de la forma en que lo ocupo, talves me puedas guiar, lo que hace el macro es crear una nueva hoja en donde muestra los nombres de los usuarios que tienen abierto el archivo, ocupo eso mismo pero en una ventana emergente, la ventana puede tener la posibilidad de mostrar sólo un nombre o doce nombres en lista, depende de cuántas personas lo usen.

[Hola

La idea era que leas y entiendas para poder adaptarlo a tus necesidad, aunque sé que quizá no sea tan fácil dado el array y el uso de una propiedad que quizá no sea tan conocida. Igual una recomendación que siempre doy es que si se va a usar VBA, hay que leer y leer. De todos modos mira esto y trata de entender como funciona:

Sub Prueba()
Dim Datos As String
Dim Users As Variant
Let Users = ActiveWorkbook.UserStatus
Let Datos = ""
For Row = 1 To UBound(Users, 1)
    Let Datos = Datos & Users(Row, 1) & " " & Users(Row, 2)
    Select Case Users(Row, 3)
        Case 1
            Datos = Datos & " " & "Exclusive"
        Case 2
            Datos = Datos & " " & "Shared"
    End Select
    Let Datos = Datos & vbCrLf
Next Row
MsgBox Datos
End Sub

No lo he probado pero debería de funcionar.

Abraham Valencia

Excelente funciona muy bien, solo le modifiqué un poco el código para que me mostrara la información que ocupo, el único detalle y petición final es la siguiente, el código me crea en mensaje, pero los nombres de los usuarios los pone en la misma línea, hay alguna forma de que se haga en tipo lista hacia abajo.

Solamente sería eso y doy por finalizada la consulta, muchas gracias por la ayuda, conoces bien del tema.

  Así quedó el código, solo que el nombre de los usuarios los pone en la misma línea uno tras otro, no soy un genio en esta materia como podrás darte cuenta.

Saludos.

Trata de entender que es lo que hace la línea en donde está el "vbCrLf"

Abraham Valencia

Ya le he dado mil vueltas pero no logro descifrarlo, tampoco he podido buscar más información en la web ya que estoy en una red con websense.

Antes del "next" coloca esto:

Let Datos = Datos & vbCrLf

Abraham muchas gracias, no sabía que se podía meter ese código dentro de esa variable, inclusive probé dentro del MsgBox poner: "texto" & vbCrLf & Datos & vbCrLf, pero no funcionaba, aprendí algo nuevo.

De nuevo muchas gracias.

Listo, de nada. Hasta la próxima.

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas