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 来搜索整张文本框。
希望这对以后的人有所帮助。
我需要知道什么?
如何获取文本框显示的数据的位置?我怎么知道它在哪里?
我在做什么?
我有一些代码循环遍历 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 来搜索整张文本框。
希望这对以后的人有所帮助。