【问题标题】:Swapping Data in excel VBA userform在excel VBA用户表单中交换数据
【发布时间】:2016-05-08 13:59:49
【问题描述】:

TL-DR;我需要一种调用变量名的方法。所以不是调用 TB_Name1_R1 我可以调用 TB_Name1_R[i] (或任何它在 VBA 中调用)

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

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

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

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

一切正常。

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

我唯一能想到的(是的,它非常基础)就是很多

if a = 1 then
holder1 = TB_Name1_R1
holder2 = TB_Name2_R1

if a = 2 then
holder1 = TB_Name1_R2
holder2 = TB_Name2_R2

这根本不是答案

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    类似下面的东西可以代替你最后的代码 sn-p ...

    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 替换为您的表单。

    【讨论】:

    • 是的,这可能是一个解决方案,我会研究一下。
    • 但是文本是输入到用户表单中,而不是工作表中?
    • 对不起 - 我误解了你原来的帖子。我以为文本框在工作表上。
    • 根据上述cmets更新。
    【解决方案2】:

    结合 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
    

    【讨论】:

      猜你喜欢
      • 2016-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多