Excel VBA无模式Userform禁用剪贴板

时间:2018-05-14 18:34:58

标签: excel vba excel-vba

我正在运行桌面宏,它在不同时间运行excel宏。我使用出现在某些点的无模式Userforms来提示Desktop宏开始某些过程。

当输入数据时,会出现有问题的代码。 UserForm1显示,提示桌面宏使用文本导入向导从记事本复制到Excel中(给我时,​​记事本中的数据为.csv)。

如果输入的数据对于一张纸而言太长,则单独的步骤会创建其他纸张。输入宏测试其他工作表。如果它们存在,它们将生成其他Userforms以提示将数据输入到其他工作表中。

它有一段时间的功能。我更改了代码并声明了一些私有常量用于模块范围的使用,但是现在当UserForm显示时剪贴板仍然是灰色的。我很难过。

数据已过时,宏在给定的纸张上循环输入数据(每次一天)。

私人常数:

const array = [...multiplier()];

代码:

Private Const DayNumber As Integer 'Day # being cycled through
Private Const MonthDayMaximum As Integer 'Maximum # of days in month

1 个答案:

答案 0 :(得分:4)

我猜测灰色表示应用程序错误。并且不难发现。

始终使用Option Explicit。这与Debug - >一起使用Compile将有助于揭露编码缺陷。

我看到的第一个问题是你使用Const。他们不是。

Private Const DayNumber As Integer 'Day # being cycled through
Private Const MonthDayMaximum As Integer 'Maximum # of days in month

如果你真的希望它们保持不变,应该像下面那样声明:

Private Const DayNumber As Integer = <something> 'Day # being cycled through
Private Const MonthDayMaximum As Integer = <something> 'Maximum # of days in month

它会立即告诉您Const是错误的元素(在所有日期和月份之后不是常数)。

然后,在您的主代码中,您尝试将某些内容分配给Const这是一个很大的禁忌。

DayNumber = 1 ' Bad!
MonthDayMaximum = InputBox("Input Days in Month","Input Prompt",0) + 1 ` Bad!

如果您希望它们是模块范围的,那么将它们声明在模块的顶部,如:

Private DayNumber As Integer 'Day # being cycled through
Private MonthDayMaximum As Integer 'Maximum # of days in month

请注意,它们不是Const。这应该有用,但这也会尖叫&#34;代码发臭&#34;并打破了良好和OOP-ish编程的基础。