excel - VBA Excel 2016 在运行时抛出 Object Required 错误
问题描述
我正在尝试做的事情:
- 我有三个 excel - Master.xlsx(我的源数据)、DiscrepencyReport(我的宏将从 Master.xlsx 创建和填充计算值的那个)和 ReportRunner(我将在其中提供一些输入值并运行宏的活动工作表)
- 我想以编程方式打开 Master.xlsx 并使用文件名中的日期范围创建一个名为 DiscepencyReport 的新文件。
- 从源中复制某些值,对其进行操作,然后将其粘贴到目标表中。
- 关闭所有工作簿。
我需要什么帮助:
- 首先,它给了我一个运行时错误,说需要对象。错误在这一行“ InputFileName = This.Workbook.Path & "\" & "Master.xlsx" "。我搜索并阅读了以前的错误并尝试使用/删除 set 关键字,但它不起作用。我在这里缺少我的基础知识。我编译时没有错误。
- 这是解决这个问题的正确方法吗?或者,还有更好的方法?
- 有一部分我正在“构建报告表”。我想要一些有关如何将 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
解决方案
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 设置为始终需要。
不幸的是,它不回顾以前创建的模块——只有新模块。
推荐阅读
- django - 如果Email无法生成,如何使用`@transaction`回滚注册用户?
- ssl - python应用程序中的SSLError,证书更新后
- ruby-on-rails - 如何在应用程序级别加密 ruby on rails 中的完整路由
- powershell - Powershell - 使用 ConvertFrom-csv
- vue.js - 在 VUE SPA 中添加 Facebook Pixel 特定页面
- javascript - D3 输入自定义图像 URL 的 SVG 模式填充的更新模式
- hadoop - 如何禁用 Yarn Web UI / Rest API?
- string - 有没有一种算法可以用英文短语中的倾斜变体('和')替换撇号(')?
- javascript - 在 TypeScript 中检查 isString/Number/ObjectConstructor
- javascript - How to open an S3 pre-signed URL in another tab?