我已经在excel中制作了一个日历系统,为学生进行电话预约(永远不要说你知道excel是我这周学到的一课),一切都完成了,但有一个重要的部分还没有完成。检查以确保已在日历中输入学生编号。
我需要搜索的字符串是学生ID,它来自主表中的C5。(6位数字)
然后我有3张不同的工作表,分别是7月,8月和9月。每一个都有自己的日历,范围从A1:Af100。
如果它在某个日历中找到了学生ID,则不需要执行任何操作,但如果没有找到,则会弹出一条警告消息并结束该函数
MsgBox“没有输入学生号,请在日历中输入学生号”结束功能
我不知道该使用什么函数并让其中一个函数正常工作。事情已经陷入了无意义的无限循环中,或者只是崩溃并进入调试阶段。
发布于 2021-06-25 19:40:03
我不知道你已经有了什么代码,但我会创建一个函数,它在给定的Range
中查找给定的String
,如果找到就返回,并对3个表中的每个表调用3次。
在函数中,您可以使用Range
变量执行For Each
循环,从而迭代给定Range
中的所有单元格。然后,在该循环中,测试每个单元格的.Value
以查看它是否包含您感兴趣的值(例如使用InStr
)。如果是,您可以当场退出函数(不需要进一步搜索)。请注意,单元格也可以包含像#REF!
这样的错误值;您可以在InStr
调用终止之前使用IsError
首先进行检查。或者将InStr
放在On Error Resume
+ On Error Goto 0
块中,以便自动跳过错误单元格的任何失败的InStr
调用(如果单元格中有错误,它肯定不会包含学生编号)。
请注意,要使用InStr
进行搜索,所有学生编号应始终包含相同数量的字符。如果不是,那么你就有误报的风险,比如在123456
中可以找到001234
,因为前导零实际上可能没有存储在单元格中(只有单元格格式才会导致它们显示),并且不会在此过程中添加。
上面还假设您进行基于文本的搜索。如果学生nr。在单元格中始终是独立的,而且这些单元格也是数字,那么您可以将检查代码从InStr
升级为普通的=
数字比较。这也应该适用于有前导零的学生编号。
发布于 2021-06-25 21:47:26
我找到了有用的东西
Dim StudID As String
Dim Rng As Range
FindString = Sheets("Main Booking").Range("C5").Value
With Sheets("July").Range("A1:AH100")
Set Rng = .Find(What:=FindString, _
After:=.Cells(.Cells.Count), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False)
If Not Rng Is Nothing Then
Application.Goto Rng, True
Call bookingsub
Else
Call Augsearch
End If
End With
它有一个问题,如果它确实在日历中找到了学生号,它会转到那个单元格,而不是留在主页上,有没有办法阻止excel转到它找到数据的单元格?
https://stackoverflow.com/questions/68129892
复制相似问题