Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何组合循环以将值指定给文本框_Excel_Vba_Loops_Userform - Fatal编程技术网

Excel 如何组合循环以将值指定给文本框

Excel 如何组合循环以将值指定给文本框,excel,vba,loops,userform,Excel,Vba,Loops,Userform,我为一个userform编写了这段代码,我正试图将它简化为一个循环(因为我不知道如何做,我只是每年做一个循环) 它从用户处获取数据,并将奇数文本框值存储在excel工作表的前6行中。在excel工作表的下6行中紧跟偶数文本框编号(总共12个月)。每年顶部的文本框编号为奇数(89中的文本框编号为1,3,5,7,9,11;90中的文本框编号为13,15,17,19,21,23,以此类推)。我的代码会一直这样做直到达到95,但是代码太大了,可能会减少到一个循环。代码如下: Private Sub I

我为一个userform编写了这段代码,我正试图将它简化为一个循环(因为我不知道如何做,我只是每年做一个循环)

它从用户处获取数据,并将奇数文本框值存储在excel工作表的前6行中。在excel工作表的下6行中紧跟偶数文本框编号(总共12个月)。每年顶部的文本框编号为奇数(89中的文本框编号为1,3,5,7,9,11;90中的文本框编号为13,15,17,19,21,23,以此类推)。我的代码会一直这样做直到达到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
Private Sub Inserir\u Click()
将ws设置为工作表
设置ws=工作表(“Planilha1”)
'89
x=1
y=7
i=0
j=5
当x<7时执行此操作
ws.Cells(x,1).Value=Me.Controls(“文本框”&x+i).Value
x=x+1
i=i+1
环
当y<13时做
ws.Cells(y,1).Value=Me.Controls(“文本框”&y-j).Value
y=y+1
j=j-1
环
'90
Z=13
w=19
k=0
m=5
当Z<19时,执行此操作
ws.Cells(Z,1).Value=Me.Controls(“文本框”&Z+k).Value
Z=Z+1
k=k+1
环
当w<25时,不要这样做
ws.Cells(w,1).Value=Me.Controls(“文本框”&w-m).Value
w=w+1
m=m-1
环
'91
a=25
b=31
n=0
o=5
做一个<31的人
ws.Cells(a,1).Value=Me.Controls(“文本框”&a+n).Value
a=a+1
n=n+1
环
当b<37时做
ws.Cells(b,1).Value=Me.Controls(“文本框”&b-o).Value
b=b+1
o=o-1
环
'92
e=37
f=43
g=0
h=5
当e<43时做
ws.Cells(e,1).Value=Me.Controls(“文本框”&e+g).Value
e=e+1
g=g+1
环
当f<49时,不要这样做
ws.Cells(f,1).Value=Me.Controls(“Textbox”&f-h).Value
f=f+1
h=h-1
环
'93
aa=49
bb=55
cc=0
dd=5
当aa<55时,请执行此操作
ws.Cells(aa,1).Value=Me.Controls(“文本框”&aa+cc).Value
aa=aa+1
cc=cc+1
环
当bb<61时,不要这样做
ws.Cells(bb,1).Value=Me.Controls(“文本框”&bb-dd).Value
bb=bb+1
dd=dd-1
环
'94
xx=61
yy=67
zz=0
ww=5
当xx<67时,请执行此操作
ws.Cells(xx,1).Value=Me.Controls(“文本框”&xx+zz).Value
xx=xx+1
zz=zz+1
环
当yy<73时,请执行此操作
ws.Cells(yy,1).Value=Me.Controls(“文本框”&yy-ww.Value
yy=yy+1
ww=ww-1
环
'95
ax=73
ay=79
az=0
aw=5
在ax<79时执行此操作
ws.Cells(ax,1).Value=Me.Controls(“文本框”&ax+az).Value
ax=ax+1
az=az+1
环
在ay<85时执行
ws.Cells(ay,1).Value=Me.Controls(“文本框”&ay-aw).Value
ay=ay+1
aw=aw-1
环
端接头

不完全确定您想要的是什么,但我认为您应该尝试这样的方法,用文本框对数组进行调暗,然后对每个文本框进行调暗,例如:

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
其思想是循环遍历每个文本框的值,并返回一个包含已定义案例的操作

这就是我如何循环通过文本框填充它们或根据它们的值创建事件


希望它有帮助

您可以将更改的值放在工作表上,并使用
VLOOKUP
MATCH
检索正确的值,或者您可以使用
Select..Case
语句在VBA中选择正确的值。但是,这是一个可怕的东西,期待人们通过看,你可能想看看(尤其是“最小”的部分)。也许你可以只发布2个集合,然后自己找出添加其他集合的模式。它是关于循环的。我已经更新了你的标题,以便更能代表你的问题。@ashleedawg我已经更新了你的标题,也可以更新缩进:)在你学习循环和嵌套结构的同时,我建议你也借此机会学习,这将大大帮助你编写清晰的代码。没有使用有意义的变量名那么多,但几乎;-)如果你加入一张表单的快照,展示文本框的布局和名称,这将对这个问题非常有帮助——这样我们可以帮助你弄清楚这里的模式是什么(我肯定有一个)。。。否则它看起来就像是随机计数器,不确定是否有人愿意花超过15分钟的空闲时间来解密这里发生的事情。