【问题标题】:Use find.range to get first row in a column使用 find.range 获取列中的第一行
【发布时间】:2018-02-25 04:25:56
【问题描述】:

为简单起见,假设我有以下数据: - A 列包含飞机上可用座位的列表(未占用的座位) 1A,1B,1C,1D,1E,1F,2A,2B,2C等

当一个可用座位分配给乘客时,我想找到那个座位并将其从列表中删除。

我的代码适用于不是 A 列中的第一个座位的每个座位,假设乘客想要座位 1A,即 Cell(1,1) 或 Range("A1") 当我使用 find.range 我得到第 2 行,因此它继续可供其他乘客使用,而实际上它不应该。

我在这里做错了什么?

Private Sub RemoveFromListSeatAllocated(seat As String)
Dim sht As Worksheet
Dim rng, As Range

Set sht = Sheets("This sheet")
Set rng = Range("A1:A192")

'FIND SEAT IN LIST OF SEATS AVAILABLE
With sht.rng
  Set where = .Find(what:=seat, LookIn:=xlValues)
End With

Set rng = Range("A" & where.Row)

'DELETE SEAT FOUND AND SHIFT UP 
sht.rng.Delete Shift:=xlUp

End Sub

【问题讨论】:

  • 好吧,一个愚蠢的解决方法是让我的 seat_list_data 从单元格 A2 而不是 A1 开始,所以我的问题在这里解决了,但是.. 这让我很难受!我想了解为什么它找不到放在第一行的值,以及是否可以用“FIND”对其进行排序以备将来使用。

标签: vba excel


【解决方案1】:

“我在这里做错了什么?” 您没有使用Option Explicit,因此代码质量下降到无法编译的程度:

Dim rng, As Range - 那应该是编译错误,不需要逗号

With sht.rng - 编译错误

Set where = .Find(what:=seat, LookIn:=xlValues) - where 是什么 - 编译错误


建议 - 在模块顶部写上Option Explicit,然后选择“调试>编译”并查看您遇到的错误。尝试对它们进行处理,直到您能够编译为止。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 2014-10-04
    • 2013-06-23
    • 2013-08-15
    • 1970-01-01
    相关资源
    最近更新 更多