在excel VBA用户表单中交换数据

时间:2016-05-08 04:24:55

标签: excel vba excel-vba

TL-DR;我需要一种方法来调用变量名。因此,我可以调用TB_Name1_R [i](或在VBA中调用的任何内容)而不是调用TB_Name1_R1

我现在正在使用VBA在excel中处理多个用户表单。

设置如下:我有一个主窗口,其中包含许多文本框,供用户输入数据。它们都在名为TB_Name1_R1TB_Name2_R1的行中。下一行是TB_Name1_R2TB_Name2_R2 ..等等。

交换的第二个用户表单包含2个带有行列表的下拉框,因此您可以选择让我们只说第1行和第2行,然后想法是可以交换两行中的数据。所以userform调用

Private Sub CB1_Click()

Dim Ra As Integer
Dim Rb As Integer

Ra = RowA.ListIndex
Rb = RowB.ListIndex

If Ra = -1 Or Ra = 10 Or Ra = 15 Or Rb = -1 Or Rb = 10 Or Rb = 15 Then
    MsgBox "Wrong input, please redo", , "Wrong Input"
Else
    Call Module1.Move(Ra, Rb)

    Me.Hide
End If

End Sub

所有这些都很好。

现在我的问题如下。我如何最聪明地创建一些代码,其中被调用的子使用信息sendt来交换所选行之间的数据?

我唯一可以提出的(是的,它是如此非常基本)是一个很多的

if a = 1 then
holder1 = TB_Name1_R1
holder2 = TB_Name2_R1

if a = 2 then
holder1 = TB_Name1_R2
holder2 = TB_Name2_R2

而这根本不可能是答案

2 个答案:

答案 0 :(得分:0)

类似以下内容可能会替换您的上一个代码段...

holder1 = Worksheets("Sheet1").Shapes("TB_R" & a & "_Name1")
holder2 = Worksheets("Sheet1").Shapes("TB_R" & a & "_Name2")

当然,您需要将“Sheet1”替换为相应的工作表名称。

根据反馈更新

这应该有效,并提供对.Text.Value字段的访问权限。

Dim holder1 as Control, holder2 as Control
holder1 = UserForm1.Controls("TB_R" & a & "_Name1")
holder2 = UserForm1.Controls("TB_R" & a & "_Name2")

将UserForm1替换为您的表单。

答案 1 :(得分:0)

将OLdUgly的答案和一些互联网研究结合起来,我找到了正确的代码:

Sub Move(R1, R2)

Dim Name As String
Dim Number As Integer
Dim NN As Variant

Name = "TB_Name_R"
Number = R1

NN = Name & Number

Dim Holder1 As Variant

Holder1 = Main.Controls(NN).Value

End Sub