相关疑难解决方法(0)

测试MS Access应用程序的最佳方法?

使用同一数据库中的代码,表单和数据,我想知道为Microsoft Access应用程序设计一套测试的最佳实践是什么(比如Access 2007).

测试表单的主要问题之一是,只有少数控件具有hwnd句柄,而其他控件只能获得一个焦点,这使得自动化非常不透明,因为您无法获取表单上的控件列表.

有经验可以分享吗?

database ms-access vba unit-testing

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

将.NET事件暴露给COM?

我一直在尝试向VBA客户端公开和触发事件.到目前为止,在VBA客户端,事件已暴露,我看到方法事件处理方法已添加到我的模块类,但VBA事件处理方法不会触发.出于某种原因,调试事件时为null.同步修改我的代码也没有帮助.

为了记录,我已经检查了其他SO问题,但他们没有帮助.

任何好的答案将不胜感激.

[ComVisible(true)]
[Guid("56C41646-10CB-4188-979D-23F70E0FFDF5")]
[ClassInterface(ClassInterfaceType.None)]
[ComSourceInterfaces(typeof(IWebEvents))]
[ProgId("MyAssembly.MyClass")]
public class MyClass : ServicedComponent, IMyClass
{
    public string _address { get; private set; }
    public string _filename { get; private set; }

    [DispId(4)]
    public void DownloadFileAsync(string address, string filename)
    {
        _address = address;
        _filename = filename;
        System.Net.WebClient wc = new System.Net.WebClient();
        Task.Factory.StartNew(() => wc.DownloadFile(_address, _filename))
            .ContinueWith((t) =>
        {
            if (null != this.OnDownloadCompleted)
                OnDownloadCompleted();
        });
    }
    public event OnDownloadCompletedEventHandler OnDownloadCompleted;
}

[ComVisible(false)]
public delegate void OnDownloadCompletedEventHandler();

[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IWebEvents
{ …
Run Code Online (Sandbox Code Playgroud)

c# com events vba

25
推荐指数
1
解决办法
3821
查看次数

如何在VBA中使用类似于VB.NET的类对象模块之间的比较方法?

由于VBA中的新项目,我从VB.NET转移,说实话,不知道如何在这里处理对象类.我想要达到的是比较不同类对象模块之间的对象.

例如

class Employee
     属性:Name,Age
     point是:比较Name两个Employees之间的s

类:员工经理
的观点是:比较Name员工Name经理

我知道如何在VB.NET中,但如何比较VBA中不同类模块对象的属性?

vb.net comparison vba interface class

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

从自定义集合类中的对象引发事件

如果对象包含在集合中,那么该对象是否仍然可以将事件引发到父类?

显然,您可以告诉子类对父类的引用,然后在子类中的父类中调用公共方法,但这会导致循环引用,据我所知它会使它成为垃圾收集器永远不会摆脱任何一个对象.

细节:我有两个类,一个是名为clsPerson的人,另一个是名为clsPeople的自定义集合类.clsPerson有一个名为Selected的公共布尔属性.如果选择了更改,我会调用一个事件SelectedChange.那时,我需要在clsPeople做点什么.如何在自定义集合类clsPeople中捕获事件?person类可以从People的范围之外更改,否则我会查看另一个解决方案.

<<Class clsPerson>>
Private pSelected as boolean

Public Event SelectedChange()

Public Property Let Selected (newVal as boolean)
  pSelected = newVal
  RaiseEvent SelectedChange
End Property

Public Property Get Selected as boolean
  Selected = pSelected
End Property

<<Class clsPeople>>
Private colPeople as Collection

' Item set as default interface by editing vba source code files
Public Property Get Item(Index As Variant) As clsPerson
  Set Item = colPeople.Item(Index)
End Property

' New Enum set to -4 to enable for ... each …
Run Code Online (Sandbox Code Playgroud)

events vba

9
推荐指数
1
解决办法
5044
查看次数

将WithEvents与实现另一个的类一起使用时的运行时错误459

我正在使用Word开发VBA项目,并且在使用实现另一个类的类时遇到了处理事件的问题.

我定义了一个空类,IMyInterface:

Public Sub Xyz()
End Sub

Public Event SomeEvent()
Run Code Online (Sandbox Code Playgroud)

还有一个MyClass实现上述的类:

Implements IMyInterface

Public Event SomeEvent()

Public Sub Xyz()
  ' ... code ...
  RaiseEvent SomeEvent
End Sub

Private Sub IMyInterface_Xyz()
   Xyz
End  Sub
Run Code Online (Sandbox Code Playgroud)

如果我创建第三个类,则OtherClass声明一个具有接口类类型的成员变量:

Private WithEvents mMy As IMyInterface
Run Code Online (Sandbox Code Playgroud)

并尝试使用实现类的实例初始化此变量:

Set mMy = New MyClass
Run Code Online (Sandbox Code Playgroud)

我得到一个运行时错误'459':该组件不支持这组事件.

此错误消息的MSDN页面指出:

"您尝试将WithEvents变量与不能用作指定事件集的事件源的组件一起使用.例如,您可能正在沉没对象的事件,然后创建另一个实现第一个对象的对象.你可能认为你可以从实现的对象中吸收事件,这不是自动的情况.Entruments只实现方法和属性的接口."

以上几乎总结了我正在尝试做的事情.措辞,"这不是自动的情况",而不是"这是不可能的",似乎表明我需要做一些手工工作才能让它工作,但它没有告诉我什么!有人知道这是否可以在VBA中使用?

vba ms-word word-vba

7
推荐指数
1
解决办法
2301
查看次数

创建一个类来处理访问表单控制事件

我正在尝试创建一个类来处理 Access 中的多个控制事件。这是为了避免重复键入多行相同的代码。

我已遵循下一页上的答案,但进行了一些调整以使其适合 Access 而不是 Excel。

如何为多个按钮分配一个通用的程序?

我的班级代码如下:

Option Compare Database

Public WithEvents ct As Access.CommandButton 'Changed object type to something recognised by Access

Public Sub ct_Click()
    MsgBox ct.Name & " clicked!"
End Sub
Run Code Online (Sandbox Code Playgroud)

我的表单代码如下:

Option Compare Database
Private listenerCollection As New Collection
Private Sub Form_Load()
Dim ctItem
Dim listener As clListener

For Each ctItem In Me.Controls
    If ctItem.ControlType = acCommandButton Then 'Changed to test whether control is a Command Button
        Set listener = New clListener
        Set listener.ct = …
Run Code Online (Sandbox Code Playgroud)

events ms-access vba class commandbutton

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