【问题标题】:copy range not finding object复制范围找不到对象
【发布时间】:2017-02-20 17:50:47
【问题描述】:

我已经在 excel 中整理了一个日历(见图),我正在尝试解决的功能之一是如何提取当天分配的任务并将这些任务复制到另一个工作表中。

我已将代码更新为以下

Sub OtherTask()
Dim DRng As Range

ActiveSheet.Range("g2:ah2").Find(Date).Select
ActiveCell.Resize(5).Offset(4).Select
Selection.AutoFilter Field:=1, Criteria1:="1", Operator:=xlFilterValues

'Selection.Copy
'ActiveSheet.Range("r12").PasteSpecial xlPasteValues

'Application.CutCopyMode = False

    If ActiveSheet.AutoFilterMode = "True" Then
        ActiveSheet.AutoFilterMode = "False"
    End If

结束子

我已将 DRng 声明为 Range,但我不知道如何设置它以便 DRng 代表以下内容

ActiveSheet.Range("g2:ah2").Find(Date).Select
ActiveCell.Resize(5).Offset(4).Select
Selection.AutoFilter Field:=1, Criteria1:="1", Operator:=xlFilterValues

最终目标是让 excel 表识别当天的日期 - 通过以下方式完成

ActiveSheet.Range("g2:ah2").Find(Date).Select

确定日期后,向下查看该列并过滤单元格中包含#“1”的所有单元格 - 完成以下操作

ActiveCell.Resize(5).Offset(4).Select
Selection.AutoFilter Field:=1, Criteria1:="1", Operator:=xlFilterValues

一旦发生这种情况,我理想情况下希望 excel 返回 B 列(我一直在尝试这将偏移和一个负数 - 没有运气),然后复制 B 列中与所在行对应的内容存在“1”。查看图像的示例将是 2 月 19 日,我希望 excel 能够找到活动 1A(位于单元格 B7 中)并复制此单元格。

我的想法是,一旦我能够找到日期和其中带有“1”的单元格,我就可以将其设置为范围 DRng,然后使用 DRng 偏移到 B 列并获取适当的细胞。也许(很可能)我正在以错误的方式思考这个问题,因为我在这里拥有的目标无法实现。我一直在玩弄 With/End With 之间的 if 语句,但没有运气。非常感谢任何想法/方向。谢谢

【问题讨论】:

  • 您不能为单元格赋值并同时设置对象。使用AutoFilter method 过滤1(可能还有另一列上的日期),然后使用SpecialCellsxlCellTypeVisible 来复制所有匹配的结果。有关示例,请参见 this
  • 以下我仍然收到错误 1004 With ActiveSheet .AutoFilterMode = False .Range("g6:AH36").AutoFilter Criteria1:=1 End With Dim NewDRng As Range Set NewDRng = ActiveSheet.AutoFilter .Range.SpecialCells(xlCellTypeVisible) Td = Date If DRng = Td Then NewDRng.Copy Destination:=NewSh.Range("a1") End If Application.Sheets.Add End Sub

标签: excel vba


【解决方案1】:

嗯,我不确定我是否正确解释了您的问题,因为它有点含糊。你想向下列并抓取相应的Activity并将它们放在新的工作表中吗?如果是这样,试试这个

Sub TodaysDate()
Dim DRng As Range
Dim TASKng As Range
Dim newSh As Worksheet

'set the column to loop
col = Range("g2:ah2").Find(Date).column

'create new worksheet
Set newSH = thisworkbook.worksheets.add
tarRow = 1  'set which row to start writing data

For i = 6 to 36     'set which rows to loop
     If activesheet.cells(i,col).value = 1 then
            newSH.cells(tarRow,1) = activesheet.cells(i,1)
            tarRow = tarRow +1
     End if
Next i       

【讨论】:

  • 是的,这就是我想要完成的。我已将其放入工作表中,虽然它正在添加新工作表,但它并没有获取相应的任务。不过我会处理这个,看看我能不能让它工作。对于这个问题的含糊之处,我深表歉意。除了理解/实施 VBA 的挑战之外,我发现简单地提出明确的问题有点挑战,但我会继续努力。我非常感谢您的帮助,因为它让我更接近目标。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多