excel - 返回表列中的最后一个值
问题描述
VBA 新手。两天来一直在寻找答案,但没有找到真正问我想要答案的问题。
我正在使用在我的一张工作表中填充表格的用户窗体。
我的问题在 Sub 内UserForm_Initialize()
。我要做的第一件事就是找出我在我的 DataBodyRange 中的最后一行(顺便说一下,第一列)是否包含一个 ID 号。
如果是这样,那么我取那个值,添加一个,然后在我的用户窗体中填充一个文本框。
但是,如果该表由标题和一个空行组成,我想用数字 1 填充 TextBox(通过另一个子将添加到该空行),但我的代码停止工作并出现错误。
使用以下代码,我得到了错误
运行时错误“91”:对象变量或未设置块变量
Private Sub UserForm_Initialize()
Dim tbl As ListObject, rng As Range
Set tbl = Worksheets("Sheet1").ListObjects("table1")
Set rng = tbl.ListColumns("ID").DataBodyRange
If IsEmpty(rng.Cells.Find("*", LookIn:=xlValues,_
SearchOrder:=xlByRows,_
SearchDirection:=xlPrevious).Value) Then
Me.textBox.Value = 1
Else
Me.textBox.Value = rng.Cells.Find("*", LookIn:=xlValues,_
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Value + 1
End If
End Sub
我不明白我找到的关于错误代码或如何修复它的解释。我认为该错误与该错误有关,rng.Cells.Find...
因为那是在单步执行代码时出现错误的时候,但是我一生都无法理解为什么。
解决方案
Find()
返回一个 Range,如果没有找到,则 Range 为 Nothing。因此,应该检查 Is Nothing。
在下面的代码中,result
引入了一个新的范围变量。检查它是否为空:
Private Sub UserForm_Initialize()
Dim tbl As ListObject, rng As Range
Set tbl = Worksheets("Sheet1").ListObjects("table1")
Set rng = tbl.ListColumns("ID").DataBodyRange
Dim result As Range
Set result = rng.Cells.Find("*", LookIn:=xlValues, _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious)
If Not result Is Nothing Then
Debug.Print result.Address
Else
Debug.Print "result is nothing"
End If
End Sub
推荐阅读
- python-3.x - pixellib 挂在 aws ec2 实例上
- java - Java JodaTime:java.lang.NoClassDefFoundError:org/joda/time/Chronology
- google-maps - Xamarin Forms - 自定义地图标记不可见
- php - 从客户端 Apache 和 Php 获取 IP
- react-router - React Router 模态库中的 Material-UI Swipeable Drawer:关闭时没有过渡或 history.boBack()
- python - 如何在 python 中将 .txt 文件转换为 .pkl 文件?
- jquery - 当按钮触发jquery时下载PDF文件
- django - 具有多个默认值/字段的 django update_or_create
- ruby-on-rails - 如何在 github 操作中使用 parallel_tests
- vue.js - 如何在 Vue.js 中传递查询字符串