Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 比较并选择Excel宏_Vba_Excel_Vlookup - Fatal编程技术网

Vba 比较并选择Excel宏

Vba 比较并选择Excel宏,vba,excel,vlookup,Vba,Excel,Vlookup,我有2张excel工作表。在一张纸(sh1)上,我有B列和日期,D列和数字 我希望有一个宏,如果列范围D:I中的一个单元格包含值“2”,单击该单元格将获得属于该单元格行的日期值,并将其与我的另一个工作表(sh2)中的日期值进行比较 第二张表中的日期值也在B列中 到目前为止,我所拥有的: Option Explicit Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim Date1 As

我有2张excel工作表。在一张纸(sh1)上,我有B列和日期,D列和数字

我希望有一个宏,如果列范围D:I中的一个单元格包含值“2”,单击该单元格将获得属于该单元格行的日期值,并将其与我的另一个工作表(sh2)中的日期值进行比较

第二张表中的日期值也在B列中

到目前为止,我所拥有的:

    Option Explicit

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)

      Dim Date1 As Date
      Date1 = Range("B" & ActiveCell.Row).Value

      If Selection.Count = 1 Then
        If Selection.Value = 2 Then
          If Not Intersect(Target, Range("D:I")) Is Nothing Then
            MsgBox Date1
          End If
        End If
      End If

   End Sub
此代码已将变量指定给属于所单击单元格的行的日期。我陷入了将变量与第二页中的日期进行比较的部分

最后,我想这样做,当它在第二个工作表中找到匹配项时,它会选择该行。

您的代码已修改:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Dim Date1 As Date

    Date1 = Range("B" & ActiveCell.Row).Value

    If Selection.Count = 1 Then
        If Selection.Value = 2 Then
        If Not Intersect(Target, Range("D:I")) Is Nothing Then
            foundDate = Date1
            Call findDateOnSheet2
            End If
        End If
    End If
End Sub
以及(可能的解决方案)您需要在表2中找到的行:

Option Explicit
Public foundDate As Date

Sub findDateOnSheet2()
    Dim i As Long
    i = 1
    Do While Sheets(2).Cells(i, 2).Value <> ""
        If Sheets(2).Cells(i, 2).Value = foundDate Then
            Sheets(2).Activate
            Sheets(2).Rows(i).Select
            Exit Do
        End If
        i = i + 1
    Loop
End Sub
选项显式
公开日期为日期
子findDateOnSheet2()
我想我会坚持多久
i=1
Do While工作表(2).单元格(i,2).值“”
如果表(2).单元格(i,2).值=foundDate,则
第(2)页。激活
第(2)页。第(i)行。选择
退出Do
如果结束
i=i+1
环
端接头
EDIT1:

也许你的测试表和我的测试表看起来不一样。您应该根据工作表的结构修改我的代码中的起始值和/或其他参数

我的第一页:

第二个呢


如果我错了,请纠正我。我创建了一个新模块(模块1),其中包含子FindDateOnSheet2。使用
Application.Run“Module1.findDateOnSheet2”
从工作表\u SelectionChange子调用它,但什么也没发生。.您不需要
Application.Run“Module1.findDateOnSheet2”
。如果您使用我的工作表覆盖代码,请更改
(…)
,并使用您编写的my
findDateOnSheet2()
创建模块。然后只需单击第一张工作表上的单元格。如果你点击一个数字2,它会自动选择它找到所选日期的行。这对我不起作用。如果我在foundDate变量上放一块手表,它会显示该变量的值超出范围。我编辑了我的答案并向您展示了我的工作表。。。我希望它能帮上大忙,当我开始摆弄I变量时,我发现了它,我必须将它设置为3,因为我在实际数据上方有2行不相关的行。