VBA-Excel-查找由for i循环填充的用户窗体TextBox的单元格位置?

问题描述

我需要知道什么?

如何获取文本框显示的数据位置?我怎么知道它在哪里?

我在做什么?

我有一些代码循环遍历i并为其分配一个值,然后根据i ...从工作表中提取单元格值。所以(i,2)很简单:第2列中的第i行。然后显示用户窗体的文本框中。

我想做什么?

添加dbl_click事件,以便某人可以双击文本框并将其发送到正在显示的工作表/行/列。创建dbl_click事件没有问题,但是我的问题似乎是如何获取显示的单元格位置?

如果相关,这是我的循环代码

Dim code as String
code = search.Value

For i = 2 To LastRow
            
If Sheet1.Cells(i,9).Value = code Then
     
ssn1.Text = Sheet1.name
hb11.Text = Sheet1.Cells(i,9).Value
End If
Next i

这是一个片段,由于进行了一段时间,因此hb11可以运行到hb37-没有任何理由将其全部粘贴到这里。

问题在于,循环还会遍历多个工作表,找到“代码”的所有示例,因此在将数据写入TextBox之后,我会不断更改-因此我不能依靠(i ,9)。

我已经在代码方面做到了这一点:

Sub bt11_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
   
    If hb11.Value <> ("") Then

    Application.Goto Reference:=Sheet1.Range(hb11)
        
    End If
    
End Sub

但是,这似乎取决于hb11的值,而不是单元格的位置。

我知道这是一个愚蠢的问题,但是我似乎找不到答案?

我感觉它位于:

Dim cell as Range

然后:

Set cell = hb11.something

但是我已经遍历了列表,单元格/范围不匹配,并且实际上不存在于列表中。没有我认为可以做到的“链接单元” ...

我有点迷茫。

解决方法

使用.Tag属性的利润

我假设您的27个文本框中的每个文本框都恰好指向一个由范围名称,行和列(或列字符)组成的源范围地址。

如果是这样,您可以在初始化循环期间,例如,将组合的参考字符串(例如"Sheet22" & "," & i & "," & 9)分配给文本框的►.Tag属性,从中受益。以逗号分隔的方式,例如

    hb11.Tag = "Sheet22,17,9"      ' << i.e. sheet name,row 17,column 9

我认为从那里获取所有数据很容易:

    Dim src: src = split(hb11,",") 
    Application.Goto Reference:= _
        ThisWorkbook.Worksheets(src(0)).Range(Cells(Val(src(1)),Val(src(2))).Address),Scroll:=True
    
,

很多小时后,我已经解决了。

感谢T.M.关于从存储位置重写数据的想法。

在所有子控件之外,我还在顶部创建了一个字符串。

Dim ac1 As String

在循环中,我只是给ac1值i,

For i = 2 To LastRow
            
If Sheet1.Cells(i,9).Value = code Then
     
ssn1.Text = Sheet1.name
hb11.Text = Sheet1.Cells(i,9).Value
ac1 = i
End If
Next i

这行得通,因为您只运行此循环,所以存在IF代码,因为列表是唯一的,所以代码仅存在一次。因此,您只需进入循环一次,当您这样做时,i =该行。

然后我用T.M.的想法写下:

Application.Goto Reference:=Sheet1.Range("A" & ac1)

这是Goto可以处理的范围参考。

此方法的优点是,因为我要搜索具有多个文本框的多个工作表,所以只需要ac1即可获取整个文本框的价值。

希望这对以后的人有帮助。