VBA обновить публичный массив из пользовательской формы - PullRequest
0 голосов
/ 02 февраля 2012

У меня есть VBA Sub, который создает и обрабатывает массив:

Option Base 1
Public myArr(20, 10) As Variant

Sub Stackoverflow()
Dim x, y As Integer
    'Put some values to array (only in the first 15 rows)
    For x = 1 To 15
        For y = 1 To 10
            myArr(x, y) = (x * y + 8)
        Next y
    Next x
End Sub

Затем существует пользовательская форма с командной кнопкой, которая должна иметь возможность обрабатывать массив myArr.

Private Sub commandbutton_Click()
Dim a, b As Integer
    'Put some other values in the remaining rows
    For a = 16 To 20
        For b = 1 To 10
            myArr(a, b) = (a * b + 3)
        Next b
    Next a
End Sub

Как передать массив пользовательской форме? А как Sub может просматривать обновленный массив? Спасибо

Ответы [ 2 ]

0 голосов
/ 02 февраля 2012

Это публичный массив, доступный из любой формы в вашем приложении.,,зачем тебе это все равно передавать?Этот описывает, как передать параметр в формы в vba доступа.

Передача параметров между формами в MS Access

0 голосов
/ 02 февраля 2012

Ваш код работал отлично для меня, как только я его закончил. Я могу только предположить, что вы не знаете, как вызвать пользовательскую форму.

Я скопировал ваш Stackoverflow() в модуль без изменений.

К тому же модулю я добавил:

Sub Main()

  Dim RowMyArr As Long
  Dim ColMyArr As Long

  Load UserForm1

  Call Stackoverflow

  UserForm1.Show

  Debug.Print "    ";
  For ColMyArr = LBound(myArr, 1) To UBound(myArr, 1)
    Debug.Print Right("   " & ColMyArr, 4) & " ";
  Next
  Debug.Print

  For RowMyArr = LBound(myArr, 2) To UBound(myArr, 2)
    Debug.Print Right("  " & RowMyArr, 3) & " ";
    For ColMyArr = LBound(myArr, 1) To UBound(myArr, 1)
      Debug.Print Right("   " & myArr(ColMyArr, RowMyArr), 4) & " ";
    Next
    Debug.Print
  Next

End Sub

Я создал форму пользователя и не изменил имя по умолчанию для UserForm1. Я добавил кнопку, назвал ее commandbutton и скопировал ваш код в область кода формы. Перед End Sub я добавил Unload UserForm1, чтобы закрыть и выйти из формы.

Я запустил Main, и в ближайшее окно было выведено следующее:

       1    2    3    4    5    6    7    8    9   10   11   12   13   14   15   16   17   18   19   20 
  1    9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   19   20   21   22   23 
  2   10   12   14   16   18   20   22   24   26   28   30   32   34   36   38   35   37   39   41   43 
  3   11   14   17   20   23   26   29   32   35   38   41   44   47   50   53   51   54   57   60   63 
  4   12   16   20   24   28   32   36   40   44   48   52   56   60   64   68   67   71   75   79   83 
  5   13   18   23   28   33   38   43   48   53   58   63   68   73   78   83   83   88   93   98  103 
  6   14   20   26   32   38   44   50   56   62   68   74   80   86   92   98   99  105  111  117  123 
  7   15   22   29   36   43   50   57   64   71   78   85   92   99  106  113  115  122  129  136  143 
  8   16   24   32   40   48   56   64   72   80   88   96  104  112  120  128  131  139  147  155  163 
  9   17   26   35   44   53   62   71   80   89   98  107  116  125  134  143  147  156  165  174  183 
 10   18   28   38   48   58   68   78   88   98  108  118  128  138  148  158  163  173  183  193  203 

Я не проверял значения, но я предполагаю, что они правильные.

...