Cambiar posición de un MsgBox y el formato de su texto.

30/04/2005 - 03:00 por Esteban Dido | Informe spam
Hola grupo,
- ¿Es posible cambiar la posición en que aparece un MsgBox para evitar que
aparezca siempre al centro de la pantalla?. Sé como hacerlo con el InputBox
pero no funciona con el MsgBox.
- También quisiera saber si se puede cambiar el formato del texto de un
MsgBox para que presente la letra más grande, en negrita y/o de otro color.
Gracias.

Saludos

Preguntas similare

Leer las respuestas

#6 Esteban Dido
03/05/2005 - 02:35 | Informe spam
Gracias, Héctor y KL, pero los códigos de los ejemplos me quedan grande.
¿Podrían ayudarme si yo pongo un simple ejemplo?
Si tengo en un libro recién abierto el siguiente código:

Sub Nombre()
If Sheets(1).Name = "Hoja1" Then
MsgBox "El nombre de la primera hoja es " & Sheets(1).Name
MsgBox "Aún no se ha cambiado el nombre de la primera hoja"
End If
End Sub

¿Qué debo agregarle para que el primer MsgBox aparezca más arriba y más a la
izquierda del centro de la pantalla y el segundo MsgBox aparezca más abajo y
más a la derecha del centro de la pantalla?
Gracias y un saludo

Saludos
"Héctor Miguel" escribió en el mensaje
news:#
hola, KL !

> ... estaba pensando en los formatos... Retiro la recomendacion.

estoy de acuerdo con tus apreciaciones y [creo que] debe quedar como


'valida' la recomendacion
el usuario tiene 'control' sobre los formatos y [cierta] 'amigabilidad'


para 'ubicar' el userform
ya que [estimo que] seran pocos los casos que requieran de 'precisiones'


de tal 'magnitud'
[me parece que -solo- me he anticipado -un poquito- en 'prevenir' futuros


requerimientos] ;)

saludos,
hector.


Respuesta Responder a este mensaje
#7 Héctor Miguel
03/05/2005 - 03:51 | Informe spam
hola, Esteban !

... tengo en un libro recien abierto el siguiente codigo:
Sub Nombre()
If Sheets(1).Name = "Hoja1" Then
MsgBox "El nombre de la primera hoja es " & Sheets(1).Name
MsgBox "Aún no se ha cambiado el nombre de la primera hoja"
End If
End Sub
... que el primer MsgBox aparezca... arriba y... a la izquierda del centro de la pantalla
... y el segundo MsgBox aparezca... abajo y... a la derecha del centro de la pantalla?



1- cuando un codigo 'muestra' un msgbox... la macro pasa a un 'estado de suspension'
-> [en stand-by] 'se queda esperando' por una respuesta del usuario <- por lo cual...
2.- la 'siguiente' linea de codigo [en este caso, el segundo msgbox]...
-> NO se 'ejecuta'... hasta que 'desaparece' el primer msgbox [la 'respuesta' del usuario]
3.- en otras palabras [y hasta donde se] puedes mostrar SOLO UN msgbox 'a un tiempo' :-(
[con lo cual, la posicion de cada uno -creo que- 'pasa' a ser... 'irrelevante']

una primera 'sugerencia' es que muestres ->ambos<- textos/avisos/mensajes EN UN SOLO msgbox
otra alternativa es mostrar DOS userforms 'no modales' en distintas posiciones [aunque no le veo 'sentido']

comentas 'por donde' buscamos soluciones/alternativas ?
saludos,
hector.
Respuesta Responder a este mensaje
#8 Esteban Dido
03/05/2005 - 04:40 | Informe spam
Hector, me parece que no entendiste mi código/mensaje. No pretendo que
aparezcan los dos msgbox al mismo tiempo.Nunca dije eso. Puse dos en el
código, porque se me ocurrió. Cambia al ejemplo a:

Sub Nombre()
If Sheets(1).Name = "Hoja1" Then
MsgBox "Aún no se ha cambiado el nombre de la primera hoja"
End If
End Sub

y pregunto lo mismo, ¿cómo hago para que el msgbox aparezca en un lugar que
no sea el centro de la pantalla?
Gracias

Saludos
"Héctor Miguel" escribió en el mensaje
news:
hola, Esteban !

> ... tengo en un libro recien abierto el siguiente codigo:
> Sub Nombre()
> If Sheets(1).Name = "Hoja1" Then
> MsgBox "El nombre de la primera hoja es " & Sheets(1).Name
> MsgBox "Aún no se ha cambiado el nombre de la primera hoja"
> End If
> End Sub
> ... que el primer MsgBox aparezca... arriba y... a la izquierda del


centro de la pantalla
> ... y el segundo MsgBox aparezca... abajo y... a la derecha del centro


de la pantalla?

1- cuando un codigo 'muestra' un msgbox... la macro pasa a un 'estado de


suspension'
-> [en stand-by] 'se queda esperando' por una respuesta del usuario <-


por lo cual...
2.- la 'siguiente' linea de codigo [en este caso, el segundo msgbox]...
-> NO se 'ejecuta'... hasta que 'desaparece' el primer msgbox [la


'respuesta' del usuario]
3.- en otras palabras [y hasta donde se] puedes mostrar SOLO UN msgbox 'a


un tiempo' :-(
[con lo cual, la posicion de cada uno -creo que- 'pasa' a ser...


'irrelevante']

una primera 'sugerencia' es que muestres ->ambos<- textos/avisos/mensajes


EN UN SOLO msgbox
otra alternativa es mostrar DOS userforms 'no modales' en distintas


posiciones [aunque no le veo 'sentido']

comentas 'por donde' buscamos soluciones/alternativas ?
saludos,
hector.


Respuesta Responder a este mensaje
#9 Esteban Dido
03/05/2005 - 04:44 | Informe spam
Hector, me parece que no entendiste mi código/mensaje. No pretendo que
aparezcan los dos msgbox al mismo tiempo.Nunca dije eso. Puse dos msgbox en
el código porque se me ocurrió. Cambia al ejemplo a:

Sub Nombre()
If Sheets(1).Name = "Hoja1" Then
MsgBox "Aún no se ha cambiado el nombre de la primera hoja"
End If
End Sub

y pregunto lo mismo, ¿cómo hago para que el msgbox aparezca en un lugar que
no sea el centro de la pantalla?
Gracias
Respuesta Responder a este mensaje
#10 Héctor Miguel
03/05/2005 - 08:34 | Informe spam
hola, Esteban !

... No pretendo que aparezcan los dos msgbox al mismo tiempo... Cambia al ejemplo a:
Sub Nombre()
If Sheets(1).Name = "Hoja1" Then
MsgBox "Aún no se ha cambiado el nombre de la primera hoja"
End If
End Sub
y pregunto lo mismo
... ¿como hago para que el msgbox aparezca en un lugar que no sea el centro de la pantalla?



1.- considerando que 'algo comentaste' acerca de los enlaces 'recomendados'... [demasiado codigo ?]
[creo que] la manera mas 'ligera' pudiera ser a traves de un userform con solo una 'etiqueta' y un 'boton'
[podrias dejar 'estatico/fijo' el texto del control label: ->Aun no se ha cambiado.<-]
utilizando las propiedades 'Left' y 'Top' [segun la resolucion de la pantalla/pc/...]
2.- si prefieres/requieres que sea un msgbox... [no queda 'otra' que... 'bastante codigo'] ;)

