如何将文本框名称设置为变量并允许在循环中更改名称?

时间:2016-07-18 03:03:35

标签: excel vba excel-vba textbox

我知道标题不清楚。因此,我试着在内容中详细解释。

VB界面中有15个文本框,如下图所示。

textbox snapshot

这是一个用户界面,允许用户输入数据并存储在工作表中。

假设用户填写了所有15个文本框。然后,第一行文本框将相应地传递并存储在Excel单元格A1,B1,C1,D1中的数据。第二行文本框将数据存储在Excel单元格A2,B2中, C2,D2 ......

因此,我想使用嵌套循环来解决问题。

 for {for { Cells.(i,j)=textbox1.value 

声明的左侧很好,因为每个Excel单元格都有自己的ID(列和行顺序)。

但是,对于右侧,每个TextBox名称都由我分配。我将它们命名为textbox1,textbox2,textbox3 ......

为了让它们适合循环,我想在循环期间更改它们的文本框名称。例如,

`textbox+i; i++ ;` ' just my thought 

现实可以做到这一点吗? 此外,如果用户填写半行数据(3行,数据然后提交,2行空白),怎么办?。如果VBA继续用数据行填写数据?

3 个答案:

答案 0 :(得分:0)

Excel的Application Object中有一个方法。此函数将字符串计算为公式。 Excel帮助的URL评估示例:

https://msdn.microsoft.com/en-us/library/ff193019.aspx

答案 1 :(得分:0)

尝试使用以下代码

/* ./inventory.js */
var hide_error = function () {
  $('input').on("keypress", function() {
    $( ".has-error" ).hide();
  });
}

/* ./tess.js */
QUnit.module( "module A ", {
  before: hide_error
});

QUnit.test("errors not be hidden unless keypresses", function ( assert ) {
  assert.equal( $('.has-error').is(':visible'), true, "Not Hidden" );
});

QUnit.test("errors should be hidden on keypresses", function ( assert ) {
  $('input').trigger("keypress");
  assert.equal( $(".has-error").is(':visible'), false, "Hidden" );
});

答案 2 :(得分:0)

您可以使用以下代码:

For i = 1 To 5 '<-- 5 "rows" of textboxes
    For j = 1 To 3 '<-- 3 "columns" of textboxes for each row
        Cells(i, j) = Me.Controls("TextBox" & (i - 1) * 3 + j) '<-- textboxes are name form "TextBox1" to "TextBox15" rowwise 
    Next j
Next i

根据您的实际行数和列号进行调整。

至于你的“如果......”问题,我不清楚你想要实现什么

应该只想跳过“未输入”的文本框,然后你就可以去

    For i = 1 To 5 '<-- 5 "rows" of textboxes
        For j = 1 To 3 '<-- 3 "columns" of textboxes for each row
            With Me.Controls("TextBox" & (i - 1) * 3 + j) '<-- textboxes are name form "TextBox1" to "TextBox15" rowwise
                If .Text <> "" Then Cells(i, j) = .Text '<--| skip void textboxes
            End With
        Next j
    Next i