标签: vbscript

vbscript 调用函数时出现类型不匹配错误

当我尝试调用我创建的函数时,遇到类型不匹配错误。

例子:

Function DoThis(paramA, paramB, paramC)
    If paramA = "Something" Then
        DoThis = DoSomething
    ElseIf paramA = "This" Then 
        DoThis = DoSomethingDifferent
    Else
        DoThis = DoThisOtherThing   
    End If
End Function
Dim result: result = DoThis(valueA, ValueB, ValueC)
Run Code Online (Sandbox Code Playgroud)

谁能看到我的错误可能是什么?其他功能工作正常。我通过实际复制并粘贴函数名称到我调用的地方来仔细检查拼写。我已经验证函数名称没有在其他地方使用,即作为常量或其他东西。

请注意,调试时所有参数的 ValType 都是 vbString。另外,我永远无法输入该函数,所以这不像我在调试该函数,输入它然后得到类型不匹配。

ty。

vbscript runtime-error

2
推荐指数
1
解决办法
4万
查看次数

VBScript 选择最后一次出现“|”之后的子字符串

我有这个字符串:

TEST|TEST1|TEST3|TEST4|TEST5|TEST6|TEST7|TEST8|
Run Code Online (Sandbox Code Playgroud)

我需要选择TEST8使用VBS。还有比使用更好的方法吗MID/INSTR?例如,直接只选择|从右到左的字符UNTIL?

PS:我只有这些功能可用:

Ascii
Char
比较 DigText 格式
InStr
LCase
Len Left
LTrim
Mid Right
RTrim
Trim
UCase

vbscript

2
推荐指数
1
解决办法
4694
查看次数

MS Access:没有为一个或多个必需参数给出值

我正在尝试对 MS Access 数据库运行以下查询(从 .asp 页面):

SELECT firstname, lastname, emp_id FROM employees ORDER BY firstname
Run Code Online (Sandbox Code Playgroud)

但是,我收到一条错误消息

没有为一个或多个必需参数给出值。

现在,如果我排除“emp_id”(主键)字段,查询运行正常。我已确保该字段存在并且查询中没有拼写错误。

如果我通过 MS Access GUI 运行查询,则会弹出一个窗口,要求我为 emp_id 字段输入“参数值”。这可能就是它不起作用的原因,以及为什么会发生这种情况?

从数据库获取员工:

Function GetEmployees()

    Dim employeesRS, sqlGetEmployees, employeesList, e

    Set employeesList = CreateObject("System.Collections.ArrayList")

    sqlGetEmployees = "SELECT firstname, lastname, emp_id FROM employees ORDER BY firstname"

    Set employeesRS = db.connTb.execute(sqlGetEmployees) 'Custom class to simplify db-querying

    While Not employeesRS.EOF

        Set e = new Employee

        e.Firstname = employeesRS("firstname")
        e.Lastname = employeesRS("lastname")
        e.Id = employeesRS("emp_id")

        employeesList.Add(e)

        employeesRS.MoveNext
    Wend

    employeesRS.Close

    Set GetEmployees …
Run Code Online (Sandbox Code Playgroud)

vbscript ms-access asp-classic

2
推荐指数
1
解决办法
1万
查看次数

如何制作 VBScript 定时器

我需要在消息框中显示一个计时器,用 vbs 编码。消息框需要位于屏幕的左下角,开始菜单的正上方。它需要无法退出,这意味着它不能列在任务栏上(希望如此)并且没有最小化/退出按钮。它需要保持在所有其他窗口之上。它还需要从20分钟开始,以秒为单位倒计时。我希望有人能帮助我——这是一个计算机实验室。

谢谢,马修

vbscript timer

2
推荐指数
1
解决办法
9635
查看次数

VBScript - 将参数传递给 HTA

我正在 VBScript 中编写一些脚本,我需要将一些变量值传递到 HTA,我将用作前端来显示正在发生更新。

我该怎么做呢?

VBScript-------

TestVar1 = "Something 1"
TestVar2 = "Something 2"

wshShell.Run "Updater.hta " & TestVar1 & TestVar2
Run Code Online (Sandbox Code Playgroud)

然后

HTA------- 

TestVar1 = Something.Arguments(0)
TestVar2 = Something.Arguments(1)

Msgbox TestVar1
Msgbox TestVar2
Run Code Online (Sandbox Code Playgroud)

我意识到这不是完全正确的代码,我只是放置它来说明我正在尝试做什么。

你们能提供解决这个问题的任何帮助就太好了,谢谢!

