Saltar al contenido

VBA EXCEL IE INTERNET EVENTO CLICK NO FUNCIONA


Recommended Posts

publicado

Hola Chicos, tengo un detalle con una automatización...

El evento .click no me funciona y no sé porque, e buscado en internet y no encuentro la solución...

Perdon por no poder compartirles el usuario y contraseña para que hagan pruebas, sin embargo, si tienen ideas o links para que pueda leer al respecto, les agradecería...

La página se llama SAP es un aplicativo en línea para el control de la contabilidad, entre otras cosas...

No funciona:

Private Sub CommandButton1_Click()
    Cargando
    objIE.document.getElementById("__button0").Focus
    objIE.document.getElementById("__button0").Click
    objIE.document.getElementById("__button0").Click
End Sub

HTML SAP:

<div tabindex="0" style="cursor: pointer" id="__button0" data-sap-ui="__button0" class="sapBUiBelNavIcon sapBUiIcon-shellMenu sapUiIconMirrorInRTL" title="Mostrar/ocultar navegación del centro de trabajo" role="button" aria-label="Mostrar/ocultar navegación del centro de trabajo" aria-pressed="false"></div>

publicado

image.thumb.png.62bb3f9a4cb94113a744a3bb2387902b.png

La aplicación Wild Fire es para automatizar, pero no me gusta porque está limitada a las funciones d el apropia aplicación y no puedo ser creativo y hacer cosas diferentes, por ello quiero programarlos desde VBA...

Si te fijas, el evento que ejecuta esta app es Click.. y lo ejecuto y no funciona tampoco, sin embargo, en las opciones de la aplicación que señalé "Use Direct Automatio", si agrego esa opción, ahora si funciona... intestigué un poco sobre Use Direct..., pero no encontré algo que pudiese ayudarme... Lo que me da a entender que si se puede, pero estoy haciendo algo mal...

Y además, si te das cuenta, usa la misma referencia que estoy usando del ID=__Button0...

 

 

 

publicado
<div style="display: flex; flex-direction: column; width: 100%; overflow: hidden; flex-grow: 0; flex-shrink: 0;"><div class="sapBUiBelTitle" style="display: flex; flex-direction: row; width: 100%; align-items: center; justify-content: space-between;" role="banner" id="__title0" data-sap-ui="__title0" data-sap-ui-fastnavgroup="true" data-sap-ui-popup="__title0"><div class="sapBUiNoPrint" style="display: flex; align-items: center; flex-shrink: 0; flex-grow: 0;"><div tabindex="0" style="cursor: pointer" id="__button0" data-sap-ui="__button0" class="sapBUiBelNavIcon sapBUiIcon-shellMenu sapUiIconMirrorInRTL" title="Mostrar/ocultar navegación del centro de trabajo" role="button" aria-label="Mostrar/ocultar navegación del centro de trabajo" aria-pressed="false"></div><img class="sapBUiBelCompanyLogo" id="flexCompanyLogo" IMAGEN"></div><div class="sapBUiNoPrint" style="flex-grow: 1; flex-shrink: 1; overflow: hidden; display: flex; align-items: center; justify-content: center;"><div id="__text0" data-sap-ui="__text0" class="sapBUiBelProductTitle">Factura: 9486</div><span id="__icon0" data-sap-ui="__icon0" role="button" title="Cerrar (Ctrl+Q)" tabindex="0" data-sap-ui-icon-content="" class="sapBUiBelTitleClose sapUiIcon sapUiIconMirrorInRTL sapUiIconPointer" style="font-family:'SAP-icons'"></span></div><div class="sapBUiBelPrintTitle">SAP Business ByDesign</div><div class="sapBUiNoPrint" style="display: flex; align-items: center; flex-shrink: 0; flex-grow: 0;"><div tabindex="0" style="cursor: pointer" id="__button8" data-sap-ui="__button8" class="sapBUiBelTitleIconL sapBUiIcon-search" title="Búsqueda" role="button" aria-label="Búsqueda"></div><div tabindex="0" style="display: flex; flex-direction:column; align-items: center;" id="__button7" data-sap-ui="__button7" class="sapBUiBelTitleIconL sapBUiRoundButton" role="Button" aria-haspopup="true" title="REYNA NANCY NAVA LUJAN"><div class="sapBUiRoundButtonIcon" style="display: flex; align-items: center; justify-content: center;"><div style="display: flex; align-items: center; justify-content: center; overflow: hidden;" class="sapBUiRoundButtonIconImg"><img style=" max-width: 100%; max-height: 100%;" src="resources/sap/b/themes/sap_belize/img/user_placeholder.jpg"></div></div></div><div tabindex="0" style="cursor: pointer" id="__button1" data-sap-ui="__button1" class="sapBUiBelTitleIconL sapBUiIcon-help" title="Mostrar/ocultar panel lateral" role="button" aria-label="Mostrar/ocultar panel lateral"></div></div></div></div>

