Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 错误-已添加具有相同密钥的项_Vba_Excel - Fatal编程技术网

Vba 错误-已添加具有相同密钥的项

Vba 错误-已添加具有相同密钥的项,vba,excel,Vba,Excel,打开启用宏的Excel文件后,我得到以下信息: 运行时错误“-2147024809(80070057)”:已添加具有相同键的项 我在其他语言中看到过很多类似的问题,但在VBA中没有看到。我确实在网上找到了一件VBA的东西,但它说它与脚本编写.字典库有关 但是,我没有提到MS脚本运行时,也没有绑定到它,并且我在这个文件中没有字典、数组或任何类似的东西。我唯一能想到的是我有一个小的用户表单,它只是一个进度条。该Userform上的每一项都是唯一命名的,它们都不是系统应该保留或使用的字 有人遇到过这个

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

运行时错误“-2147024809(80070057)”:已添加具有相同键的项

我在其他语言中看到过很多类似的问题,但在VBA中没有看到。我确实在网上找到了一件VBA的东西,但它说它与脚本编写.字典库有关

但是,我没有提到MS脚本运行时,也没有绑定到它,并且我在这个文件中没有字典、数组或任何类似的东西。我唯一能想到的是我有一个小的用户表单,它只是一个进度条。该Userform上的每一项都是唯一命名的,它们都不是系统应该保留或使用的字

有人遇到过这个问题或有什么想法吗

编辑:

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

然后我完全关闭了Excel…让其他两个文件保持打开状态,并毫无错误地打开了我的文件。我不知道

更新:


刚打开另一个文件时遇到同样的错误。如果我的问题还不够清楚…有人知道这个错误可能与什么有关吗,或者如何停止?

这看起来像是脚本。字典错误,但事实上,以下代码抛出的错误代码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代码IMHO,但它看起来更像是一个C#错误,我们可以用一些代码来验证这一点,在Visual Studio中打开一个Windows Forms C#项目,然后将Form1#加载编辑为以下内容

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));
            }
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Windows.Forms;
命名空间Windows窗体应用程序3
{
公共部分类Form1:Form
{
公共表格1()
{
初始化组件();
}
私有void Form1\u加载(对象发送方、事件参数e)
{
尝试
{
Dictionary dicTest=新字典();
添加(1,0);
添加(1,0);
}
捕获(例外情况除外){
Show(string.Format(“{0}{1}”,ex.HResult,ex.Message));
}
}
}
}
这会抛出包含错误号和您报告的消息的消息框。因此,这是一个C#字典错误IMHO,请注意我们是如何用try-catch块捕获它的,而我认为您的代码C#没有捕获错误

所以下一个问题是哪个工作簿负责。我建议在您的实验中使用
Application.EnableEvents=False
,它关闭事件处理,这样用任何语言VBA、C#、VB、NET编写的事件处理程序都不会运行。然后,您可以手动运行工作簿的初始化例程,如果没有发生错误,您的工作簿是无罪的,而其他工作簿/加载项必须是有罪的,您向其作者报告错误


我希望你在这方面取得进展。在没有反馈的情况下,很难进一步了解这一点。

通过单击“调试”并单步执行代码,您能看到错误产生的原因吗?不,它运行正常,错误只在打开文件时出现……并且没有突出显示任何内容。我在Excel 2016中遇到了相同的错误。关闭所有打开的实例后重新启动Excel对我有效。我可以在没有打开事件的情况下启动工作簿,但仍然会出现错误,而且这不会发生在一个工作簿上。我倾向于相信这个错误是由于一个插件造成的。我会尝试删除它们,看看在接下来的几天里我会犯什么错误,看看是否可以缩小范围。感谢您的研究…我在这个系统上仅限于VBA,没有Visual Studio。