2014-10-03 59 views
-2

我有一个工作簿,有一些地方可以输入参数(样品数量,测量次数,零件编号等),和一个将根据输入创建数据表的按钮。我已经设置了宏,还添加了几个旋钮来添加/删除样本数量并添加/删除测量数量。我需要添加/删除列和行与几个旋钮

我有旋转按钮链接到我想要更改的单元格,但我需要一些代码来检查值是否更改(即用户想要添加/删除列或行)。我试着做了一个循环,但是那次失败惨剧,并以一次崩溃丢失了半小时的代码而告终。我是vba的新手,我很想完成这个宏。

我可以做的另一个选择是使用4个按钮与单个宏,但我需要能够从该宏跳转到另一个宏的特定部分。那可能吗?

谢谢!

编辑:这里是我从我收到的答案写的代码,但我得到的错误:“对象变量或块变量未设置”。

Private Sub Worksheet_Change(ByVal Target As Range) 

Dim del As Boolean 

If Not (Intersect(Target, Range("K1"))) Is Nothing Then 
    If Cells(1, 11) > samples Then 
     samples = Cells(1, 11) 
     Application.Run ("samplechange") 
    ElseIf Cells(1, 11) < samples Then 
     del = Application.InputBox(prompt:="Are you sure you want to delete a sample column?  Enter True/False.", Title:="delete?", Type:=4) 
     If del = True Then 
      samples = Cells(1, 11) 
      Application.Run ("samplechange") 
     ElseIf del = False Then 
      Cells(1, 11) = samples 
     End If 
    End If 
End If 

End Sub 

回答

0

运行代码时,细胞的变化,在你的VB编辑/宏编辑器请双击该小区所在的表,然后使用下拉菜单顶部的代码编辑区选用WorksheetChange。这将创建看起来像代码区新的子程序:

Private Sub Worksheet_Change(ByVal Target As Range) 

End Sub 

Target是改变的范围。你可以测试,看看这是你关心的范围/细胞类似于:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Not(Intersect(target, Range("MyRangeToTest")) Is Nothing) Then 
      'Your cell was changed, so do something here 
    End if 
End Sub 
+0

感谢您的帮助!我在搜索中看到了这种方法,但它看起来并不适用于我正在尝试做的事情。谢谢你澄清。关于我的问题的第二部分,有没有办法在另一个宏中跳转到标签? – 2014-10-03 15:15:22

+0

不,您不能跳到另一个子例程或函数内的标签。相反,将代码从标签中取出并粘贴到其自己的子例程中(如果需要,将参数传递给它),然后从需要它的两个代码块中调用该子例程。 – JNevill 2014-10-03 15:17:39

+0

谢谢!这是我写的代码,但它给了我一个错误:“对象变量或块变量未设置”。 编辑:添加代码到原来的文章 – 2014-10-03 16:21:10