No me permite adjuntar la imagen, por que dice que se pasa del tamaño... pero es una imagen pequeña... ¿??

 

publicado

Hola

Ya viendo todo el código, hay algo que resalta y es el atributo "aria-pressed" del botón el cual está en False, por eso no ocurre nada cuando mandas el clic, dicha propiedad debe cambiarse previamente, es casi fijo que hay algún otro objeto en dicha web que lo hace y/o algún código, probablemente JavaScript, que realiza eso. Por eso tu programa WildFire puede lograrlo después del cambio que mencionas. ¿Podría hacerse a través de VBA? Probablemente sí, pero al no tener acceso a dicha web/aplicación solo tú puedes saberlo y/o buscar cómo, y no, no sería fácil explicarte qué buscar.

Igual, y solo por si acaso, intenta modificar dicho atributo así:

objIE.document.getElementById("__button0").SetAttribute "aria-pressed", "True"

Pero no garantizo que funcione ya que... no tengo acceso para probar.

Saludos.

publicado
En 6/12/2019 at 17:06 , avalencia dijo:

Hola

Ya viendo todo el código, hay algo que resalta y es el atributo "aria-pressed" del botón el cual está en False, por eso no ocurre nada cuando mandas el clic, dicha propiedad debe cambiarse previamente, es casi fijo que hay algún otro objeto en dicha web que lo hace y/o algún código, probablemente JavaScript, que realiza eso. Por eso tu programa WildFire puede lograrlo después del cambio que mencionas. ¿Podría hacerse a través de VBA? Probablemente sí, pero al no tener acceso a dicha web/aplicación solo tú puedes saberlo y/o buscar cómo, y no, no sería fácil explicarte qué buscar.

Igual, y solo por si acaso, intenta modificar dicho atributo así:


objIE.document.getElementById("__button0").SetAttribute "aria-pressed", "True"

Pero no garantizo que funcione ya que... no tengo acceso para probar.

Saludos.

Lo intente mi estimado @avalencia, pero no tuve éxito... Realmente no sé cual sea el problema y me frustra que no puedo resolverlo ?

Pero gracias por tu ayuda, si sabes algomás al respecto, te agradecería mucho tu ayuda 

publicado

Estimado, llenar un formulario finalmente no quita tiempo y no es costoso, pero después llenar datos para hacer pruebas, conocer el programa, programar toda la macro, etc., va más allá de la ayuda gratuita que damos en los foros. Puedo entender que no des tu clave y usuario y/o generes alguno para que probemos porque quizás es una aplicación de tu empresa, pero espero que entiendas que no es que yo no quiera ayudarte, es una cuestión de tiempo. Saludos.

PD: Nunca descargo nada que yo no  vaya realmente a usar, aunque en este caso creo que igual no hay descarga que hacer.

publicado
Hace 8 horas, avalencia dijo:

Estimado, llenar un formulario finalmente no quita tiempo y no es costoso, pero después llenar datos para hacer pruebas, conocer el programa, programar toda la macro, etc., va más allá de la ayuda gratuita que damos en los foros. Puedo entender que no des tu clave y usuario y/o generes alguno para que probemos porque quizás es una aplicación de tu empresa, pero espero que entiendas que no es que yo no quiera ayudarte, es una cuestión de tiempo. Saludos.

PD: Nunca descargo nada que yo no  vaya realmente a usar, aunque en este caso creo que igual no hay descarga que hacer.

Tienes toda la razón Valencia, es mi deseperación por encontrar la solución,

 

Saludos

publicado

Por cierto, acabo de oprimirle click derecho al botón y "ver código fuente" y me aparece lo siguiente 


