首页 > 解决方案 > 如何组合循环以将值分配给文本框

问题描述

我有这个用户表单的代码,我正试图将它减少到一个循环(因为我不知道怎么做,所以我每年只做一个循环)。

图片

它从用户那里获取数据并将奇数文本框值存储在 Excel 表的前 6 行中。其次是excel表接下来6行中的偶数文本框编号(总共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

标签: excelvbaloopsuserform

解决方案


不完全确定你在追求什么,但我认为你应该尝试用你的文本框来暗淡一个数组,然后为每个数组做一个,如下所示:

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

这个想法是遍历每个文本框的值并返回一个带有您定义的案例的操作。

这就是我循环填充文本框或根据它们的值创建事件的方式。

希望能帮助到你


推荐阅读