variable - procedimientos en excel
Excel VBA llamado sub desde otro sub con múltiples entradas, salidas de diferentes tamaños (3)
Para llamar a un sub dentro de otro sub, solo necesita hacer:
Call Subname()
Entonces, donde tienes CalculateA(Nc,kij, xi, a1, a)
necesitas tener una call CalculateA(Nc,kij, xi, a1, a)
Como el que ejecuta el primer problema es para que usted decida, cuando quiera ejecutar un sub, puede ir a la lista de macro, seleccionar el que desea ejecutar y ejecutar, también puede darle un atajo de teclado y solo tiene que presionar esas claves, en subs secundarias usualmente lo hago como Private sub CalculateA(...)
porque de esta manera no aparece en la lista de macros y es más fácil trabajar
Espero que ayude, Bruno
PD: Si tiene alguna otra pregunta, solo pregunte, pero esta no es una comunidad en la que solicita el código. Llega con una pregunta o un código que no se está ejecutando y pida ayuda, no como lo hizo "Lo haría ser genial si pudieras escribirlo en el formato Excel VBA ".
Me gustaría llamar a un sub de otro sub dentro en el mismo módulo. El primer sub sería mi código principal y allí llamaría a la segunda subrutina. La segunda subrutina recibe entradas múltiples como matrices enteras, dobles, dobles y matrices dobles. El tamaño de las matrices y las matrices se conocen y almacenan en una variable entera. El sub también devuelve varias salidas. Entonces, me gustaría hacer algo como esto.
sub Main()
Nc As integer
Dim kij(1 To Nc, 1 To Nc), xi(1 to Nc), a1 As Double
''I assign values to my variables from the excelsheet e.g. Nc=Cells(1,1) etc.
CalculateA(Nc,kij, xi, a1, a)
Cells(5,5)=a
end sub
sub CalculateA(Nc as integer,kij as matrix double, xi as array double, a as Double)
a=0
For i=1 To Nc
For j=1 To Nc
a = a + kij(i,j)*x(i)*x(j)
Next j
Next i
a = a*a1
end sub
¿Cómo sabe qué submarino es el submarino principal donde comienza a correr? ¿Puedo poner el secundario en la parte superior y el código de alguna manera comienza desde la subrutina inferior?
Los subs de VBA no son macros. Un sub de VBA puede ser una macro, pero no es obligatorio.
El término "macro" solo se usa para acciones registradas del usuario. a partir de estas acciones, se genera un código y se almacena en un sub. Este código es simple y no proporciona estructuras potentes como bucles, por ejemplo, Do .. until, for ... next, while ... do, y otros.
¡La forma más elegante es diseñar y escribir su propio código VBA sin usar las funciones de macro!
VBA es un lenguaje basado en objetos y orientado a eventos. Los subs, o bette lo llaman "sub rutinas", son iniciados por eventos dedicados. El evento puede ser presionar un botón o abrir un libro de trabajo y muchos otros eventos muy específicos.
Si te enfocas en VB6 y no en VBA, entonces puedes decir que siempre hay una ventana principal o una forma principal. Este formulario se inicia si inicia el ejecutable compilado "xxxx.exe".
En VBA no tiene nada como esto, pero tiene un archivo XLSM que es iniciado por Excel. Puede adjuntar un código al evento Workbook_Open. Este evento se genera si abre el archivo de Excel deseado que se denomina libro de trabajo. Dentro del libro de trabajo tienes hojas de trabajo.
Es útil familiarizarse con el llamado modelo de objetos de Excel. El libro de trabajo tiene varios eventos y métodos. Además, la hoja de trabajo tiene varios eventos y métodos.
En el modelo basado en objetos tiene objetos, que tienen eventos y métodos. Los métodos son acciones que puedes hacer con un objeto. los eventos son cosas que le pueden suceder a un objeto. Un objeto puede contener otros objetos, y así sucesivamente. Puede crear objetos nuevos, como hojas o cuadros.
Estas son realmente dos preguntas.
El primero se responde aquí: Llamar a un Sub en VBA
Para el segundo, protip: no hay una subrutina principal en VBA. Olvídese de los lenguajes procesales de uso general. Los subs de VBA son "macros": puede ejecutarlos presionando Alt + F8 o agregando un botón a su hoja de cálculo y llamando al sub que desea del subprograma "ButtonX_Click" generado automáticamente.