De nada

.
Sí, funciona con word porque lo que hace objget es devolver la referencia a un objeto com a partir de un fichero o proceso. Por eso si lo cambias a un fichero word, engancha la referencia al objeto com de word. Esto pasaría con muchos más archivos a los que se pudiese referenciar un objeto com.
En el código que he puesto, cuando recupero el nombre o el interface del objeto con objname me devuelve _Workbook (El libro de trabajo de Excel). Este nombre pertenecería a la creacción de otro objeto distinto. Este se crearía de esta forma: ObjCreate("Excel.Sheet"). Esto si se insertaría. Yo creo que esto se inserta porque creas un objeto libro de trabajo. En cambio, con ObjCreate("Excel.Application") devuelve _Application (La aplicación excel). Y como llamas a toda la aplicación, esta no es insertable. Lo que haces es abrir la aplicación.
Todo esto es pura congetura mía. En realidad no estoy documentado en esto.
Si os parece más correcto podeis hacer lo mismo de esta forma:
Código: Seleccionar todo
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
;~ $oMyError = ObjEvent("AutoIt.Error","MyErrFunc")
$oExcel = ObjCreate("Excel.sheet") ; Get an Excel Object from an existing filename
if IsObj($oExcel) then
; Create a simple GUI for our output
$gui=GUICreate ( "Embedded ActiveX Test", 640, 580, (@DesktopWidth-640)/2, (@DesktopHeight-580)/2 , $WS_OVERLAPPEDWINDOW + $WS_CLIPCHILDREN )
$FileName=@ScriptDir & "\libro1.xls"
if not FileExists($FileName) then
Msgbox (0,"Excel File Test","Can't run this test, because it requires an Excel file in "& $FileName)
Exit
endif
$oExcel.application.WorkBooks.open(@ScriptDir & "\libro1.xls")
$GUI_ActiveX= GUICtrlCreateObj($oExcel,10, 10 , 600 , 300 )
$numBarras=$oExcel.commandbars.count ;número de barras de herramientas que tiene el excel.
For $n=1 To $numBarras
$oExcel.commandbars($n).enabled=False ;recorro todas la barras de herramientas y las deshabilito ;).
Next
GUISetState () ;Show GUI
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
EndSelect
Wend
GUIDelete ()
$oExcel.Close ; Close the Excel workbook
EndIf
Exit
; This is my custom error handler
Func MyErrFunc()
;~ $HexNumber=hex($oMyError.number,8)
;~ Msgbox(0,"AutoItCOM Test","We intercepted a COM Error !" & @CRLF & @CRLF & _
;~ "err.description is: " & @TAB & $oMyError.description & @CRLF & _
;~ "err.windescription:" & @TAB & $oMyError.windescription & @CRLF & _
;~ "err.number is: " & @TAB & $HexNumber & @CRLF & _
;~ "err.lastdllerror is: " & @TAB & $oMyError.lastdllerror & @CRLF & _
;~ "err.scriptline is: " & @TAB & $oMyError.scriptline & @CRLF & _
;~ "err.source is: " & @TAB & $oMyError.source & @CRLF & _
;~ "err.helpfile is: " & @TAB & $oMyError.helpfile & @CRLF & _
;~ "err.helpcontext is: " & @TAB & $oMyError.helpcontext _
;~ )
;~ SetError(1) ; to check for after this function returns
Endfunc
El resultado es el mismo, pero llamais directamente al objeto adecuado (para poder insertarlo en la gui). Puede que sea más correcto para que no se cuele ningún otro objeto....como un objeto word.
Para información, a un objeto word le pasa lo mismo. Puedes crear createobj("word.basic") y createobj("word.application")....creo que era así. Con vba de word he trabajado mucho menos.
Y porque no se puede hacer estas cosas con bbdd??? Pues si te digo la verdad nunca se me ha pasado por la cabeza insertar algo de access. No se nada sobre ese tema. Pero te digo una cosa, las bases de datos se suelen crear con programas como por ejemplo el access, y una vez creadas (la estructura) se suele conectase por código con ellas y trabajar directamente por código. Eso es un mundo a parte bastante extenso.
Yo he trabajado hace años mucho con access y conexión a la bbdd por ado. También lo hice con dao, pero esta muy desfasado. Bueno......no me voy a meter en este tema que como he dicho antes es un mundo aparte.
Bueno, espero haber enseñado hoy algo

.
Saludos.