2016-01-13 146 views
0

我需要一些vba代碼的幫助,這些代碼將從當前活動表格的不同表格中刪除整行。從多個表格中刪除整行

該代碼使用用戶表單根據輸入到文本框中的序列號刪除行。要刪除的行重複在用戶表單和另一個表單中激活。下面是我嘗試過的一個例子,它將刪除當前表的一行,但在Else命令的第二部分代碼中發回一個錯誤。

Private Sub ScrapButton_Click() 

Dim RTCNumber As String 
RTCNumber = RTCTextBox 

MSG1 = MsgBox("Remove " + RTCTextBox + " from Lab Stock?", vbYesNo) 

If MSG1 = vbNo Then 
    Exit Sub 
Else 
    Dim Row As Integer 
    Row = Application.WorksheetFunction.Match(RTCNumber, Sheet6.Range("A:A"), 0) 
    Rows(Row).EntireRow.Delete 
    Dim Row2 As Integer 
    Row2 = Application.WorksheetFunction.Match(RTCNumber, Sheet1.Range("A:A"), 0) 
    Sheets("Sheet1").Rows(Row2).EntireRow.Delete 

End If 

End Sub 

任何幫助將不勝感激,我可能失去了一些東西很明顯,但我是相當新的VBA。我已經嘗試了幾個選項,並且無法使用Worksheet.Activate函數來使其工作。

在此先感謝。

詹姆斯

回答

0

試試這個:

Private Sub ScrapButton_Click() 

    Dim RTCNumber As Double 
    Dim Row2 As Variant 
    Dim Row1 As Variant 
    Dim wb As Workbook 
    Dim ws1 As Worksheet 
    Dim ws6 As Worksheet 

    Set wb = ThisWorkbook 
    Set ws1 = wb.Sheets("Sheet1") 
    Set ws6 = wb.Sheets("Sheet6") 

RTCNumber = RTCTextBox 

MSG1 = MsgBox("Remove " & RTCNumber & " from Lab Stock?", vbYesNo) 

If MSG1 = vbNo Then 
    Exit Sub 
Else 

    Row1 = ws6.Application.WorksheetFunction.Match(RTCNumber, ws6.Range("A:A"), 0) 
    ws6.Rows(Row1).EntireRow.Delete 


    Row2 = ws1.Application.WorksheetFunction.Match(RTCNumber, ws1.Range("A:A"), 0) 
    ws1.Rows(Row2).EntireRow.Delete 

End If 

End Sub 
0

嘗試CLng函數的匹配函數的第一個參數。這對我行得通。

不得不刪除我的版本的Excel WorksheetFunction,但我不知道這是你的機器上的情況,所以我離開了進去。

然後,當馬努在他回答說,我加入工作表參考。

Private Sub ScrapButton_Click() 

Dim RTCNumber As String 
RTCNumber = RTCTextBox 

MSG1 = MsgBox("Remove " + RTCTextBox + " from Lab Stock?", vbYesNo) 

If MSG1 = vbNo Then 
    Exit Sub 
Else 
    Dim Row As Integer 
    Row = Application.WorksheetFunction.Match(Clng(RTCNumber), Sheets("Sheet6").Range("A:A"), 0) 
    Rows(Row).EntireRow.Delete 
    Dim Row2 As Integer 
    Row2 = Application.WorksheetFunction.Match(Clng(RTCNumber), Sheets("Sheets1").Range("A:A"), 0) 
    Sheets("Sheet1").Rows(Row2).EntireRow.Delete 

End If 

End Sub 
0

您可以使用更簡單的方法使用range.find方法來實現所需的結果。
所以,你的代碼可以是這樣的:

Private Sub ScrapButton_Click() 
    Dim RTCNumber As String 
    Dim Cl As Range 
    RTCNumber = RTCTextBox 

    msg1 = MsgBox("Remove " + RTCTextBox + " from Lab Stock?", vbYesNo) 

    If msg1 = vbNo Then 
     Exit Sub 
    Else 
     With Sheets("Sheet1") 
      Set Cl = .[A:A].Find(RTCNumber, , xlValues, xlWhole) 
      If Not Cl Is Nothing Then Cl.EntireRow.Delete 
     End With 
     With Sheets("Sheet6") 
      Set Cl = .[A:A].Find(RTCNumber, , xlValues, xlWhole) 
      If Not Cl Is Nothing Then Cl.EntireRow.Delete 
     End With 
    End If 
End Sub 

如果你還是喜歡的worksheetfunction使用,那麼你應該知道,如果worksheetfunction.match找不到搜索值,那麼它會返回錯誤,worksheetfunction須予使用只有錯誤處理。

0

輝煌,感謝您的幫助!

管理得到它與Manu的答案與一些小小的調整。它結束了這樣的:

Private Sub ScrapButton_Click() 

    Dim RTCNumber As String 
    Dim Row2 As Variant 
    Dim Row1 As Variant 
    Dim wb As Workbook 
    Dim ws1 As Worksheet 
    Dim ws6 As Worksheet 

    Set wb = ActiveWorkbook 
    Set ws1 = wb.Worksheets("Lab Stock") 
    Set ws6 = wb.Worksheets("Scrap") 

RTCNumber = RTCTextBox 

MSG1 = MsgBox("Remove " & RTCNumber & " from Lab Stock?", vbYesNo) 

If MSG1 = vbNo Then 
    Exit Sub 
Else 

    Row1 = ws6.Application.WorksheetFunction.Match(RTCNumber, ws6.Range("A:A"), 0) 
    ws6.Rows(Row1).EntireRow.Delete 


    Row2 = ws1.Application.WorksheetFunction.Match(RTCNumber, ws1.Range("A:A"), 0) 
ws1.Rows(Row2).EntireRow.Delete 

End If 

End Sub 

非常感謝!