jueves, 4 de diciembre de 2008

VBA Excel: Brain Training


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

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

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).


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.

=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 ?>

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:

<!-- 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.


<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)

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.

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.

<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.

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

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.

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

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!