2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 VBA инициализация массива
Сообщение29.04.2011, 09:24 
Здравствуйте! Подскажите, пожалуйста, как правильно инициализировать в VBA массив, который состоит из элементов: 12 16 1 1 11 6 8 10 15 9.

 
 
 
 Re: VBA инициализация массива
Сообщение29.04.2011, 11:00 
  1. Dim a As Variant 
  2. a = Array(12, 16, 1, 1, 11, 6, 10, 15, 9) 

 
 
 
 Re: VBA инициализация массива
Сообщение29.04.2011, 11:03 
не получилось, вышла ошибка "Invalid outside procedure" и выделен первый элемент массива

 
 
 
 Re: VBA инициализация массива
Сообщение29.04.2011, 11:37 
Если у Вас глобальный массив, инициализировать его придется в какой-нибудь подпрограмме.

Используется синтаксис Visual Basic
  1. Dim g As Variant, f As Variant
  2.  
  3. Sub init()
  4.     g = [{1, 2, 3}]
  5.     f = [{1, 2; 3, 4; 5, 6}]
  6. End Sub
  7.  
  8. Sub test()
  9.     Dim b As Variant, c As Variant
  10.     Call init
  11.     b = f(1, 2)
  12.     c = g(1)
  13.     MsgBox b
  14.     MsgBox c
  15. End Sub

 
 
 
 Re: VBA инициализация массива
Сообщение29.04.2011, 11:42 
К сожалению, я не смог до конца понять работу с массивами в этом языке, давайте, я приведу задание:
"Что будет напечатано в окне отладки программы после выполнения процедуры Massiv(), если в исходном массиве записаны следующие числа?
12 16 1 1 11 6 8 10 15 9
Dim A(1 To 10) As Integer
Const n = 10
Private Sub Massiv()
Dim Sa As Integer
Dim i As Byte, k As Byte
For i = 1 To n
Sa = Sa + A(i) / n
Next
k = 0
For i = 1 To n
If A(i) < Sa Then A(i) = Sa: k = k + 1
Next
Debug.Print Sa; k
End Sub"

 
 
 
 Re: VBA инициализация массива
Сообщение29.04.2011, 11:48 
Что конкретно непонятно?

Если вставляете в сообщение код, пользуйтесь, пожалуйста, тегом syntax:
Код:
[syntax lang=vb lines=n]
Dim A(1 To 10) As Integer
Const n = 10
Private Sub Massiv()
    Dim Sa As Integer
    ...
End Sub
[/syntax]

 
 
 
 Re: VBA инициализация массива
Сообщение29.04.2011, 11:51 
Не понятно как инициализировать массив с заданными элементами, и ещё инициализация массива 2D с заданными элементами. Инициализация обычного массива понятна, а вот если надо задать конкретные элементы, в учебнике моём этого нет, а в экзамене есть!

 
 
 
 Re: VBA инициализация массива
Сообщение29.04.2011, 11:58 
Чем Вас не устраивает мой ответ здесь?
g - одномерный массив (1, 2, 3), f - двумерный ((1, 2), (3, 4), (5, 6)).

 
 
 
 Re: VBA инициализация массива
Сообщение29.04.2011, 12:10 
Извините, не сообразил, правильно ли я Вас понял:
код: [ скачать ] [ спрятать ]
Используется синтаксис Visual Basic
  1. Dim A As Variant
  2. Sub init()
  3. g = [(12, 16, 1, 1, 11, 6, 8, 10, 15, 9)]
  4. End Sub
  5. Const n = 10
  6. Private Sub Massiv()
  7. Dim Sa As Integer
  8. Dim i As Byte, k As Byte
  9. For i = 1 To n
  10. Sa = Sa + A(i) / n
  11. Next
  12. k = 0
  13. For i = 1 To n
  14. If A(i) < Sa Then A(i) = Sa: k = k + 1
  15. Next
  16. Debug.Print Sa; k
  17. End Sub
  18.  

Так получил ответ 0 0, ответ не верный

 
 
 
 Re: VBA инициализация массива
Сообщение29.04.2011, 12:46 
Есть два варианта:

Если массив описан как Variant, инициализировать его можно константным выражением
Используется синтаксис Visual Basic
Dim A As Variant
Conts n = 10

Sub Test
    A = [{12, 16, 1, 1, 11, 6, 8, 10, 15, 9}]
    ' Или A = Array(12, 16, 1, 1, 11, 6, 8, 10, 15, 9)
   Call Massiv
End Sub

Private Sub Massiv()
    ...
End Sub

Если массив уже размещен (как в Вашем случае), инициализировать придется поэлементно:
Используется синтаксис Visual Basic
Dim A(1 To 10) As Integer
Conts n = 10

Sub Test
    A(1) = 12
    A(2) = 16
    ...
    A(10) = 9
    Call Massiv
End Sub

Private Sub Massiv()
    ...
End Sub

В обоих случаях запускать надо Test

 
 
 
 Re: VBA инициализация массива
Сообщение29.04.2011, 12:56 
уф! получилось! Большое Вам Спасибо!
Подскажите, ещё правильно ли я понимаю, что если бы был двумерный массив то синтаксис был бы таким:
Используется синтаксис Visual Basic
  1. Sub Test
  2.      A(1) = 12, n1
  3.      A(2) = 16, n2
  4.      ...
  5.      A(10) = 9, n10
  6.      Call Massiv
  7. End Sub
  8.  

 
 
 
 Re: VBA инициализация массива
Сообщение29.04.2011, 13:05 
EgorAvtoMMG в сообщении #439921 писал(а):
правильно ли я понимаю, что если бы был двумерный массив то синтаксис был бы таким
Неправильно понимаете. Правильное понимание такое:
Используется синтаксис Visual Basic
Dim A(1 To 10, 1 To 2) As Integer
Sub Test()
    A(1, 1) = 12
    A(1, 2) = n1
    A(2, 1) = 16
    A(2, 2) = n2
    ...
End Sub

 
 
 
 Re: VBA инициализация массива
Сообщение29.04.2011, 13:10 
Всё понял, большое Спасибо!

 
 
 [ Сообщений: 13 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group