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. В книге есть несколько событий и методов. Также рабочий лист имеет несколько событий и методов.
В объектной модели у вас есть объекты, имеющие события и методы. методы - это действия, которые вы можете делать с объектом. события - это вещи, которые могут произойти с объектом. Объекты могут содержать другие объекты и т.д. Вы можете создавать новые объекты, такие как листы или диаграммы.