Jump to content

Detectar si hay mas de 1 libro abierto


djpawngdl

Recommended Posts

Que tal amigos del foro, necesito saber si es posible mediante alguna instruccion en vba que excel me detecte si hay mas libros abiertos, ya que tengo una instruccion a un libro que me limita el numero de usos, la cual es la siguiente

usos = Sheets("PEDABA").Range("A3")

If usos = 0 Then MsgBox "llame al administrador"

Sheets("PEDABA").Range("A4") = Sheets("PEDABA").Range("A4") + 1

If usos = 0 Then CLAVES.Show

Application.WindowState = xlMinimized

Me.Windows(1).WindowState = xlMinimized

entrada.Show

End Sub

en caso de que el numero de usos ya esta en cero se abre este userform, el cual ya funciona a la perfeccion,

Private Sub CommandButton1_Click()

If usuario = "***" And contraseña = "***" Then

CLAVEUSOS = InputBox("INGRESE EL NUMERO DE USOS PARA ESTA LICENCIA")

Sheets("PEDABA").Select

Range("A2") = CLAVEUSOS

Sheets("pedaba").Range("a4") = 1

MsgBox " SE HAN INGRESADO MAS LICENCIAS DE USO", vbOKOnly, "CONTROL DE INVENTARIOS"

Sheets("PEDABA").Range("a3") = "=-A4+A2"

CLAVES.Hide

entrada.Show

End If

MsgBox "CONTRASEÑA INCORRECTA", vbOKOnly, "CONTROL DE INVENTARIOS"

MsgBox " DEBE LLAMAR AL ADMINISTRADOR DEL LIBRO ", vbOKOnly, " CONTROL DE INVENTARIOS"

End Sub

el problema es que si tengo otro libro abierto pueden mediante el editor de vba entrar a mi otro libro y no quiero que ni siquiera entren a las hojas de calculo, ya que si se modifica de manera manual la hoja "pedaba" en el rango de licencias "a2,a3 y a4" de nada me sirve, el codigo anterior

Concretamente se puede mediante algun codigo detectar si hay otro libro abierto y si este se abre estando otro abierto se cierre acutomaticamente

