【问题标题】:Check DT Picker Results, copy sheet into new workbook检查 DT Picker 结果,将工作表复制到新工作簿中
【发布时间】:2018-06-09 14:44:53
【问题描述】:

我的 VBA 技能不是最好的,如果有人可以在以下方面提供帮助,那就太好了。

我在工作簿中有许多工作表,其单元格区域 E11:E37 中有日期记录。

我正在尝试创建一个报告功能,让用户完成日期选择器用户表单,Excel 在此工作簿的所有工作表中运行上述范围内的搜索,以查找介于 DTPicker1/2 结果之间的日期。

对于返回匹配项的工作表,将所有这些工作表复制到具有名称(“名称和当前日期”.xlsx)的新工作簿。

更新:我尝试将 > 和

更新:代码现在可以工作,但在日期范围 = 01/06/18 - 14/06/18 其中 DTP1 = 07/06/18 和 DTP2 = 16/06/18 的情况下不返回值 true。但在 DTP1 = 04/06/18 和 DTP2 = 08/06/18 的情况下返回 true。

Private Sub CommandButton1_Click()
Dim s As Worksheet, wb As Workbook

For Each s In Worksheets
    If CBool(Application.CountIfs(s.Range("E11:E37"), ">" & 
CDate(DTPicker1.Value), _
                                  s.Range("E11:E37"), "<" & 
CDate(DTPicker2.Value))) Then
        If wb Is Nothing Then
            s.Copy
            Set wb = ActiveWorkbook
        Else
            s.Copy after:=wb.Worksheets(wb.Worksheets.Count)
        End If
    End If
Next s

If wb Is Nothing Then
    MsgBox ("No Records Found")
Else
    wb.SaveAs Filename:="Technicians - Batch Record Report" & Format(Date, 
"ddmmyyyy"), _
          FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
End If
End Sub

【问题讨论】:

  • 表格是什么样的?问题出在哪里?你试过什么?如果您对日期进行硬编码,其他一切都可以正常工作吗?
  • @ashleedawg ...对不起!我在 ine 上收到不匹配错误:如果 Range("I11:I37") > DTPicker1.Value And Range("I11:I37")

标签: vba excel


【解决方案1】:

试试这个,看看它是否能让你更接近你的目标。

Private Sub CommandButton1_Click()
    Dim s As Worksheet, wb as workbook

    For Each s In workSheets
        If cbool(application.countifs(s.Range("I11:I37"), ">" & cdate(DTPicker1.Value), _
                                      s.Range("I11:I37"), "<" & cdate(DTPicker2.Value))) then
            if wb is nothing then
                s.copy
                set wb = activeworkbook
            else
                s.copy after:=wb.worksheets(wb.worksheets.count)
            end if
        end if
    next s

    if wb is nothing then
        MsgBox ("No Records Found")
    else
        wb.SaveAs Filename:="Technicians - Batch Record Report" & Format(Date, "ddmmyyyy"), _
              FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
    End If
End Sub

【讨论】:

  • 此代码似乎可以正常工作,但是当有符合条件的记录时,它会返回“未找到记录。是不是因为时间戳包含时间而日期选择器值不包含?
  • 也许您的 DTPicker1 和 DTPicker2 不是真实日期。尝试将它们包装在 cdate 中。也许你有 &gt;&lt; 颠倒了。
  • 我可以使用硬编码的日期,而不是将其包含在文档中。完成此操作并修改代码以查看新范围 (E11:E37) 我仍然得到“无结果”...
  • 必须是您的数据和/或 DTPicker1/2。这适用于硬编码日期。
  • 有机会和你分享吗?只需通过从代码中删除 dtpicker 并引用带有硬编码日期但仍然没有结果的工作表单元格来处理它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多