excel - VBscript - 如果值来自变量,Excel 无法找到
问题描述
我的 vbs 脚本是搜索 excel 列以查找从今天起 7 天的日期。然后它在行中搜索值并执行一些操作。
下面是应该工作的脚本的主要部分:
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = true
Set objWorkbook = objExcel.Workbooks.Open(FILEPATH)
Set ActiveSheet = objWorkbook.sheets(1)
Dim row, column, totalrows, totalcolumns
totalrows = ActiveSheet.UsedRange.Rows.Count
totalcolumns = 53
newdate = DateAdd("d",7,Now())
ndate = Day(newdate) & "." & Month(newdate) & "." & Year(newdate)
For column = 2 To totalcolumns
If ActiveSheet.Cells(2, column).Value = ndate then
For row = 4 to totalrows
If not ActiveSheet.Cells(row, column).Value = "" then
'Do something
'Do something
End If
next
End If
next
但问题是 ndate 变量的值。
如果我执行这个脚本,它在 Excel 中找不到日期,我知道它正在寻找正确的日期。
所以我更进一步,即使我自己设定了日期。脚本不起作用:
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = true
Set objWorkbook = objExcel.Workbooks.Open(FILEPATH)
Set ActiveSheet = objWorkbook.sheets(1)
Dim row, column, totalrows, totalcolumns
totalrows = ActiveSheet.UsedRange.Rows.Count
totalcolumns = 53
ndate = "28.10.2020"
For column = 2 To totalcolumns
If ActiveSheet.Cells(2, column).Value = ndate then
For row = 4 to totalrows
If not ActiveSheet.Cells(row, column).Value = "" then
'Do something
'Do something
End If
next
End If
next
但是如果我像下面那样直接设置日期,脚本可以工作并在 excel 中找到日期:
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = true
Set objWorkbook = objExcel.Workbooks.Open(FILEPATH)
Set ActiveSheet = objWorkbook.sheets(1)
Dim row, column, totalrows, totalcolumns
totalrows = ActiveSheet.UsedRange.Rows.Count
totalcolumns = 53
For column = 2 To totalcolumns
If ActiveSheet.Cells(2, column).Value = "28.10.2020" then
For row = 4 to totalrows
If not ActiveSheet.Cells(row, column).Value = "" then
'Do something
'Do something
End If
next
End If
next
解决方案
如果涉及日期,则需要处理日期。在您的代码中,您将字符串与日期进行比较:
newdate = DateAdd("d",7,Now())
ndate = Day(newdate) & "." & Month(newdate) & "." & Year(newdate)
现在newdate
将保存一个日期,包括一个时间部分。ndate
但是,它包含一个看起来像日期的字符串(对于世界的某些地方)。
您在代码中所做的是将字符串与日期进行比较(实际上,当您将单元格格式化为 时,您可以看到一个数字General
)。当涉及到这样的事情时,编程世界是分裂的:虽然大多数编程语言不允许这样做(在编译或运行时抛出错误),但有些人试图做一些有意义的事情。这意味着需要转换两个值之一,要么将字符串转换为日期,要么将日期转换为字符串。
转换可能正常工作,但也可能失败(因为写入日期的所有不同方式)。编码时,您应该避免那些隐式转换,而是使用正确的数据类型。首先要声明具有正确类型的变量。
在你的情况下,只需使用
Dim ndate
ndate = Dateadd("d", 7, Date())
Date()
等效于Now()
,但仅带有日期部分(没有时间)
推荐阅读
- javascript - React中分页中的活动类
- javascript - 如何将变量定义的某些命令传递给守夜人中的其他一些外部命令(在测试中)
- php - 检查电子邮件是否已在数据库中
- sql-server - Microsoft T/SQL,存储过程
- php - “SQLSTATE [42S22]:未找到列:1054 'on 子句'中的未知列 'logs.user_ID'”- 使用 LEFT JOIN 时
- python - 变分自动编码器 (VAE) 显示不一致的输出
- r - R - 在列表中的列上获得不正确的矩阵乘法结果
- php - 带有属性的php woocommerce if语句不起作用
- sql - Datediff 按天和员工进行数据透视
- node.js - GET路由nodejs,如果2条路由相同,它将如何反应?