Excel VBA вызывает сабвуфер из другого сабвуфера с несколькими входами, выходами разных размеров

Я хотел бы вызвать подпункт из другого подпункта внутри того же модуля. Первая подпрограмма была бы моим основным кодом, и там я бы назвал вторую подпрограмму. Вторая подпрограмма получает несколько входных данных в виде целых, двойных, двойных массивов и двойных матриц. Размер массивов и матриц известен и сохраняется в целочисленной переменной. Сабвуфер также возвращает несколько выходов. Итак, я хотел бы сделать что-то вроде этого.

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

Как он узнает, какой саб является основным сабом, где он начинает работать. Могу ли я поместить вторичную подпрограмму сверху, а код как-то начинается с нижней подпрограммы?

 Albin11 дек. 2018 г., 15:48
частично дубликатВызов сабвуфера в VBA, Вызов сабвуфера в VBA "только" отвечает на вопрос о том, как вызвать другой саб, и это дает лучшее объяснение этого вопроса.
 MackM21 июл. 2015 г., 21:09
возможный дубликатВызов сабвуфера в VBA

Ответы на вопрос(3)

Первый ответ здесь:Вызов сабвуфера в VBA

Во-вторых, protip: в VBA нет основной подпрограммы. Забудьте процедурные языки общего назначения. VBA сабы "макросы» - вы можете запустить их, нажав Alt + F8 или добавив кнопку на рабочий лист и вызвав нужную подпрограмму из автоматически сгенерированного "ButtonX_Click» к югу.

Call Subname()

Итак, где у вас естьCalculateA(Nc,kij, xi, a1, a) тебе нужно иметьcall CalculateA(Nc,kij, xi, a1, a)

Как работает первая проблема это 'Если вы хотите запустить подпрограмму, вы можете перейти к списку макросов, выбрать тот, который вы хотите запустить, и запустить его, вы также можете назначить ему ярлык быстрого доступа и только нажимать эти клавиши на вторичных подпрограммах. я обычно делаю это какPrivate sub CalculateA(...) потому что это не появляется в списке макросов илегче работать

Надеюсь, это поможет, Бруно

PS: если у вас есть какие-либо вопросы, просто спросите, но это неВ сообществе, где вы просите код, вы приходите сюда с вопросом или кодом, который небегу и прошу помощи, а не как тыБыло бы здорово, если бы вы могли написать его в формате Excel VBA. "

но это не обязательно.

Семестр "макро» используется только для зарегистрированных действий пользователя. из этих действий код генерируется и сохраняется в подпрограмме. Этот код прост и не предоставляет мощных структур, таких как циклы, например, Do .., пока, для ... next, while .. do и других.

Более элегантный способ - создавать и писать свой собственный код VBA без использования макросов!

VBA - это объектно-ориентированный и событийно-ориентированный язык. Сабы, или лучше позвониподпрограммы ", запускаются специальными мероприятиями. Событие может быть нажатием кнопки или открытием рабочей книги и многими другими очень специфическими событиями.

Если вы сосредоточены на VB6, а не на VBA, то вы можете утверждать, что всегда есть главное окно или основная форма. Эта форма запускается, если вы запускаете скомпилированный исполняемый файл "xxxx.exe».

В VBA у вас ничего подобного нет, но у вас есть файл XLSM, который запускается Excel. Вы можете прикрепить некоторый код к событию Workbook_Open. Это событие генерируется, если вы открываете нужный файл Excel, который называется рабочей книгой. Внутри рабочей книги у вас есть рабочие листы.

Полезно поближе познакомиться с так называемой объектной моделью Excel. Рабочая тетрадь имеет несколько событий и методов. Также на листе есть несколько событий и методов.

В объектной модели у вас есть объекты, у которых есть события и методы. методы - это действия, которые вы можете выполнять с объектом. события - это вещи, которые могут случиться с объектом. Объект может содержать другие объекты и т. Д. Вы можете создавать новые объекты, такие как листы или диаграммы.

 Andrew S02 февр. 2016 г., 08:15
Как создать подпрограмму в VBA, а затем вызвать ее из макроса на вкладке разработчика? Если Excel не предоставляет эту возможность, это серьезно испорчено.

Ваш ответ на вопрос