te paso un ejemplo de cada alternativa y, si cualquier duda... comentas?
saludos,
hector.

1: usando un formulario [un control 'label' y un control 'commandbutton']
en el modulo de codigo del formulario ==Private Sub CommandButton1_Click()
Unload Me
End Sub
en un modulo de codigo 'normal' ==Sub Nombre()
If Sheets(1).Name = "Hoja1" Then
With UserForm1
.StartUpPosition = 0
.Left = 15
.Top = 25
.Show
End With
End If
End Sub

2: utilizando [las menos 'posibles'] llamadas a las API's... la macro para mostrar el msgbox es la ultima
[es un procedimiento 'adaptado' de una pagina en aleman -con ciertos 'errores' que ya estan corregidos-]
[solo 'tendras que' encontrar/modificar los parametros 0, 0 por la posicion: Izquierda, Arriba 'deseada']
[creo que, lo 'unico' que podria hacerse para incrementar la ayuda, seria 'españolizar' el proceso] :))
en un modulo de codigo 'normal' ==Private X32770&, Y32770&, MyHook&
Type CWPSTRUCT
lParam As Long
wParam As Long
Message As Long
hwnd As Long
End Type
Public Const WH_CALLWNDPROC& = 4
Public Const SWP_NOSIZE = &H1
Public Const SWP_NOZORDER = &H4
Declare Function SetWindowsHookEx& Lib "user32" Alias _
"SetWindowsHookExA" (ByVal idHook&, ByVal lpfn&, ByVal _
hmod&, ByVal dwThreadId&)
Declare Function UnhookWindowsHookEx& Lib "user32" (ByVal hHook&)
Declare Function GetClassName& Lib "user32" Alias _
"GetClassNameA" (ByVal hwnd&, ByVal lpClassName$, _
ByVal nMaxCount&)
Private Declare Function GetCurrentThreadId Lib "Kernel32" () As Long
Declare Function SetWindowPos Lib "user32" _
(ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
ByVal x As Long, ByVal y As Long, ByVal cx As Long, _
ByVal cy As Long, ByVal wFlags As Long) As Long
Public Sub Position32770(x As Long, y As Long)
X32770 = x
Y32770 = y
MyHook = SetWindowsHookEx(WH_CALLWNDPROC, AddressOf Hook32770, 0, GetCurrentThreadId())
End Sub
Private Function Hook32770&(ByVal nCode&, ByVal wParam&, MyStruct As CWPSTRUCT)
Const WM_CREATE& = &H1
Dim PosFlag&
With MyStruct
If .Message = WM_CREATE Then
Dim s$, i%
s = String$(255, 0)
GetClassName .hwnd, s, 256
i = InStr(s, vbNullChar)
If i Then s = Left$(s, i - 1)
If s = "#32770" Then
Call UnhookWindowsHookEx(MyHook)
PosFlag = SWP_NOZORDER Or SWP_NOSIZE
SetWindowPos .hwnd, 0&, X32770, Y32770, 0&, 0&, PosFlag
End If
End If
End With
End Function
Sub MostrarMensajeEnPosicion()
Position32770 0, 0
MsgBox "Aún no se ha cambiado el nombre de la primera hoja"
End Sub
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida