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

VBA - Excel - Finding the cell location of a userform TextBox populated by a for i loop?

我需要知道什么?

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

我在做什么?

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

我想做什么?

添加一个dbl_click事件,这样某人就可以双击文本框并被发送到正在显示的sheet/row/column。我创建 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 - 没有任何理由将它全部粘贴到这里。

问题是,循环继续进行,也跨越多个 sheets,找到所有“代码”示例,所以我在将数据写入 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

但是我已经翻遍了列表,cell/range给出了一个不匹配的地方,实际上并不存在于列表中。没有 'linked cell' 我认为可能会这样做...

我有点迷茫

使用 .Tag 的收益 属性

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

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

    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。关于 re-writing 从存储位置提取数据的想法。

在任何 sub 之外,我在顶部创建了一个 String。

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

这行得通,因为你只 运行 通过这个循环,如果代码存在,因为列表是唯一的,代码只存在一次。所以你只进入循环一次,当你这样做时,i = the row.

然后利用T.M.的思路,写出:

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

这是 Goto 可以处理的范围引用。

这种方法的优点是,因为我正在搜索具有多个文本框的多张工作表,所以我只需要 ac1 来搜索整张文本框。

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