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

时间:2015-12-04 21:25:47

标签: vbscript activex hta

我对HTA和VBScript相对较新。我试图使用HTA和VBScript复制一些VBA功能,以消除对像MS Excel这样的VBA容器的需要。

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

我遇到的问题与处理iGrid事件参数有关。我正在使用RequestEdit事件,该事件具有通过引用传递的bCancel参数。使用VBA时,在RequestEdit事件中将bCancel设置为True会禁用对活动列的编辑,这是所需的行为。我使用ByRef为bCancel参数在VBScript中创建了RequestEdit事件。当事件执行时,我将某些网格列的bCancel参数设置为True(并使用MsgBox bCancel验证),但此值不会返回给iGrid控件。无论bCancel的值如何,所有列都可以编辑。

这是否与作为Variants传递的所有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>

0 个答案:

没有答案