我正在尝试为我的同事创建一个简单的脚本,我比检查某些项目(ID号和出勤点)的CSV文件更快,而不是手动将它们打开到Excel,扫描超过100行和然后重新导出为CSV(当你必须每天多次这样做时,所需的时间开始加起来)。为了开始,我创建了第一部分,只是检查出勤点是否大于允许的数量,然后抛出错误并让我们知道进入并修复它。不幸的是,我似乎无法让它工作......
uninitialized constant ApplicationRecord.
非常感谢任何帮助:)
答案 0 :(得分:0)
这适用于我,虽然非常缓慢。
我注意到的事情 -
你从未告诉过文件的位置。即使使用拖放功能,您仍然必须知道在哪里寻找任何东西。
你搞乱了后期绑定,但是没有正确设置ws.Range。我只是使用cells属性作为设置ws.Range起初可能看起来很混乱。
Private Sub scoob()
Dim oExcel
Set oExcel = CreateObject("Excel.Application")
oExcel.Workbooks.Open ("C:\Users\Ashleysaurus\Desktop\Book3.csv")
Dim ws
Set ws = ActiveSheet.Cells(1, 1)
If ws > 28 Then
MsgBox "Error: User with more than 28 presence checks!"
ElseIf ws > 14 Then
MsgBox "Error: User with more than 14 presence checks!"
ElseIf ws > 12 Then
MsgBox "Error: User with more than 12 presence checks!"
ElseIf ws > 8 Then
MsgBox "Error: User with more than 8 presence checks!"
ElseIf ws > 4 Then
MsgBox "Error: User with more than 4 presence checks!"
End If
End Sub
答案 1 :(得分:0)
VBScript不支持VBA等隐式对象,因此您无法直接使用ActiveSheet
。您需要显示对象的显式句柄。在这种情况下,您可以通过应用程序对象访问活动工作表。此外,.Range("S11, S200")
无效。范围字符串使用冒号定义。尝试这样的事情:
Set ws = oExcel.ActiveSheet
Set rng = ws.Range("S11:S200")
有关将VBA转换为VBScript的详细信息,请参阅my blog。
有关当前代码的进一步帮助(我怀疑rng > 28
等将按您期望的方式运行)发布一个新问题,其中包含有关输入数据的更多信息。
作为替代方案,由于您的输入文件似乎是CSV,您可以将文件处理为文本文件:
filename = "C:\path\to\your.csv"
delimiter = ","
Set fso = CreateObject("Scripting.FileSystemObject")
csv = fso.OpenTextFile(filename).ReadAll
rows = Split(csv, vbNewLine)
For Each row In rows
fields = Split(row, delimiter)
For Each field In fields
'do stuff
Next
Next