Как объединить циклы, чтобы назначить значение для текстового поля - PullRequest
0 голосов
/ 24 мая 2018

У меня есть этот код для пользовательской формы, и я пытаюсь сократить его до одного цикла (так как я не выяснил, как это сделать, я просто сделал один цикл для каждого года).

picture

Он принимает данные от пользователя и сохраняет нечетные значения текстового поля в первых 6 строках таблицы Excel.За ними следуют четные номера текстовых полей в следующих 6 строках таблицы Excel (за 12 месяцев). Текстовые поля в верхней части каждого года имеют нечетные номера (1,3,5,7,9,11, для полей в 89; 13,15,17,19,21,23 для ящиков в 90 и т. Д.).Мой код делает это, пока не достигнет 95, но код слишком велик и может быть сведен к одному циклу.Вот код:

Private Sub Inserir_Click()

Dim ws As Worksheet
Set ws = Worksheets("Planilha1")

'89

x = 1
y = 7
i = 0
j = 5

Do While x < 7

ws.Cells(x, 1).Value = Me.Controls("Textbox" & x + i).Value

x = x + 1
i = i + 1

Loop

Do While y < 13

ws.Cells(y, 1).Value = Me.Controls("Textbox" & y - j).Value

y = y + 1
j = j - 1

Loop

'90

Z = 13
w = 19
k = 0
m = 5

Do While Z < 19

ws.Cells(Z, 1).Value = Me.Controls("Textbox" & Z + k).Value

Z = Z + 1
k = k + 1

Loop

Do While w < 25

ws.Cells(w, 1).Value = Me.Controls("Textbox" & w - m).Value

w = w + 1
m = m - 1

Loop

'91

a = 25
b = 31
n = 0
o = 5

Do While a < 31

ws.Cells(a, 1).Value = Me.Controls("Textbox" & a + n).Value

a = a + 1
n = n + 1

Loop

Do While b < 37

ws.Cells(b, 1).Value = Me.Controls("Textbox" & b - o).Value

b = b + 1
o = o - 1

Loop

'92

e = 37
f = 43
g = 0
h = 5

Do While e < 43

ws.Cells(e, 1).Value = Me.Controls("Textbox" & e + g).Value

e = e + 1
g = g + 1

Loop

Do While f < 49

ws.Cells(f, 1).Value = Me.Controls("Textbox" & f - h).Value

f = f + 1
h = h - 1

Loop

'93

aa = 49
bb = 55
cc = 0
dd = 5

Do While aa < 55

ws.Cells(aa, 1).Value = Me.Controls("Textbox" & aa + cc).Value

aa = aa + 1
cc = cc + 1

Loop

Do While bb < 61

ws.Cells(bb, 1).Value = Me.Controls("Textbox" & bb - dd).Value

bb = bb + 1
dd = dd - 1

Loop

'94

xx = 61
yy = 67
zz = 0
ww = 5

Do While xx < 67

ws.Cells(xx, 1).Value = Me.Controls("Textbox" & xx + zz).Value

xx = xx + 1
zz = zz + 1

Loop

Do While yy < 73

ws.Cells(yy, 1).Value = Me.Controls("Textbox" & yy - ww).Value

yy = yy + 1
ww = ww - 1

Loop

'95

ax = 73
ay = 79
az = 0
aw = 5

Do While ax < 79

ws.Cells(ax, 1).Value = Me.Controls("Textbox" & ax + az).Value

ax = ax + 1
az = az + 1

Loop

Do While ay < 85

ws.Cells(ay, 1).Value = Me.Controls("Textbox" & ay - aw).Value

ay = ay + 1
aw = aw - 1

Loop

End Sub

1 Ответ

0 голосов
/ 25 мая 2018

Не совсем уверен, что вы ищете, но я думаю, вы должны попробовать что-то вроде этого dim массив с вашими текстовыми полями, а затем сделать для каждого, что-то вроде этого:

Dim Arr_TextStat = {TextBox1, TextBox2, TextBox3, TextBox4, TextBox5, Textbox6}
For each TextBoxM in Arr_TextStat
Select Case TextBoxM.Text 

Case >20 
ws.Cells(y, 1).Value = Me.Controls("Textbox" & y - j).Value

y = y + 1
j = j - 1

Case > 14 
ws.Cells(ay, 1).Value = Me.Controls("Textbox" & ay - aw).Value

ay = ay + 1
aw = aw - 1

End select
Next

Идея состоит в том, чтобыЗациклите значение каждого текстового поля и верните действие с вашими определенными случаями.

Вот так я перебираю текстовые поля, заполняя их или создавая события на основе их значений.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...