Sub InventarOperaciones()
Dim i As Integer
Dim NumOperaciones As Integer
Dim operacion As String
NumOperaciones = 10
For i = 1 To NumOperaciones
Cells(i, 1) = Int((Rnd * 10) + 1)
operacion = Int((Rnd * 3) + 1)
If operacion = "1" Then operacion = "+"
If operacion = "2" Then operacion = "-"
If operacion = "3" Then operacion = "*"
Cells(i, 2) = operacion
Cells(i, 3) = Int((Rnd * 10) + 1)
Cells(i, 4) = ""
Cells(i, 5) = ""
Next
Cells(1, 4).Select
End Sub
Sub ComprobarOperaciones()
Dim i As Integer
Dim NumOperaciones As Integer
Dim operacion As String
Dim resultado As Integer
Dim puntos As Integer
NumOperaciones = 10
puntos = 0
For i = 1 To NumOperaciones
operacion = Cells(i, 2)
If operacion = "+" Then resultado = Cells(i, 1) + Cells(i, 3)
If operacion = "-" Then resultado = Cells(i, 1) - Cells(i, 3)
If operacion = "*" Then resultado = Cells(i, 1) * Cells(i, 3)
If Cells(i, 4) = resultado Then
Cells(i, 5) = "OK"
puntos = puntos + 1
Else
Cells(i, 5) = resultado
End If
Next
MsgBox "PUNTOS:" & puntos
End Sub
jueves, 4 de diciembre de 2008
VBA Excel: Brain Training
martes, 2 de diciembre de 2008
Access VBA: Realizar una consulta por código
Private Sub tipo_AfterUpdate()
Dim r As DAO.Recordset
Dim db As DAO.Database
Dim SQL As String
Set db = CurrentDb
SQL = "select * from servicios where codservicio=" & tipo
Set r = db.OpenRecordset(SQL)
descripcion = r(1)
precio = r(2)
End Sub
jueves, 20 de noviembre de 2008
Excel VBA: Crear tablas de multiplicar
Sub Prueba()
For i = 1 To 10
For j = 1 To 10
Range(Cells(i, j), Cells(i, j)).Select
ActiveCell.FormulaR1C1 = i & "x" & j & "=" & i * j
Next
Next
End Sub
jueves, 6 de noviembre de 2008
Access: Consulta de eliminación con más de una tabla
Si se intentan borrar registros como "productos de la familia pescados", si hay dos tablas involucradas sale el siguiente mensaje:
"Especifique la tabla que contiene los registros que desea eliminar."
Para hacer esto se debe poner en la consulta el asterisco (*) de la tabla que contiene los registros a eliminar y los campos imprescindibles del resto de la consulta
"Especifique la tabla que contiene los registros que desea eliminar."
Para hacer esto se debe poner en la consulta el asterisco (*) de la tabla que contiene los registros a eliminar y los campos imprescindibles del resto de la consulta
jueves, 21 de agosto de 2008
JavaScript: Acceder al valor de un RadioButton
Esta función devuelve el valor seleccionado en un grupo de botones de opción (RadioButton).
Se la debe llamar como valor=getRadioButtonSelectedValue(document.formulario.nombreradio);
function getRadioButtonSelectedValue(ctrl)
{
for(i=0;i<ctrl.length;i++)
if(ctrl[i].checked) return ctrl[i].value;
}
Se la debe llamar como valor=getRadioButtonSelectedValue(document.formulario.nombreradio);
martes, 19 de agosto de 2008
Calcular la edad de una persona
En Excel
Siendo A2 el lugar donde está la fecha de nacimiento.
En Access
En un módulo se pone este código.
Ya se puede usar en las consultas.
Siendo A2 el lugar donde está la fecha de nacimiento.
=AÑO(HOY())-AÑO(A2)-1 + (MES(HOY())>MES(A2)) + (MES(A2)=MES(HOY()))*(DIA(HOY())>=DIA(A2))
En Access
En un módulo se pone este código.
Function Edad (FechaNacimiento As Variant) As Integer
Dim miEdad As Variant
If IsNull(FechaNacimiento) then Edad = 0: Exit Function
miEdad = DateDiff("yyyy", FechaNacimiento, Now)
If Date < DateSerial(Year(Now), Month(FechaNacimiento)_
, Day(FechaNacimiento)) Then
miEdad = miEdad - 1
End If
Edad = CInt(miEdad)
End Function
Ya se puede usar en las consultas.
miércoles, 13 de agosto de 2008
Error en PHP: Cannot modify header information
Si sale este mensaje en PHP
Warning: Cannot modify header information - headers already sent by (output started at /var/www/vhost/home/html/tienda/includes/languages/espanol/modules/payment/banktransfer.php:26 ) in /var/www/vhost/home/html/tienda/includes/functions/general.php on line 33
Significa que se ha enviado una respuesta antes de terminar con las cabeceras. Este error suele solucionarse mirando los dos ficheros que comenta (seguramente el primero) y borrar los espacios que pudiera haber antes de la marca <?php y despues de ?>
Warning: Cannot modify header information - headers already sent by (output started at /var/www/vhost/
Significa que se ha enviado una respuesta antes de terminar con las cabeceras. Este error suele solucionarse mirando los dos ficheros que comenta (seguramente el primero) y borrar los espacios que pudiera haber antes de la marca <?php y despues de ?>
viernes, 8 de agosto de 2008
Quitar la barra amarilla de Internet Explorer para páginas locales
Para los desarrolladores que quieren probar constantemente su web localmente con IE sin que salga la barra de seguridad del internet explorer y service pack 2
Hay que agregar esta linea al HTML antes del body:
Hay que agregar esta linea al HTML antes del body:
<!-- saved from url=(0013)about:internet -->
jueves, 7 de agosto de 2008
Validar con DreamWeaver en castellano
El script que genera el Dreamweaver para validar formularios está en inglés.
Como es un código JavaScript se puede sustituir por el que aparece aquí. En vista código, se busca un apartado que pondrá SCRIPT y sustituye el existente por este otro.
Para que sirva de orientación, el código que hay que sustituir es el siguiente:
Como es un código JavaScript se puede sustituir por el que aparece aquí. En vista código, se busca un apartado que pondrá SCRIPT y sustituye el existente por este otro.
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_findObj(n, d) { //v4.01
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function MM_validateForm() { //v4.0
var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args[i]);
if (val) { nm=val.name; if ((val=val.value)!="") {
if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
if (p<1 || p==(val.length-1)) errors+='- '+nm+' debe contener una dirección de correo válida.\n';
} else if (test!='R') { num = parseFloat(val);
if (isNaN(val)) errors+='- '+nm+' debe ser un número.\n';
if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
min=test.substring(8,p); max=test.substring(p+1);
if (num<min || max<num) errors+='- '+nm+' debe ser entre '+min+' y '+max+'.\n';
} } } else if (test.charAt(0) == 'R') errors += '- '+nm+' es un dato obligatorio.\n'; }
} if (errors) alert('Error(es) en el formulario:\n'+errors);
document.MM_returnValue = (errors == '');
}
//-->
</script>
Para que sirva de orientación, el código que hay que sustituir es el siguiente:
<script type="text/JavaScript">
<!--
function MM_findObj(n, d) { //v4.01
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function MM_validateForm() { //v4.0
var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args[i]);
if (val) { nm=val.name; if ((val=val.value)!="") {
if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
if (p<1 || p==(val.length-1)) errors+='- '+nm+' must contain an e-mail address.\n';
} else if (test!='R') { num = parseFloat(val);
if (isNaN(val)) errors+='- '+nm+' must contain a number.\n';
if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
min=test.substring(8,p); max=test.substring(p+1);
if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
} } } else if (test.charAt(0) == 'R') errors += '- '+nm+' is required.\n'; }
} if (errors) alert('The following error(s) occurred:\n'+errors);
document.MM_returnValue = (errors == '');
}
//-->
</script>
viernes, 25 de julio de 2008
El Word me la juega (Reemplazar la selección).
Durante un rato el Word ha hecho una cosa rara. Cuando yo selecciono un texto y escribo se supone que debería borrar lo seleccionado. El Word dejó de hacerlo y tenía que hacerlo "a mano".
¿Cómo se arregla?
Herramientas-->Opciones-->Edición-->Reemplazar la selección al escribir (debe aparecer marcada)
¿Cómo se arregla?
Herramientas-->Opciones-->Edición-->Reemplazar la selección al escribir (debe aparecer marcada)
miércoles, 16 de julio de 2008
Escribir código HTML en Blogger
Para escribir los códigos HTML en Blogger es buena idea pasar por esta dirección:
http://www.simplebits.com/cgi-bin/simplecode.pl?mode=process
De esta manera el código a mostrar será el esperado y no el resultado.
http://www.simplebits.com/cgi-bin/simplecode.pl?mode=process
De esta manera el código a mostrar será el esperado y no el resultado.
Dudas con HTML y DreamWeaver
Aquí pondré algunas dudas que me han hecho los alumnos de Diseño Web:
¿Es posible crear tablas con un borde de línea simple? (en lugar de la doble linea).
Se debe poner el espacio entre celdas (cellspacing) igual a cero, para que esa doble línea desaparezca.
Truco para evitar las líneas de separación extrañas en los navegadores modernos:
De esta manera las imágenes dentro de celdas se comportan como bloques y se alinéan arriba.
Esto funciona también para otros objetos como flash.
¿Es posible crear tablas con un borde de línea simple? (en lugar de la doble linea).
Se debe poner el espacio entre celdas (cellspacing) igual a cero, para que esa doble línea desaparezca.
<table border=1 cellspacing=0 cellpadding=2 >
<tr><td>Esta tabla</td></tr>
<tr><td>Tiene borde simple</td></tr>
</table>
Truco para evitar las líneas de separación extrañas en los navegadores modernos:
td img {display: block;}
De esta manera las imágenes dentro de celdas se comportan como bloques y se alinéan arriba.
td object {display: block;}
Esto funciona también para otros objetos como flash.
jueves, 17 de abril de 2008
Word: Crear marca de agua que no esté en la portada
No se puede directamente, pero se puede simular.
Vamos a Configurar Página y decimos que la primera página será diferente.
Diseño de página-->Configurar página (Word2007)
Archivo-->Configurar página (Otros Word)
Creamos un encabezado e insertamos una imagen, un WordArt o un cuadro de texto.
Decoloramos la imagen si es necesario.
En el ajuste de texto (el perrito) indicamos "detrás del texto"
Arrastramos el objeto a donde queremos que aparezca la marca de agua y listo.
Vamos a Configurar Página y decimos que la primera página será diferente.
Diseño de página-->Configurar página (Word2007)
Archivo-->Configurar página (Otros Word)
Creamos un encabezado e insertamos una imagen, un WordArt o un cuadro de texto.
Decoloramos la imagen si es necesario.
En el ajuste de texto (el perrito) indicamos "detrás del texto"
Arrastramos el objeto a donde queremos que aparezca la marca de agua y listo.
jueves, 27 de marzo de 2008
Visual Basic: Utilizar un clase C# en un proyecto VB
La tienes que compilar por separado. Es decir, en una Solución, metes dos proyectos: uno es el de VB y el otro es una librería de clases en C#. Desde el proyecto VB añades una Referencia al proyecto de C#. Compilas la solúción, y listo. Desde el fuente de VB puedes llamar a la clase de C#. Recuerda poner en la llamada (o en un Imports) el espacio de nombres de la clase llamada si no es el mismo de la llamante (esto habría que hacerlo de todas formas aunque estuviera en VB en lugar de C#).
PD: Copiado directamente del foro
http://www.elguille.info/NET/vs2005/trucos/clases_de_vb_y_cs_en_una_misma_aplicacion_web_de_visual_studio_2005.htm
http://www.elguille.info/NET/vs2005/como/usar_ensamblado_csharp_desde_visual_basic.htm
PD: Copiado directamente del foro
http://www.elguille.info/NET/vs2005/trucos/clases_de_vb_y_cs_en_una_misma_aplicacion_web_de_visual_studio_2005.htm
http://www.elguille.info/NET/vs2005/como/usar_ensamblado_csharp_desde_visual_basic.htm
miércoles, 26 de marzo de 2008
Red Privada Virtual (VPN)
He intentado crear una VPN con Windows XP he seguido el siguiente tutorial:
http://www.elrincondelprogramador.com/
default.asp?pag=articulos/leer.asp&id=55
He tenido dos problemas:
No conectaba porque el servidor debe tener abiertos los siguientes puertos:
1723 TCP
47 UDP
Además el rango de direcciones IP debe ser diferente al de las IP's "normales" de los ordenadores.
http://www.elrincondelprogramador.com/
default.asp?pag=articulos/leer.asp&id=55
He tenido dos problemas:
No conectaba porque el servidor debe tener abiertos los siguientes puertos:
1723 TCP
47 UDP
Además el rango de direcciones IP debe ser diferente al de las IP's "normales" de los ordenadores.
lunes, 17 de marzo de 2008
Visual Basic: Update requiere que UpdateCommand sea válido cuando se pasa la colección DataRow con filas modificadas.
Un error que me ha dado algunos problemas. ¿Cómo se soluciona?
Si se ha hecho con el diseñador:
¿La tabla tiene algún campo clave? Mirar el DataSet y la BD real.
Si se ha hecho por código el TableAdapter
'---Clave primaria
Dim keys(0) As DataColumn
keys(0) = DataTable1.Columns("Codigo_Cli")
DataTable1.PrimaryKey = keys
'---ComandosBasicos
ComandosBasicos = New OleDb.OleDbCommandBuilder(Adaptador1)
Adaptador1.InsertCommand = ComandosBasicos.GetInsertCommand
Adaptador1.UpdateCommand = ComandosBasicos.GetUpdateCommand
Adaptador1.DeleteCommand = ComandosBasicos.GetDeleteCommand
Si se ha hecho con el diseñador:
¿La tabla tiene algún campo clave? Mirar el DataSet y la BD real.
Si se ha hecho por código el TableAdapter
'---Clave primaria
Dim keys(0) As DataColumn
keys(0) = DataTable1.Columns("Codigo_Cli")
DataTable1.PrimaryKey = keys
'---ComandosBasicos
ComandosBasicos = New OleDb.OleDbCommandBuilder(Adaptador1)
Adaptador1.InsertCommand = ComandosBasicos.GetInsertCommand
Adaptador1.UpdateCommand = ComandosBasicos.GetUpdateCommand
Adaptador1.DeleteCommand = ComandosBasicos.GetDeleteCommand
jueves, 13 de marzo de 2008
UNMOUNTABLE_BOOT_VOLUME
Empiezo el primer post a lo bestia. Con un problema que he tenido esta mañana.
Tras poner una memoria nueva el Windows XP reiniciaba siempre que intentaba arrancar.
Accedí al menu de arranque de XP pulsado repetidas veces F8 antes de que empiece a cargar. Para no tener problemas se puede apretar F8 desde que se enciende la máquina.
Posteriormente entrar en la opción desactivar reiniciado automática para que nos enseñe el fantástico pantallazo azul con un error llamado UNMOUNTABLE_BOOT_VOLUME.
En la página de Microsoft proponen la siguiente solución:
Para ello, siga estos pasos:
1. Inicie el equipo utilizando los discos de inicio de Windows o con el disco de instalación de Windows si el equipo puede iniciarse desde la unidad de CD.
2. Cuando aparezca la pantalla Programa de instalación, presione R para seleccionar la opción de reparación.
3. Si tiene un equipo con arranque dual o múltiple, seleccione la instalación de Windows a la que desee tener acceso desde la consola de recuperación.
4. Escriba la contraseña de administrador cuando se le indique.
Nota: si no existe ninguna contraseña de administrador, presione Entrar.
5. En el símbolo del sistema, en la unidad donde está instalado Windows, escriba chkdsk /r y presione Entrar.
6. En el símbolo del sistema, escriba exit y presione Entrar para reiniciar el equipo.
Si este procedimiento no funciona, repítalo y utilice el comando fixboot en el paso 5 en lugar del comando chkdsk /r.
---
Desafortunadamente en mi caso el disco duro estaba mal. ¡Uf!
Tras poner una memoria nueva el Windows XP reiniciaba siempre que intentaba arrancar.
Accedí al menu de arranque de XP pulsado repetidas veces F8 antes de que empiece a cargar. Para no tener problemas se puede apretar F8 desde que se enciende la máquina.
Posteriormente entrar en la opción desactivar reiniciado automática para que nos enseñe el fantástico pantallazo azul con un error llamado UNMOUNTABLE_BOOT_VOLUME.
En la página de Microsoft proponen la siguiente solución:
Para ello, siga estos pasos:
1. Inicie el equipo utilizando los discos de inicio de Windows o con el disco de instalación de Windows si el equipo puede iniciarse desde la unidad de CD.
2. Cuando aparezca la pantalla Programa de instalación, presione R para seleccionar la opción de reparación.
3. Si tiene un equipo con arranque dual o múltiple, seleccione la instalación de Windows a la que desee tener acceso desde la consola de recuperación.
4. Escriba la contraseña de administrador cuando se le indique.
Nota: si no existe ninguna contraseña de administrador, presione Entrar.
5. En el símbolo del sistema, en la unidad donde está instalado Windows, escriba chkdsk /r y presione Entrar.
6. En el símbolo del sistema, escriba exit y presione Entrar para reiniciar el equipo.
Si este procedimiento no funciona, repítalo y utilice el comando fixboot en el paso 5 en lugar del comando chkdsk /r.
---
Desafortunadamente en mi caso el disco duro estaba mal. ¡Uf!
Suscribirse a:
Entradas (Atom)