首页 > 解决方案 > VBA Excel 2016 在运行时抛出 Object Required 错误

问题描述

我正在尝试做的事情:

  1. 我有三个 excel - Master.xlsx(我的源数据)、DiscrepencyReport(我的宏将从 Master.xlsx 创建和填充计算值的那个)和 ReportRunner(我将在其中提供一些输入值并运行宏的活动工作表)
  2. 我想以编程方式打开 Master.xlsx 并使用文件名中的日期范围创建一个名为 DiscepencyReport 的新文件。
  3. 从源中复制某些值,对其进行操作,然后将其粘贴到目标表中。
  4. 关闭所有工作簿。

我需要什么帮助:

  1. 首先,它给了我一个运行时错误,说需要对象。错误在这一行“ InputFileName = This.Workbook.Path & "\" & "Master.xlsx" "。我搜索并阅读了以前的错误并尝试使用/删除 set 关键字,但它不起作用。我在这里缺少我的基础知识。我编译时没有错误。
  2. 这是解决这个问题的正确方法吗?或者,还有更好的方法?
  3. 有一部分我正在“构建报告表”。我想要一些有关如何将 A 列从称为 Master.xlsx 的“基础”的工作表复制到目标工作簿 sheet1 的 A1 列的语法指导。下面的代码只复制不粘贴。

我的代码如下:

Sub ReportGeneration()

'Declarations

Dim InputSheet As Workbook, AttendanceDiscrepencyReporter As Workbook
Dim Start As String
Dim Last As String
Dim InputFileName As String
Dim ADRFileName As String
Dim TWorkingDays As Integer
Dim EmpEmail As Range
Dim EmpID As Range
Dim TLeave As Range
Dim TFlexi As Range
Dim TAttendance As Range
Dim IsAtOnsite As Range
Dim CMEmail As Range

'Open Input Workbook

InputFileName = This.Workbook.Path & "\" & "Master.xlsx"
Set InputSheet = Workbooks.Open(InputFileName, True, True)

'Create the Report Workbook

Start = Replace((Range("F7").Value), "/", "_")
Last = Replace((Range("F8").Value), "/", "_")
TWorkingDays = Range("F10").Value

Set AttendanceDiscrepencyReporter = Workbooks.Add
ADRFileName = ThisWorkbook.Path & "\" & "DiscrepencyReport_from_" & Start & "_to_" & Last & ".xlsx"

With AttendanceDiscrepencyReporter
    .Title = "Discrepency Report"
    .Subject = "Discrepency Report"
    .SaveAs Filename:=ADRFileName
End With

' Construct the Report Worksheet

Set EmpEmail = InputSheet.Worksheets("Base").Columns("A")
Set EmpID = InputSheet.Worksheets("Base").Columns("B")

' Close Workbooks

InpuSheet.Close
AttendanceDiscrepencyReporter.Close

End Sub

标签: excelvba

解决方案


Option Explicit如果没有在每个模块的顶部使用强制显式变量声明,VBA 将在编译时为任何未声明的变量名分配一个变体。VBA 无法解析为对象、方法或属性的任何代码都将成为变体类型变量,命名为无论无法识别的代码字符串是什么。

  • UnrecognisedCodeString.VarType = vbEmpty应用到对象或属性值被分配给它

  • UnrecognisedCodeString.Value = vbNull.

    如果您尝试对未分配的变量执行某些操作,则它将不起作用:

  • InputFileName = This.Workbook.Path & "\" & "Master.xlsx"评估为

  • InputFileName = vbNull.Workbook.Path & "\" & "Master.xlsx"接着

  • InputFileName = vbNull 这会导致错误,因为vbNull它不是字符串。

Option Explicit好消息是您可以通过转到工具 -> 选项... -> 编辑器并填写要求变量声明复选框来将 VBA IDE 设置为始终需要。

在此处输入图像描述

不幸的是,它不回顾以前创建的模块——只有新模块。


推荐阅读