Excel - Windows 7任务栏进度

时间:2012-10-01 23:59:09

标签: excel winapi vba excel-vba taskbar

运行Excel 2010,我可以肯定一直在这个版本上运行这些工作表,因为它只能在我工作的终端计算机上本地访问。

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

我一直在努力尝试做这项工作,但无济于事。到目前为止,我的理解是我需要实现在Windows API中常见的ITaskbarList3接口。从我发现的代码中可以看出如何使其工作,一旦得到启发,其余部分似乎相当容易和不言自明。

我完全限制使用Excel作为代码的基础,对工作计算机没有安装权限。我可以在家安装以获取所需的任何文件,然后传输它们。很高兴使用任何广泛的或真正向后的方式来达到目的,因为无论采取什么方式都可以证明其结果。

1 个答案:

答案 0 :(得分:4)

使用Excel状态栏会更容易:

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


对于Windows&任务栏进度条需要下载 Windows 7 taskbar: Developer Resources

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

通过在开发期间检查IDE中的“注册COM互操作”选项,IDE将与/ codebase选项一起调用目标程序集上的regasm。

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

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

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

下一步构建解决方案>将bin7.文件夹转到Windows7.DesktopIntegration项目,并将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)