Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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
请参阅筛选表中的Excel单元格 我试图引用Excel表格中的一个单元格,该单元格按日期(今天)进行过滤,然后从剪贴板上粘贴一些内容。我已经尝试了很多,但到目前为止没有任何效果。我怎么做?_Excel_Vba - Fatal编程技术网

请参阅筛选表中的Excel单元格 我试图引用Excel表格中的一个单元格,该单元格按日期(今天)进行过滤,然后从剪贴板上粘贴一些内容。我已经尝试了很多,但到目前为止没有任何效果。我怎么做?

请参阅筛选表中的Excel单元格 我试图引用Excel表格中的一个单元格,该单元格按日期(今天)进行过滤,然后从剪贴板上粘贴一些内容。我已经尝试了很多,但到目前为止没有任何效果。我怎么做?,excel,vba,Excel,Vba,这是桌子: 正如您可以看到的,当前唯一可见的(今天)行是第38行,它将在明天更改为第39行,因为它已过滤到当前日期(今天)。所以它是一种动态细胞 以下是我的尝试: Workbooks("Analysis Sheet.xlsm").Worksheets("Data Entry").Range("[@[AC-47]]").Select.Paste Workbooks("Analysis Sheet.xlsm").Wor

这是桌子:

正如您可以看到的,当前唯一可见的(今天)行是第38行,它将在明天更改为第39行,因为它已过滤到当前日期(今天)。所以它是一种动态细胞

以下是我的尝试:

Workbooks("Analysis Sheet.xlsm").Worksheets("Data Entry").Range("[@[AC-47]]").Select.Paste
Workbooks("Analysis Sheet.xlsm").Worksheets("Data Entry").Range(Range("I1"), Range("I1").End(xlDown)).Select.Paste

Workbooks("Analysis Sheet.xlsm").Worksheets("Data Entry").Rows(1).Find(what:="[@[AC-47]]").Select.Paste

Workbooks("Analysis Sheet.xlsm").Worksheets("Data Entry").ListObjects.ListColumns("[@[AC-47]]").DataBodyRange.Paste
Workbooks("Analysis Sheet.xlsm").Worksheets("Data Entry").ListObjects.ListColumns(9).DataBodyRange.Paste

Workbooks("Analysis Sheet.xlsm").Worksheets("Data Entry").DataBodyRange(1, 9).Select.Paste
Workbooks("Analysis Sheet.xlsm").Worksheets("Data Entry").BodyRange(1, 9).Select.Paste

Range("Data_Entry_Table[@[AC-47]],[Column9]]").Select.Paste
我还尝试在没有
的情况下结束代码行。选择
,因此仅使用
。粘贴
,两者都不起作用


提前谢谢你

请尝试下一个代码:

Sub testPasteForToday()
 Dim sh As Worksheet, rngVis As Range, ar As Range, refCell As Range
  Set sh = ActiveSheet
   Set rngVis = sh.UsedRange.Offset(1).SpecialCells(xlCellTypeVisible)
     For Each ar In rngVis.Areas
        Set refCell = ar.Find(Format(Date, "yyyy-mm-dd"), ar.cells(1, 1), xlValues, , , xlNext, False)
        If Not refCell Is Nothing Then
            refCell.Offset(, 1).PasteSpecial xlPasteAll
        End If
     Next
End Sub
您可以在不进行任何初步筛选的情况下使用下一个代码。它也适用于过滤区域,因为要粘贴的单元格是可见的。。。我的意思是,不是上面的代码,而是专门创建来处理过滤的不连续范围(区域):

尝试:


这将选择过滤后的可见单元格,并返回第一个单元格的行。请注意,通过从第二行(
range(“H2”)
)开始范围,将忽略标题单元格。

Select
返回变量数据类型,而不是对象。尝试使用
范围(“数据输入\表格[@[AC-47]],[Column9]]”。选择
然后选择
工作表(“数据输入”)。粘贴
。感谢您的建议,不幸的是,当您必须使用不连续的范围(如特定范围的可见单元格)时,它不起作用,您必须使用范围区域。。。我将发布一段代码,我认为这将解决您的问题…@Help64mycat:您是否有时间检查上述代码?我尝试过testPasteForToday(),但它确实粘贴到了G列中,但由于某种原因,该行是正确的。我需要将它粘贴到l列,而不是日期所在的H列,明天我将编辑我的帖子以使其更清晰,我还将尝试testPaste_bis()。到目前为止,这非常有用,感谢您的贡献@Help64mycat:只有在同一行的F:F列中也存在今天日期时,才会发生这种情况。无论格式如何。它存在吗?即使是这样,我也可以调整代码,使其仅在H:H列中搜索。。。我认为今天的日期在处理过的工作表上只存在一次。它确实存在于E:E中,这不是故意的,我修复并删除了它,不需要对代码进行任何修改。虽然这次尝试testPasteForToday(),但在这次没有粘贴任何内容后,出现了以下错误:“每个图表的最大数据系列数为255”。我检查了剪贴板,这不是因为以前没有复制任何内容。(我确实在同一工作簿的另一个工作表中有该表中的图表)testPaste_bis()尝试显示此错误“End If With block”我尝试删除“End If”,但该错误也不起作用,我明天将尝试更多的疑难解答。@Help64mycat:我想上面的代码不会引发这样的错误。我指的是第一个。如果不是机密信息,您是否可以在讨论中共享工作簿(其中包含代码),并在此处添加指向工作簿的链接(OneDrive、Easyupload.io等)?在第二个代码中,我删除了一行
Debug.Print
,但由于错误,我还删除了它上面的另一行。现在更正了代码…我也尝试过,但它只是再次显示了一个错误不幸的是,当我尝试它时,它起了作用,但我没有使用您的工作表,因此错误可能在引用中。您是对的错误显示“无效或不合格引用”,然后它标记了.Range,因此可能是由于.Range(“H2”),您是否在测试表中使用了设置为“今天”的过滤器?因为在我当前的视图中,它应该选择第40行,明天它应该是第41行,因为它每天更新到今天。@Help64mycatl;您必须每天运行宏以反映这一点。我用了一个过滤器,但只是一个基本的。不要将标题单元格(带有下拉列表的单元格)包含在范围内,因为它会混淆
特殊单元格(xlCellTypeVisible)
Sub testPaste_bis()
 Dim sh As Worksheet, refCell As Range
  Set sh = ActiveSheet
    Set refCell = sh.UsedRange.Find(Format(Date, "yyyy-mm-dd"), sh.Range("H1"), xlValues, , , xlNext, False)
    If Not refCell Is Nothing Then
        refCell.Offset(, 1).PasteSpecial xlPasteAll
    End If
End Sub
With Workbooks("Analysis Sheet.xlsm").Worksheets("Data Entry")

    myRow = .Range("H2").SpecialCells(xlCellTypeVisible).Cells(1, 1).Row
    myCol = 9

    .Cells(myRow,myCol).Select
    .Paste

End With