无法使用VBScript处理HTA中的ActiveX事件参数

无法使用VBScript处理HTA中的ActiveX事件参数,vbscript,activex,hta,Vbscript,Activex,Hta,我对HTAs和VBScript比较陌生。我试图使用HTA和VBScript复制一些VBA功能,以消除对VBA容器(如MS Excel)的需要 我的应用程序使用igridv5.0控件。我让HTA显示网格的一个实例,我可以填充它 我遇到的问题与处理iGrid事件参数有关。我使用的是RequestEdit事件,该事件通过引用传递了一个bCancel参数。使用VBA时,在RequestEdit事件中将bCancel设置为True将禁用对活动列的编辑,这是所需的行为。我使用bCancel参数的ByRef在

我对HTAs和VBScript比较陌生。我试图使用HTA和VBScript复制一些VBA功能,以消除对VBA容器(如MS Excel)的需要

我的应用程序使用igridv5.0控件。我让HTA显示网格的一个实例,我可以填充它

我遇到的问题与处理iGrid事件参数有关。我使用的是RequestEdit事件,该事件通过引用传递了一个bCancel参数。使用VBA时,在RequestEdit事件中将bCancel设置为True将禁用对活动列的编辑,这是所需的行为。我使用bCancel参数的ByRef在VBScript中创建了RequestEdit事件。当事件执行时,我将某些网格列的bCancel参数设置为True(并使用MsgBox bCancel进行验证),但该值不会返回到iGrid控件。无论“取消”的值是多少,所有列都保持可编辑状态

这是否与作为变量传递的所有VBScript变量/参数有关?关于成功地将ByRef事件参数值传递回ActiveX控件所需执行的操作,有什么建议吗

下面是我的两个代码示例。这首先使用VBA和预期功能,其中值为“锁定”的单元格取消编辑以保持锁定,“可编辑”单元格允许更新:

Option Explicit

Private Sub grdTest_RequestEdit(ByVal lRow As Long, ByVal lCol As Long, ByVal lCharCode As Long, bCancel As Boolean, sText As String, lMaxLength As Long, eTextEditOpt As iGrid500_10Tec.ETextEditFlags)

    bCancel = (lCol = 1)

End Sub

Private Sub UserForm_Activate()

    With grdTest
        .ColCount = 2
        .RowCount = 1
        .RowHeight(1) = 20
        .CellValue(1, 1) = "Locked"
        .CellValue(1, 2) = "Editable"
    End With

End Sub
第二个示例是我的HTA代码,其中两个单元格都保持可编辑状态。我在RequestEdit事件中添加了MsgBox命令,以显示bCancel的值:

<head>
<title>Test iGrid</title>
<HTA:APPLICATION 
     APPLICATIONNAME="Test iGrid"
     SCROLL="yes"
     SINGLEINSTANCE="yes"
     WINDOWSTATE="normal"
/>

<script type="text/VBScript">

Sub Window_OnLoad()

    With grdTest
        .ColCount = 2
        .RowCount = 1
        .RowHeight(1) = 20
        .CellValue(1, 1) = "Locked"
        .CellValue(1, 2) = "Editable"
    End With

End Sub

Sub grdTest_RequestEdit(ByVal lRow, ByVal lCol, ByVal lCharCode, ByRef bCancel, ByRef sText, ByRef lMaxLength, ByRef eTextEditOpt)

    bCancel = (lCol=1)
    Msgbox bCancel

End Sub

</script>
</head>

<body>
<body bgColor="C0C0C0">
<object id="grdTest" classid="clsid:3F7D8777-8E7B-4AD1-9A24-D453DC390BAD" codebase="iGrid500_10Tec.ocx" Width="800" Height="400">
</object><br>
</body>

测试iGrid
子窗口_OnLoad()
用grdTest
.ColCount=2
.RowCount=1
.行高(1)=20
.CellValue(1,1)=“已锁定”
.CellValue(1,2)=“可编辑”
以
端接头
子grdTest_RequestEdit(ByVal lRow、ByVal lCol、ByVal lCharCode、ByRef bCancel、ByRef sText、ByRef lMaxLength、ByRef etexteditop)
bCancel=(lCol=1)
Msgbox bCancel
端接头


您可以显示任何代码吗?可以。下面是两个代码示例。第一个示例是VBA,其功能与预期相同,其中锁定的单元格禁用编辑,可编辑的单元格可以修改:对不起,我不知道注释选项是如何工作的。我在原来的帖子中添加了代码。感谢您提供的帮助。在
对象之后定义
子grdTest\u RequestEdit
可能会有所帮助。好的,为了进行事件连接,在声明事件处理程序之前必须知道
grdTest
名称。