2016-01-13 147 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 

非常感谢!