我有2张我在这里工作的床单。用户将按此按钮的sheet1包含一个名为“Cabinet date”的列,它只是与每个报告相关的日期列表。 Sheet2(截止日期)还包含cabinet日期列,与此日期之前要满足的一系列截止日期相匹配(在同一行中)。 //例如,1月份内阁中任何报告草稿的截止日期都在同一行.//
我想制作一个按钮,当按下它时会在sheet2中找到与活动单元格中的橱柜日期匹配(在sheet1上),以及拾取它所在的标题(searchCol),然后返回来自sheet2的正确橱柜日期中该事件的确切截止时间值。
我目前遇到的问题是,当我运行此按钮时,似乎没有从sheet2中获取cabinet日期值,并导致带注释的行评估为nothing / true并跳过将打印截止日期的代码块日期。
当我按下这个时,我得到的是“未找到截止日期”。即使实际上有一个价值它也应该上涨。
Option Explicit
Private Sub CommandButton1_Click()
Dim cabDate As String, findme As Range
Dim searchCol As Integer
searchCol = ActiveCell.Column
cabDate = WorksheetFunction.Index(Range("A1:O9999"), ActiveCell.Row, 2)
If Not IsEmpty(cabDate) Then
With Worksheets("Deadlines").Range("B:B")
Set findme = Application.WorksheetFunction.VLookup(cabDate, Sheets("Deadlines").Range("A1:O9999"), 1, False)
If Not findme Is Nothing Then
Dim findmeAddr As String
findmeAddr = findme.Address(True, True)
Dim printable As String
printable = findme.Offset(0, searchCol).Value
MsgBox (printable)
Else
MsgBox ("Deadline not found")
End If
End With
Else
MsgBox ("invalid or non existent cabinet date")
End If
End Sub
并非所有编码经验都如此,我们将不胜感激
答案 0 :(得分:2)
你在所有不同类型的变量之间混淆了一下,以及每个函数返回的类型。
WorksheetFunction.Index
- 返回某个单元格(或单元格范围)的值,因此您需要定义cabDate As String
。
因此,您需要使用If Not cabDate Is Nothing Then
而不是Range
(因为它不是If Not IsEmpty(cabDate) Then
)。
使用Find
的{{1}}方法会返回Set findme
,因此您以后也无法将其与Range
一起使用,但您需要定义另一个变量findme = findme.Address(True, True)
,然后您可以阅读As String
地址。
最后,由于您要阅读String
中的值,因此需要printable
或As String
,而不是As Integer
。
<强>代码强>
Range
答案 1 :(得分:0)
试
Set findme = .Find(what:=cabDate, lookIn:=xlValues, lookAt:=xlWhole)
因为Find()
对象的Range
方法会记住这些参数的最后设置,即使是从Excel UI进行的
并确保ActiveCell
正是您实际期望的目标!