Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Lacayo

#1
Scripting / VBA Excel
15 Junio 2019, 20:30 PM
Hola a todos,

ya se que es una chorrada pero no encuentro donde está el fallo

Estoy intentando crear un botón flotante en Excel. La idea es que de inicio siempre esté en una posición determinada.

Siguiendo diferentes tutoriales, he conseguido hacer el botón flotante con el código:


Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim fila, columna As Variant
    fila = Target.Row
    columna = Target.Column
    With ActiveSheet.Shapes("menu")
        .Left = Cells(fila, columna + 1).Left
        '.Top = ActiveCell.Top
   
    End With
   

End Sub


Donde "menu" es el cuadro de texto.

El botón cumple su función pero quiero que cada vez que se abra la hoja de excel el botón aparezca en la celda (por ejemplo) "J5". Ahora el botón se queda en la última posición grabada.

Entiendo que añadiendo unas lineas por encima de la variable me debería dejar el botón en la posición que yo decida, pero no hay forma de que eso ocurra


Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    ActiveSheet.Shapes("Menu").Top = ActiveSheet.Range("A1").Top
    ActiveSheet.Shapes("Menu").Left = ActiveSheet.Range("A1").Left

Dim fila, columna As Variant
    fila = Target.Row
    columna = Target.Column
    With ActiveSheet.Shapes("menu")
        .Left = Cells(fila, columna + 1).Left
        '.Top = ActiveCell.Top
   
    End With
   

End Sub



Las lineas     ActiveSheet.Shapes("Menu").Top = ActiveSheet.Range("A1").Top y ActiveSheet.Shapes("Menu").Left = ActiveSheet.Range("A1").Left no hacen nada. El botón sigue apareciendo en su última posición

Tampoco se consigue nada repitiendo la orden With dándole valor a las variables "fila=5" y "columna=J"

Alguna idea?

Gracias






#2
Scripting / Re: Script en VBS
13 Julio 2018, 23:39 PM
Buenas,

He progresado, pero poco.

localicé este batch que parece que servía:

CitarREM .bat con permisos de administrador
:-------------------------------------
REM  --> Analizando los permisos
    IF "%PROCESSOR_ARCHITECTURE%" EQU "amd64" (
>nul 2>&1 "%SYSTEMROOT%\SysWOW64\cacls.exe" "%SYSTEMROOT%\SysWOW64\config\system"
) ELSE (
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
)

REM --> Si hay error es que no hay permisos de administrador.
if '%errorlevel%' NEQ '0' (
    echo Solicitando permisos de administrador... Requesting administrative privileges... Anfordern Administratorrechte ...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    set params = %*:"=""
    echo UAC.ShellExecute "cmd.exe", "/c ""%~s0"" %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"
    exit /B

:gotAdmin
    pushd "%CD%"
    CD /D "%~dp0"
:-------------------------------------- 

REM   INCLUYE AQUÍ TU CÓDIGO DEL FICHERO
::/Programa a Ejecutar
netsh interface set interface "WI-FI" enabled
pause
EXIT

Al final, y después de tanto código, creo que lo que hace es lo mismo que un runas /user:administrador. Es decir, para este viaje no hacían falta alforjas.
Eso sí, en un equipo que ya tiene permisos de administrador, no me pide elevación a la hora de ejecutar el script y me activa la WIFI.
En un equipo que no los tiene, me pide usuario y pass. La duda es si me lo pedirá en un equipo que tenga la UAC deshabilitada.

Imagino que la elevación a administrador se realiza aqui:

Citargoto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    set params = %*:"=""
    echo UAC.ShellExecute "cmd.exe", "/c ""%~s0"" %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"

pero no tengo ni idea de para qué crea el script getadmin.vbs y si realmente sirve de algo.

Por otro lado he probado este otro script:

CitarRem Definiciones
Dim objShell, RegLocate, RegLocate1
Const EWX_LOGOFF = 0
Rem Librerias
Set objShell = WScript.CreateObject("WScript.Shell")
Set objShell = CreateObject("Wscript.Shell")
On Error Resume Next
Rem Cambia el valor del DWORD (Clave del registro)
RegLocate = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{XXXXXXXXXXXXXXXXXXXXXXXX}\RegistrationEnabled"
objShell.RegWrite RegLocate,"0","REG_DWORD"
Rem Advierte del deslogeo
intReturn = objShell.Popup("Se va a cerrar la sesion para guardar los cambios, presione aceptar", _
20, "Auto LogOff", wshYesNoDialog + wshQuestionMark)
If intReturn = wshYes Then
For Each objPC In GetObject("winmgmts:{(shutdown)}").ExecQuery("Select * from Win32_OperatingSystem")
objPC.Win32Shutdown LOGOFF + FORCE
Next
ElseIf intReturn = wshNo Then
wscript.Quit
Else
Rem Si no responde se forza el deslogeo
For Each objPC In GetObject("winmgmts:{(shutdown)}").ExecQuery("Select * from Win32_OperatingSystem")
objPC.Win32Shutdown LOGOFF + FORCE
Next
End If
WScript.Quit (0) ' Detiene el Script y sale.

Este es peor. También requiere de elevación pero además no debe ser la clave de registro correcta ya que ni reiniciando ni cerrando sesión consigo activar o desactivar la WIFI.
Este segundo script hacía su trabajo perfectamente en un Windows XP. Es decir, no llegaba a pedir en ningún momento credenciales de administrador.

No sé si con esta nueva información me podréis ayudar

Saludos



#3
Scripting / Re: Script en VBS
11 Julio 2018, 22:21 PM
Gracias por responder

Citarpor qué asumes eso? las credenciales de administrador es para acceso de diferentes "zonas" del sistema, todo lo que requiera ir a ellas te lo pedirá

En un equipo donde no estaba habilitado la modificación del registro y era necesario cerrar sesión y dar permisos de administrador local al usuario para modificar una clave en HKCU, un script modificaba esa clave sin tener que elevar los permisos del usuario.

Entiendo que si adapto ese script puedo hacer lo que necesito.
#4
Scripting / Script en VBS
11 Julio 2018, 16:44 PM
Hola a todos.

Solicito vuestra ayuda ya que no dispongo de conocimientos de programación.

Necesitaría crear un script en VBS que me permitiera habilitar o deshabilitar la WIFI en un equipo. Debería ser para WINDOWS.

El problema es que se me deshabilita la WIFI sin motivo y no dispongo de permisos de administrador para activar de nuevo el dispositivo.

Lo he conseguido hacer en un BAT con el comando:

netsh interface set interface "Wi-Fi" enabled

pero requiere elevación.

VBS me debe permitir hacer lo mismo pero sin pedirme credenciales de administrador.

La duda: no se si es mejor hacerlo modificando claves de registro (no sé cuales) o a través de:

WshShell.Run ("cmd /c netsh interface set interface "Wi-Fi" enabled")

esta orden no me funciona en el script.

Gracias de antemano