错误 - 已添加具有相同键的项目

时间:2017-01-25 18:25:44

标签: vba excel-vba excel

打开启用宏的Excel文件后,我得到以下内容:

  

运行时错误' -2147024809(80070057)':已添加具有相同密钥的项目。

我已经看到很多其他语言的类似问题,但VBA没有。我确实在VBA上找到了一件事,但它说它与Scripting.Dictionary库有关。

但是,我没有引用MS Scripting Runtime,也没有绑定它,我没有Dictionaries或Arrays或此文件中的任何类型。我唯一能想到的是我有一个只有进度条的小型Userform。该Userform上的每个项都是唯一命名的,并且它们都不是系统应保留或使用的单词。

有没有人碰到这个或有任何想法?

修改

好的,刚刚发生了奇怪的事情......在打开我的文件之前,我关闭了在VBE中打开的另外两个VBA项目(加载项),并且错误没有出现。这两个其他文件一直打开,我一直在处理这个文件...

然后我完全关闭了Excel ...打开其他2个文件,打开我的文件没有错误。我不知道......

更新

打开另一个文件时出现同样的错误。如果我的问题还不够清楚......有没有人知道这个错误可能带来了什么,或者如何阻止它?

1 个答案:

答案 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编写的事件处理程序。然后,您可以手动运行工作簿的初始化例程,如果没有错误,您的工作簿无罪,而其他工作簿/插件必须有罪,您可以向其作者报告错误。

我希望你在这方面取得进展。没有反馈就很难做到这一点。