CreateObject (Función, Visual Basic)

Actualización: noviembre 2007

Crea y devuelve una referencia a un objeto COM. CreateObject no se puede utilizar para crear instancias de clases en Visual Basic a menos que estas clases se expongan explícitamente como componentes COM.

Public Shared Function CreateObject( _
   ByVal ProgId As String, _
   Optional ByVal ServerName As String = "" _
) As Object

Parámetros

  • ProgId
    Obligatorio. String. Identificador de programa del objeto que se va a crear.

  • ServerName
    Opcional. String. Nombre del servidor de red en que se va a crear el objeto. Si ServerName es una cadena vacía (""), se utiliza el equipo local.

Excepciones

Tipo de excepción

Número de error

Condición

Exception

429

No se encuentra ProgId o no se ha suministrado.

O bien,

Se produce un error en la función DnsValidateName de ServerName, debido probablemente a que su longitud supera los 63 caracteres o contiene un carácter no válido.

Exception

462

El servidor no está disponible.

FileNotFoundException

53

No existe ningún objeto del tipo especificado.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo, siempre que sea posible, debe considerarse la posibilidad de sustituir dicho control de errores por Información general sobre el control estructurado de excepciones de Visual Basic.

Comentarios

Para crear una instancia de un componente COM, asigne el objeto devuelto por CreateObject a una variable de objeto:

Sub CreateADODB()
   Dim adoApp As Object
   adoApp = CreateObject("ADODB.Connection")
End Sub

El tipo de variable de objeto que utilice para almacenar el objeto devuelto puede afectar al rendimiento de la aplicación. La declaración de una variable de objeto con la cláusula As Object crea una variable que puede contener una referencia a cualquier tipo de objeto. Sin embargo, el acceso al objeto a través de esa variable se enlaza en tiempo de ejecución; es decir, el enlace se produce cuando se ejecuta el programa. Existen muchas razones por las cuales se deben evitar los enlaces en tiempo de ejecución, incluido el rendimiento más lento de la aplicación.

Puede crear una variable de objeto que se enlace en tiempo de compilación, es decir, el enlace se produce cuando se compila el programa. Para ello, agregue una referencia a la biblioteca de tipos del objeto desde la ficha COM del cuadro de diálogo Agregar referencia situado en el menú Proyecto. A continuación, declare la variable de objeto del tipo específico de su objeto. En la mayoría de los casos, resulta más eficaz utilizar la instrucción Dim y un ensamblado de interoperabilidad primario para crear objetos que usar la función CreateObject.

Interactuar con código no administrado

Otro problema es que los objetos COM utilizan código no administrado; es decir, código sin la ventaja de Common Language Runtime. Mezclar el código administrado de Visual Basic con código no administrado de COM entraña cierta complejidad. Cuando agrega una referencia a un objeto COM, Visual Basic busca un ensamblado de interoperabilidad primario para esa biblioteca; si encuentra uno, lo utiliza. Si no lo encuentra, crea un ensamblado de interoperabilidad que contenga clases de interoperabilidad local para cada clase de la biblioteca COM. Para obtener más información, vea Interoperabilidad COM en aplicaciones .NET Framework.

Siempre que sea posible, se deben utilizar objetos con enlace seguro y ensamblados de interoperabilidad primarios. En los ejemplos siguientes se utiliza la función CreateObject con objetos de Microsoft Office únicamente con fines demostrativos. Sin embargo, estos objetos son más fáciles de utilizar y más confiables cuando se utilizan con el ensamblado de interoperabilidad primario adecuado.

Crear un objeto en un equipo remoto

Puede crear un objeto en un equipo remoto de red; para ello, transfiera el nombre del equipo al argumento ServerName de la función CreateObject. Ese nombre es el mismo que la parte del nombre del equipo de un recurso compartido: en un recurso compartido denominado "\\MyServer\Public", ServerName sería "MyServer".

Nota:

