2

运行 Excel 2010,我可以确保始终在此版本上运行这些工作表,因为它只能在我工作的终端计算机上进行本地访问。

我通过 excel 运行了一些导入过程和大型文件夹过滤/打印批处理功能。我想在我的功能处理过程中使用 Windows 7 任务栏进度条视觉效果,以了解它们的进展情况。考虑使用其他视觉效果来显示进度,但这(如果可能)似乎是最明显和最专业的风格。

我一直在彻底研究试图使这项工作,但无济于事。到目前为止,我的理解是我需要实现 ITaskbarList3 接口,该接口通常在 Windows API 中找到。从我发现的显示如何使其工作的代码中,一旦隐含其余部分似乎相当容易且不言自明。

我完全限制使用 Excel 作为代码的基础,在工作计算机上没有安装权限。我可以在家安装以获取任何必要的文件,然后传输它们。乐于使用任何广泛或真正倒退的方式来达到目的,因为目的证明了采取任何手段都是合理的。

4

1 回答 1

4

使用 Excel 状态栏会容易得多:

Application.StatusBar = "向用户显示进度...";


对于 Windows 和任务栏进度条,您需要下载 Windows 7 任务栏:开发人员资源

您需要打开示例解决方案,右键单击 Windows7.DesktopIntegration 项目 > 属性 > 构建 > 勾选注册 COM。

通过在开发期间检查 IDE 中的“Register for COM interop”选项,IDE 将在目标程序集上调用 regasm 以及 /codebase 选项。

这将导致 regasm.exe 为从您的程序集中导出的 COM 可见类添加以下注册表项:

HKEY_CLASSES_ROOT\CLSID{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}\InprocServer32\CodeBase=

这将使 CLR 能够按照程序集的路径定位您的程序集。如果没有代码库路径,CLR 将不得不使用标准搜索算法来定位您的程序集(及其依赖项)。

下一步构建解决方案 > 转到 Windows7.DesktopIntegration 项目的 bin 文件夹并将 Windows7.DesktopIntegration.DLL 和 Windows7.DesktopIntegration.TLB 复制到 System32 文件夹或更好地注册到 GAC。

一种帮助 CLR 定位所需程序集的相关技术是将所有程序集(及其依赖项)复制到与客户端应用程序本身相同的文件夹中。但是,您的客户端应用程序将是 Excel。这意味着您必须将程序集复制到与 Excel 应用程序相同的文件夹中(这不是一个好主意)。

一旦您能够实例化 Windows7.DesktopIntegration DLL,您应该能够调用该Windows7Taskbar.SetProgressValue方法,例如 VBA 代码:

Set Windows7Taskbar = CreateObject("Windows7.DesktopIntegration")

Windows7Taskbar.SetProgressState(form.Handle, Windows7Taskbar.ThumbnailProgressState.Normal)

Windows7Taskbar.SetProgressValue(form.Handle, progress, maximum)
于 2012-10-02T00:51:10.943 回答