2014-10-03 57 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