<!DOCTYPE HTML>
<html class="sapBUiShell" dir="ltr">
	<head>
		<meta http-equiv="X-UA-Compatible" content="IE=edge">
		<meta http-equiv='Content-Type' content='text/html;charset=UTF-8'/>
		<meta name="sap-ui-fesr" content="true"> <!-- this meta-tag instructs UI5 to generate a passport and add it to xhr-requests -->
		
		<link rel="shortcut icon" href="resources/sap/b/themes/favicon.ico">				
        
        <script type="text/javascript">
		window["sap-b-config"] = {
			"data-sap-b-launchpad": "true"
		};		
		</script>
        <!-- Frame buster -->
        <style> html{display : none ; } </style>
        <script>
          if( self == top ) {
            document.documentElement.style.display = 'block' ;
          } else {
            top.location = self.location ;
          }
        </script>
		<script src="resources/sap-ui-cachebuster/sap-ui-core.js?version=2" type="text/javascript"	
				id="sap-ui-bootstrap"
				data-sap-ui-libs="sap.m"
				data-sap-ui-theme="sap_belize"
				data-sap-ui-xx-bindingSyntax="complex" >
		</script>
		<script src="resources/sap/b/extlib/jquery-ui.min.js"></script>

		<script type="text/javascript" id="sap-b-application"
				data-sap-b-gitCommitId="6cdffc2795b1b55101d80d65fb1d1c5efd9c09e7"
				data-sap-b-buildTimestamp="20191129074445"
				data-sap-b-clientVersion="1911.2.0"
			src="resources/sap/b/ApplicationStarter.js">
		</script>
	</head>
	<body class="sapUiSizeCompact sapBUiShellBackground sapBUiBody" role="application">
		<div id="content" class="sapBUiContent"></div>
	</body>
</html>

 

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      188
    • Comentarios
      98
    • Revisiones
      29

    Más información sobre "Cambios en el Control Horario"
    Última descarga
    Por pegones1

    4    1

  • Crear macros Excel

  • Mensajes

    • Hola, veo que tienes 365, así que esta forma funcionará   Almacen.xlsx
    • Buenos días  @LeandroA espero estes bien Tengo un caso idéntico al planteado en la siguiente pregunta: Sin embargo, a diferencia de quien planteo originalmente la pregunta al correr el código no obtengo ningún resultado podrían ayudarme a resolver este inconveniente y que al hacer click en el Botón Guardar (CommandButton3) del Formulario RCS (frmrcs) el archivo pdf quede configurado con orientación vertical, márgenes superior, inferior, derecho e izquierdo = 1 y en página tamaño carta. Si acaso influye uso Microsoft Excel LTSC MSO (versión 2209 Compilación16.0.1.15629.20200) de 64 bits Mucho le sabre agradecer la ayuda que me pueda dar  RCS PRUEBA - copia.xlsm
    • @JSDJSDCon gusto mi estimado Para la opción 1: Sub Surtirhastadondealcanse() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 4 Dim filaFin As Integer: filaFin = 7 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Else solicitudes(i) = 0 End If surtido(i) = "POR FALTA STOCK" Next i ' Surtir de acuerdo al inventario disponible For i = 1 To numClientes If solicitudes(i) > 0 Then If inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) ElseIf inventario > 0 Then surtido(i) = inventario totalSurtido = totalSurtido + inventario inventario = 0 Else surtido(i) = "POR FALTA STOCK" End If End If Next i ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = "POR FALTA STOCK" Then .Value = surtido(i) .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Para la opción 2:   Sub surtirenpartesiguales() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 13 Dim filaFin As Integer: filaFin = 16 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 Dim totalPedido As Double: totalPedido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) totalPedido = totalPedido + solicitudes(i) Else solicitudes(i) = 0 End If surtido(i) = 0 Next i ' Si hay suficiente inventario, surtir lo que el cliente pide If inventario >= totalPedido Then For i = 1 To numClientes If solicitudes(i) > 0 And inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) End If Next i Else ' Reparto base igualitario Dim baseSurtido As Long baseSurtido = Int(inventario / numClientes) For i = 1 To numClientes If solicitudes(i) > 0 Then If solicitudes(i) <= baseSurtido Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) Else surtido(i) = baseSurtido inventario = inventario - baseSurtido totalSurtido = totalSurtido + baseSurtido End If End If Next i ' Repartir sobrante restante uno por uno, respetando lo pedido Do While inventario > 0 For i = 1 To numClientes If surtido(i) < solicitudes(i) Then surtido(i) = surtido(i) + 1 totalSurtido = totalSurtido + 1 inventario = inventario - 1 If inventario = 0 Then Exit For End If Next i Loop End If ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = 0 Then .Value = "POR FALTA STOCK" .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Saludos, Diego
    • Buenos dias.  Estoy trabajando en una hoja para poder llevar un control de un pequeño almacén.  Tengo un pedido con varias líneas y "lotes" y necesito sacar las ubicaciones que coincidan con la referencia y lote que pone en el pedido. El problema viene cuando tengo la misma referencia y mismo lote en ubicaciones diferentes y necesito sacar la información en columnas diferentes. No se si  me he explicado bien, pero creo que con el ejemplo adjunto se entiende mejor. Agradecería mucho si me pudieran ayudar  Libro1.xlsx
    • Exelente solución mil gracias 
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.