打开启用宏的Excel文件后,我得到以下内容:
运行时错误' -2147024809(80070057)':已添加具有相同密钥的项目。
我已经看到很多其他语言的类似问题,但VBA没有。我确实在VBA上找到了一件事,但它说它与Scripting.Dictionary库有关。
但是,我没有引用MS Scripting Runtime,也没有绑定它,我没有Dictionaries或Arrays或此文件中的任何类型。我唯一能想到的是我有一个只有进度条的小型Userform。该Userform上的每个项都是唯一命名的,并且它们都不是系统应保留或使用的单词。
有没有人碰到这个或有任何想法?
修改
好的,刚刚发生了奇怪的事情......在打开我的文件之前,我关闭了在VBE中打开的另外两个VBA项目(加载项),并且错误没有出现。这两个其他文件一直打开,我一直在处理这个文件...
然后我完全关闭了Excel ...打开其他2个文件,打开我的文件没有错误。我不知道......
更新
打开另一个文件时出现同样的错误。如果我的问题还不够清楚......有没有人知道这个错误可能带来了什么,或者如何阻止它?
答案 0 :(得分:1)
这看起来像是一个Scripting.Dictionary错误,但事实上下面的代码抛出了一个与你的不同的代码457的错误,并且字典的错误消息也不同'这个键已经与这个集合的元素相关联'这可以通过代码
进行验证Option Explicit
Sub Tst()
On Error Resume Next
Dim dic As New Scripting.Dictionary
dic.Add 1, 0
dic.Add 1, 0
Debug.Print Err.Number, Err.Description
End Sub
所以它不是你的VBA代码恕我直言,但它看起来很像C#错误,我们可以用一些代码验证这一点,在Visual Studio中打开一个Windows Forms C#项目,然后将Form1_Load编辑为以下
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace WindowsFormsApplication3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
try
{
Dictionary<long, long> dicTest = new Dictionary<long, long>();
dicTest.Add(1, 0);
dicTest.Add(1, 0);
}
catch (Exception ex) {
System.Windows.Forms.MessageBox.Show(string.Format("{0} {1}", ex.HResult, ex.Message));
}
}
}
}
这将抛出消息框,其中包含您报告的错误号和消息。因此它是一个C#字典错误恕我直言,并注意我们如何使用try catch块捕获它,而我认为你有代码C#没有捕获错误。
接下来的问题是哪个工作簿负责。我建议在你的实验中使用Application.EnableEvents = False
来关闭事件处理,这样就不会运行用任何语言VBA,C#,VB,NET编写的事件处理程序。然后,您可以手动运行工作簿的初始化例程,如果没有错误,您的工作簿无罪,而其他工作簿/插件必须有罪,您可以向其作者报告错误。
我希望你在这方面取得进展。没有反馈就很难做到这一点。