Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.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
Excel 可变模块_Excel_Vba_Object_Module_Scope - Fatal编程技术网

Excel 可变模块

Excel 可变模块,excel,vba,object,module,scope,Excel,Vba,Object,Module,Scope,当我在B2:B10中更改avalue时,需要显示消息“update” 运行Insert_row时,不应给出该消息。 代码可以工作,但是当我将过程Insert_行放在另一个模块中时,公共变量未知? 我怎样才能解决这个问题 Public blockchange As Boolean Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("B2:B10")) Is N

当我在B2:B10中更改avalue时,需要显示消息“update” 运行Insert_row时,不应给出该消息。 代码可以工作,但是当我将过程Insert_行放在另一个模块中时,公共变量未知? 我怎样才能解决这个问题

Public blockchange As Boolean

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("B2:B10")) Is Nothing And blockchange = False Then
MsgBox "Update"
End If

End Sub

Sub Insert_rows()

blockchange = True
Dim LastRow As Integer

LastRow = 3 * ActiveSheet.UsedRange.Rows.Count
For i = 3 To LastRow Step 3
    Cells(i, 1).EntireRow.Insert
    Cells(i, 1).EntireRow.Insert
   
Next i
blockchange = False
End Sub
一些想法:
(1)正如SJR所写,将全局变量放入常规模块中

(2)如果您坚持,您可以在工作表的代码中也包含一个全局变量。在这种情况下,您可以通过将工作表的代码名作为前缀来访问它,例如
Sheet1.blockchange
。工作表的代码名是工作表的内部名称,您可以在项目窗口的VBA编辑器中看到它,或者如果打开属性窗口(F4),它将在第一行显示为
(名称)
。如果重命名图纸,此名称不会更改,只能在VBA编辑器中更改


(3)对于您的特定情况,最好不要使用变量,而只是防止在运行
插入
-代码时触发事件。您可以使用语句
Application.EnableEvents=False
执行此操作。只是别忘了在代码末尾加上
Application.EnableEvents=True
,可能有一个错误处理程序来防止在发生错误时语句不执行。

在普通模块中声明它。或者在过程中使用例如
Sheet1.blockchange
。是的,这是一个更好的解决方案。