muchas gracias

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
  • Crear macros Excel

  • Posts

    • Buenas noches nuevamente a los Foristas. A sugerencia de JSD  de los problemas que le planteaba sobre el formulario, abro un nuevo tema. Ofrezco disculpas porque realmente es así como debe ser. El tema es el siguiente: Tengo en este formulario otros problemas que quizás puedan ayudarme: realmente he tratado de ver dónde está el error, pero mis conocimientos no alcanzan y ustedes son los MAESTROS. 1.- En el FrmPersonal trabajo lo que es el listado de Personal con todos los datos y las Nóminas de Salario. En la parte de las nóminas (LstNomina) ya lo configuré de tal manera que con el evento DobleClick pueda traer cualquier trabajador y poder modificar algún dato que por error se haya introducido. Este trabaja Bien, pero en el LstPersonal, estoy tratando de hacer lo mismo y no me está queriendo tomar los datos para su modificación. No me da error, pero no lo hace y he buscado, pero no encuentro el posible problema. 2.- En este mismo Formulario (FrmPersonal), no acabo de poner bien el código VBA para los OptionButton de Sexo. 3.- En este Proyecto también tengo o quiero en el FrmBuscarEntradas poder modificarlo y que a través de un ComboBox o de Botones de Opción poder hacer la búsqueda no sólo de las Entradas, sino también de las Salidas y la Existencia. Esto para evitarme tener que hacer uno para cada uno y reducir los Formularios. ¿Podrías ayudarme con estos temas? Un abrazo a todos. Espero puedas ayudarme y excelente semana para todos. Un abrazo caluroso y cordial. Pino.   Mi Negocio Foro.xlsm
    • Buenas Noches a todos los Foristas. Gracias JSD por su aporte. Revisaré dónde estaba el problema para evitar el mismo error en lo adelante y aprender. Gracias a los demás miembros del Foro también. Tema cerrado.
    • Hola, Gerson. Pues es que solo se mueven todas las salidas de golpe tanto si filtras a mano como si no y todos las referencias de producto a la vez de salidas. No es el ejemplo 2.. no sé... pensaba que la pregunta era clara y tendría fácil solución. El código de mi ejemplo es super sencillo y lo he explicado paso a paso en la macro. En el ejemplo 1 funciona y en el ejemplo 2 es exactamente igual solo que los registros están filtrados.  Comienzo siempre con una salida y luego se van alternando (una entrada, una salida... hay condiciones) hasta que ya no quedan datos en las hojas. Primero para Referencia 1 (filtrada). La idea es al terminar quitar el filtro y hacer lo mismo para referencia 2 (como en el ejemplo 1 que funciona). Gracias.  
    • Hola a todos. Llevo meses empleando una macro para hacer scrapping la cual tengo que modificar dado que la web ya no admite IE. A través de tutoriales conseguí escribir un código que me permite obtener los datos, llevo varias semanas y tengo dos problemas: Primero, no consigo que la macro copie los datos de página 2 debajo de los datos de la página 1, los de la 3 debajo de las 2,..., sino que siempre copia encima de lo anterior. Segundo, copiar los datos en la hoja de excel actual (solo consigo que copie los datos si creo una nueva hoja) Este es el código inicial que funciona bien, debajo pongo a donde he llegado con Selenium. Empleo "i" para marcar el número de elementos a obtener de cada web, "i2" es el número de páginas que tiene esa sección de la tienda   Código: Sub aMonitores() Dim ie As Object Set ie = CreateObject("InternetExplorer.Application") With ie .Visible = False For i2 = 1 To 13 Worksheets("aMonitores").Select .navigate "......page=" & (i2) & "" Application.Wait (Now + TimeValue("0:00:1")) Do DoEvents Loop Until ie.readyState = READYSTATE_COMPLETE Dim doc As HTMLDocument Set doc = ie.document While ie.readyState <> 4 Wend On Error Resume Next Dim i As Integer For i = 0 To 11 'product link, probably wrong class name Range("A7").Offset(i + (i2 * 12), 0).Value = doc.getElementsByClassName("ProductsListstyled__ProductContainer-a3dwak-1 kpaiIf")(0).getElementsByClassName("Linkstyled__StyledLinkRouter-sc-1drhx1h-2 hihJjl ProductListItemstyled__StyledLink-sc-16qx04k-0 dYJAjV")(i).href 'actual data Range("D7").Offset(i + (i2 * 12), 0).Value = doc.getElementsByClassName("StyledBox-sc-1vld6r2-0 bncFqw StyledFlexBox-sc-1w38xrp-4 lmlWlG")(i).innerText Next i Next i2 'tell me how many products are exhibit on the web Range("B1").Value = doc.getElementsByClassName("Cellstyled__StyledCell-sc-1wk5bje-0 NLfJA")(0).getElementsByClassName("Typostyled__StyledInfoTypo-sc-1jga2g7-0 kTxGyM")(0).innerText Range("C1").Value = doc.getElementsByClassName("Cellstyled__StyledCell-sc-1wk5bje-0 NLfJA")(0).getElementsByClassName("Typostyled__StyledInfoTypo-sc-1jga2g7-0 bfsyWw")(0).innerText 'count the data obtained Range("C2").Select ActiveCell.FormulaR1C1 = "=COUNTA(R[3]C[-2]:R[4998]C[-2])" Range("E2").Select ActiveCell.FormulaR1C1 = "=COUNTA(R[3]C[-2]:R[4998]C[-2])" Range("F2").Select ActiveCell.FormulaR1C1 = "=COUNTA(R[3]C[-2]:R[4998]C[-2])" ie.Quit Application.EnableEvents = True End With End Sub Código con Selenium:   Código: Option Explicit Private cd As Selenium.ChromeDriver Sub mm() Set cd = New Selenium.ChromeDriver Worksheets("aMonitores").Select Dim ws As Worksheet Dim i As Integer Dim i2 As Integer For i2 = 1 To 13 cd.Get ".....?page=" & (i2) & "" Dim clases As Selenium.WebElements Dim clase As Selenium.WebElement On Error Resume Next For i = 1 To 12 Set clases = cd.FindElementsByCss(".StyledBox-sc-1vld6r2-0.bncFqw.StyledFlexBox-sc-1w38xrp-4.lmlWlG") clases.Text.ToExcel ThisWorkbook.Worksheets.Add.Range("A1") Next i Next i2 cd.Close End Sub Lo he intentado con otras opcines como: - Sustituir la línea de CSS del segundo código en el primero - Escribir (i) en la línea del cd.findelementsbycss en el segundo código Y otras tantas que no logro recordar Muchas gracias por vuestro tiempo.  
  • Recently Browsing

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

Privacy Policy