Consulte la documentación de COM (vea Microsoft Developer Network) para obtener información adicional sobre cómo hacer que una aplicación sea accesible en un equipo de red remoto. Es posible que necesite agregar una clave de Registro para la aplicación.

El siguiente código devuelve el número de versión de una instancia de Excel que se ejecuta en un equipo remoto denominado MyServer:

Sub CreateRemoteExcelObj()
    Dim xlApp As Object
    ' Replace string "\\MyServer" with name of the remote computer.
    xlApp = CreateObject("Excel.Application", "\\MyServer")
    MsgBox(xlApp.Version)
End Sub

Si el nombre de servidor remoto es incorrecto, o si no está disponible, se produce un error en tiempo de ejecución.

Nota:

Utilice CreateObject cuando no exista una instancia actual del objeto. Si ya se está ejecutando una instancia del objeto, se iniciará una nueva instancia y se creará un objeto del tipo especificado. Para utilizar la instancia actual o para iniciar la aplicación y hacer que cargue un archivo, utilice la función GetObject. Si un objeto se registró como un objeto de una única instancia, sólo se creará una instancia del objeto, con independencia del número de veces que se ejecute CreateObject.

Crear objetos de marco de trabajo

Sólo puede utilizar la función CreateObject para crear un objeto COM. Aunque no existe un mecanismo equivalente exacto para crear un objeto de .NET Framework, el control Activator del espacio de nombres System contiene métodos para crear objetos locales y remotos. En particular, el método CreateInstance o el método CreateInstanceFrom podrían resultar útiles.

Nota de seguridad:

La función CreateObject requiere permisos de código no administrado, lo que podría afectar a su ejecución en situaciones de confianza parcial. Para obtener más información, vea SecurityPermission y Permisos de acceso a código.

Ejemplo

En este ejemplo se utiliza la función CreateObject para crear una hoja de cálculo de Microsoft Excel y guardar la hoja en un archivo. Para utilizar este ejemplo, Excel debe instalarse en el equipo en el que se ejecuta el programa. Además, debe agregar una referencia a la biblioteca de tipos desde la ficha COM del cuadro de diálogo Agregar referencia situado en el menú Proyecto. El nombre de la biblioteca de tipos variará en función de la versión de Excel instalada en el equipo. Por ejemplo, la biblioteca de tipos de Microsoft Excel 2002 se denomina Biblioteca de objetos de Microsoft Excel 10.0.

Sub TestExcel()
    Dim xlApp As Microsoft.Office.Interop.Excel.Application
    Dim xlBook As Microsoft.Office.Interop.Excel.Workbook
    Dim xlSheet As Microsoft.Office.Interop.Excel.Worksheet

    xlApp = CType(CreateObject("Excel.Application"), _
                Microsoft.Office.Interop.Excel.Application)
    xlBook = CType(xlApp.Workbooks.Add, _
                Microsoft.Office.Interop.Excel.Workbook)
    xlSheet = CType(xlBook.Worksheets(1), _
                Microsoft.Office.Interop.Excel.Worksheet)

    ' The following statement puts text in the second row of the sheet.
    xlSheet.Cells(2, 2) = "This is column B row 2"
    ' The following statement shows the sheet.
    xlSheet.Application.Visible = True
    ' The following statement saves the sheet to the C:\Test.xls directory.
    xlSheet.SaveAs("C:\Test.xls")
    ' Optionally, you can call xlApp.Quit to close the workbook.
End Sub

Notas para desarrolladores de dispositivos inteligentes

Esta función no es compatible.

Requisitos

Espacio de nombres:Microsoft.VisualBasic

Módulo: Interaction

**Ensamblado:**Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)

Vea también

Referencia

GetObject (Función, Visual Basic)

Instrucción Dim (Visual Basic)

Declare (Instrucción)

Exception

FileNotFoundException

Activator

CreateInstance

CreateInstanceFrom

Otros recursos

Interoperabilidad COM en aplicaciones .NET Framework

Interoperar con código no administrado