variables vbscript hta

2
推荐指数
1
解决办法
6095
查看次数

为什么从 C# 启动时从 VB 调用 C# COM 对象会出现 0x80070002 错误?

我在使用 regasm.exe 注册的 dll 中有一个 C# COM 对象。我在 COM 对象上执行 createObject 操作,并在使用 cscript 运行的 vbs 脚本中调用该对象的方法。

如果我在命令行上运行它,它一切正常,创建对象通过 com.

cscript.exe c:\mypath\myvb.vbs argument
Run Code Online (Sandbox Code Playgroud)

我现在尝试从 C# 运行相同的命令。我使用 System.Diagnostics.Process 方法

ProcessStartInfo si = new ProcessStartInfo();
si.Filename = "cscript.exe";
si.Arguments = "c:\mypath\myvb.vbs argument";
Process exe = ProcessStart(si);
...
Run Code Online (Sandbox Code Playgroud)

当我以这种方式运行时,出现 0x80070002 错误,这基本上是一个文件未找到错误。我不明白为什么它与 C# 和命令行不同。

编辑 - 更多信息

我正在 64 位操作系统上运行。C# COM dll 是使用“AnyCPU”构建的。我用的是64位regasm。我使用的cscript来自c:\windows\system32,所以它是64位版本。

在命令行中,如果我故意使用 32 位版本的 cscript,我也会收到 0x80070002 错误。这让我怀疑 c# 的问题是相关的,但我仍然不明白。

c# com vbscript com-interop

2
推荐指数
1
解决办法
1460
查看次数

VB脚本中的防锁定方法?

如果系统每 5 分钟锁定一次,使用什么 VB 脚本方法来避免系统每 5 分钟锁定一次?

vbscript qtp

2
推荐指数
1
解决办法
6404
查看次数

使用 VB 脚本进行自然排序

我想使用自然排序对以下项目进行排序:

“Z1”、“Z3”、“Z2”、“Z20”、“Z10”

排序后,我期望的顺序如下:

“Z1”、“Z2”、“Z3”、“Z10”、“Z20”

当我尝试使用数组列表时,

Set oAlist=CreateObject("System.Collections.ArrayList")
oAlist.sort
Run Code Online (Sandbox Code Playgroud)

我得到基于 ASCII 的排序结果:

Z1,Z10,Z2,Z20,Z3

请帮助我如何使用 vb 脚本进行自然排序

sorting vbscript qtp hp-uft

2
推荐指数
1
解决办法
2180
查看次数

脚本错误:溢出:'CInt' - VBScript

将计数器添加到 5 位以上的下一个数字时:出现溢出。

如果是 5 位数字,则不会出现错误。

我用的是VBScript:

Counter = CInt (Counter) + CInt (Qty)
Run Code Online (Sandbox Code Playgroud)

我想在分子中使用 7 位数字。

如何解决这个问题呢?

vbscript

2
推荐指数
1
解决办法
8924
查看次数

如何在 cygwin 下使用 awk 打印 Excel 电子表格中的字段?

我们似乎看到越来越多有关在 Excel 电子表格上执行 awk 的问题,因此这里有一个关于如何执行该特定操作的问答。

我在 Excel 电子表格中包含此信息"$D/staff.xlsx"(其中"$D"是我的桌面的路径):

Name   Position
Sue    Manager
Bill   Secretary
Pat    Engineer
Run Code Online (Sandbox Code Playgroud)

我想打印给定名称的位置字段,例如Secretary给定输入的输出Bill

我目前可以从 Excel 保存为 CSV 以获得:

$ cat "$D/staff.csv"
Name,Position
Sue,Manager
Bill,Secretary
Pat,Engineer
Run Code Online (Sandbox Code Playgroud)

然后运行:

$ awk -F, -v name="Bill" '$1==name{print $2}' "$D/staff.csv"
Secretary
Run Code Online (Sandbox Code Playgroud)

但这只是更大任务的一小部分,因此我必须能够从 shell 脚本自动执行此操作,而无需手动打开 Excel 导出 CSV 文件。如何在运行 cygwin 的 Windows PC 上执行此操作?

csv vbscript excel awk cygwin

2
推荐指数
1
解决办法
1172
查看次数

标签 统计

vbscript ×10

qtp ×2

asp-classic ×1

awk ×1

c# ×1

com ×1

com-interop ×1

csv ×1

cygwin ×1

excel ×1

hp-uft ×1

hta ×1

ms-access ×1

runtime-error ×1

sorting ×1

timer ×1

variables ×1