从VBA界面运行宏时Excel崩溃,但在使用按钮时有效

时间:2015-06-12 19:10:05

标签: excel vba excel-vba

我有一个宏,它采用不同的范围,使用其中的值执行计算,然后将值复制到单元格以供工作表中的公式使用。我希望在修改某些范围内的值时运行此宏。我在不同的工作表中使用相同的代码,我最初放置了一个ActiveX按钮。 问题是,当我把宏放在worksheet_calculate或Worksheet_SelectionChange时,Excel崩溃了。起初我假设我正在导致无限次迭代,但在使用EventEnable = FALSE和EnableCalculations = FALSE以避免该行为后Excel仍然崩溃。我删除了SelectionChange和Calculate中的宏,我进一步检查了这个问题,发现当从VBA界面运行宏时,Excel也会崩溃,但是它可以与引用宏的工作表中的ActiveX按钮一起使用。 我似乎无法找到代码有什么问题,以及为什么它在通过按钮访问时运行完美,但在从VBA界面运行时崩溃。

这是代码,请帮我找出错误,或者我可以尝试从VBA运行,因为调用它或从界面运行它将导致Excel崩溃。

BEGIN   
DECLARE count int;

                    SELECT count (*) FROM 
                                    (
                                       SELECT distinct
                                       table_name
                                       FROM information_schema.columns
                                       WHERE table_name IN ('authors', ‘publishers’)
                                       AND column_name = 'ISBN'
                                       and table_schema = 'myDB'
                                    )any_alias
                    INTO count;
                    SELECT count INTO msg;      /*just to debug counter*/
END

我正在运行Excel 2013和Windows 7专业版

1 个答案:

答案 0 :(得分:1)

我不确定这是否是您问题的最终答案,但有一件事可能会影响您的宏,使用ActiveWorkbook,ActiveSheet等活动对象。

我的建议是引用您必须使用的对象,以便在未选择您的Excel文件或选择错误的工作表时,代码仍然有效。为此,请查看以下示例:

Dim workingSheet as Worksheet
Dim auxWorksheet as Worksheet

Set workingSheet = ThisWorkbook.Worksheets("The name of the worksheet here")
Set auxWorksheet = ThisWorkbook.Worksheets(tempString)

Set bla = workingSheet.Range("D16:D75")
Set curve = workingSheet.Range("G2:WH11")
Set price = workingSheet.Range("G162:WH164")
Set finalOut = workingSheet.Range("G83:WH141")
tempString = workingSheet.Name
a = auxWorksheet.Cells(10, 8).Value

请试一试并提供一些反馈,以便如果不起作用,我会继续努力帮助您。