为什么Macro Enabled Excel Workbook在关闭时会在另一个启用宏的Excel工作簿中杀死UserForm?

时间:2018-03-06 23:12:08

标签: excel vba excel-vba userform

方案: 用户正在运行启用宏的Excel工作簿。用户单击UserForm上的链接,该链接将启动另一个也具有用户表单的启用宏的Excel工作簿。然后使用以下代码关闭第二个工作簿:

CREATE TABLE `usuarios` (
  `id` varchar(11) NOT NULL,
  `nombre` tinytext NOT NULL,
  `admin` tinyint(1) NOT NULL DEFAULT '0',
  `ultima_entrada` timestamp NULL DEFAULT NULL,
  `ultima_salida` timestamp NULL DEFAULT NULL,
  `tiempo_total` time DEFAULT NULL,
  `ultimo_pago` date DEFAULT NULL,
  `dentro` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO `usuarios` (`id`, `nombre`, `admin`, `ultima_entrada`, `ultima_salida`, `tiempo_total`, `ultimo_pago`, `dentro`) VALUES
('12345', 'John', 0, '2018-03-06 16:41:44', '2018-03-06 16:41:36', '00:00:00', '2018-03-01', 1);

和...

Private Sub btnExit_Click()

'Check if other Excel files are open before quitting the application
If Workbooks.Count = 1 Then
    Application.Quit
Else
    ThisWorkbook.Close
End If

End Sub

关闭第二个工作簿(ThisWorkbook.Close)后,原始工作簿仍保持打开状态,但之前可见的vbModeless UserForm已被终止。提及第二个工作簿的形式是模态也可能是恰当的。

如果使用右上角的Excel退出按钮关闭第二个工作簿,则不会出现此问题。

有谁知道为什么会这样?是否因为以编程方式关闭工作簿时Excel.Application的代码执行停止了?可能是由于形式模式的不同?除了在工作表中的原始工作簿上放一个按钮以重新启动UserForm之外,还有其他解决办法吗?

非常感谢您对此问题的任何帮助!! CiViCChiC79

2 个答案:

答案 0 :(得分:1)

这就是发生的事情:

  • 假设两个工作簿都在同一个Excel应用程序中,Application.Quit将关闭它们。

  • ThisWorkbook.Close将关闭代码所在的工作簿。

因此,关于您的问题 - 您没有使用ThisWorkbook.Close关闭第二个工作簿,但是您正在关闭已单击的btnExit按钮的工作簿。我猜两个工作簿都非常相似,你错了哪一个你正在关闭?

答案 1 :(得分:-1)

将包含Exit按钮的第二个Workbook表单更改为vbModeless修复了问题!!!!耶!!!!!