Excel VBA, вызывающий sub от другого sub с несколькими входами, выходы разных размеров

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

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

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

Ответы

Ответ 1

Чтобы вызвать сабвуфер внутри другого сабвуфера, вам нужно всего лишь:

Call Subname()

Таким образом, если у вас есть CalculateA(Nc,kij, xi, a1, a) вам нужно иметь call CalculateA(Nc,kij, xi, a1, a)

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

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

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

Ответ 2

Это действительно два вопроса.

На первый ответ отвечает: Вызов Sub в VBA

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

Ответ 3

Подмножества VBA не являются макросами. Суббота VBA может быть макросом, но она не обязательна.

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

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

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

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

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

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

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