Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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 在VBA中为多个用途重命名SUB、移动行和_Excel_Vba - Fatal编程技术网

Excel 在VBA中为多个用途重命名SUB、移动行和

Excel 在VBA中为多个用途重命名SUB、移动行和,excel,vba,Excel,Vba,我对编码是全新的 我试图使用该代码将行移动到不同的工作表,并将完成的行移动到不同的工作表 当我尝试将名称更改为类似于工作表\u Change complete或工作表\u Change3的内容时,子工作表\u Change被视为模棱两可的名称,并且不起作用,这给我带来了麻烦 下面是我尝试使用的代码 我的计划是,当按下命令按钮触发宏在第13(M)列中插入单词“COMPLETE”时,我希望已完成的订单(行)移动到一个新工作簿,在该工作簿中我已命名为“completed” 这本新的工作簿以前是我的工作

我对编码是全新的

我试图使用该代码将行移动到不同的工作表,并将完成的行移动到不同的工作表

当我尝试将名称更改为类似于
工作表\u Change complete
工作表\u Change3
的内容时,
子工作表\u Change
被视为模棱两可的名称,并且不起作用,这给我带来了麻烦

下面是我尝试使用的代码

我的计划是,当按下命令按钮触发宏在第13(M)列中插入单词“COMPLETE”时,我希望已完成的订单(行)移动到一个新工作簿,在该工作簿中我已命名为“completed”

这本新的工作簿以前是我的工作表2,但根据另一个论坛的指示,我把它做成了一本新的工作簿。当通过不同的命令按钮在第13列中插入“部分保持”时,我还需要将行移动到第3页,然后在单击第3页“恢复”上的命令按钮时返回到第1页

所有工作簿和工作表都有相同的列和间距,我只是在重命名它们时无法使代码正常工作

我发布的第一组代码用于在按下命令按钮时将行从
工作表1
移动到
工作表3
,然后是将行移动到新工作簿的代码。这些代码位于VBA项目下的
工作表1
中,而不是模块中

第三个在第3页上,一旦保持完成,将行移回第1页

提前感谢您的帮助

表1

 Private Sub Worksheet_Change(ByVal Target As Range)
      Dim rngDest As Range
      Set rngDest = Sheet3.Range("A5:R5")


      If Not Intersect(Target, Sheet1.Range("M5:M290")) Is Nothing Then

      If UCase(Target) = "PARTIAL HOLD" Then

      Application.EnableEvents = False

      Target.EntireRow.Select
      Selection.Cut
      rngDest.Insert Shift:=xlDown
      Selection.Delete
      Application.EnableEvents = True
      End If
 End If
 End Sub


 Private Sub Worksheet_ChangeCOMPLETE(ByVal Target As Range)


       Dim destWbk As String
       Dim wbk As Workbook
       Dim rngDestCOMPLETE As Range


       destWbk = ThisWorkbook.Names("Completed.xlsx").RefersTo
       destWbk = Replace(destWbk, "=" & Chr(34), "")
       destWbk = Replace(destWbk, Chr(34), "")

       Set wbk = Application.Workbooks(destWbk)

       Set rngDest = wbk.Names("A1:S1").RefersToRange



       If Not Intersect(Target, Sheet1.Range("rngTrigger")) Is Nothing Then

         If UCase(Target) = "COMPLETED" Then

            Application.EnableEvents = False
            Target.EntireRow.Select
            Selection.Cut
            rngDest.Insert Shift:=xlDown
            Selection.Delete
            Application.EnableEvents = True
        End If
      End If
 End Sub
第3页

 Private Sub Worksheet_Change3(ByVal Target As Range)
 Dim rngDest3 As Range
 Set rngDest3 = Sheet1.Range("A5:S5")

 If Not Intersect(Target, Sheet3.Range("M5:M290")) Is Nothing Then

      If UCase(Target) = "IN PROGRESS" Then

        Application.EnableEvents = False

        Target.EntireRow.Select
        Selection.Cut
        rngDest.Insert Shift:=xlDown
        Selection.Delete
        Application.EnableEvents = True
     End If
 End If
 End Sub

正如我在评论中提到的,您不能重命名这些子组件,但可以执行以下操作:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngDest As Range, rngDest2 As Range, rngDest3 As Range
Dim destWbk As String
Dim wbk As Workbook
     If UCase(Target.Value) = "PARTIAL HOLD" Then
        Set rngDest = Sheet3.Range("A5:R5")
        If Not Intersect(Target, Sheet1.Range("M5:M290")) Is Nothing Then
            Application.EnableEvents = False
            Target.EntireRow.Cut
            rngDest.Insert Shift:=xlDown
            Target.EntireRow.Delete
            Application.EnableEvents = True
        End If
    ElseIf UCase(Target.Value) = "IN PROGRESS" Then
        Set rngDest3 = Sheet1.Range("A5:S5")
        If Not Intersect(Target, Sheet3.Range("M5:M290")) Is Nothing Then
            Application.EnableEvents = False
            Target.EntireRow.Cut
            rngDest3.Insert Shift:=xlDown
            Target.EntireRow.Delete
            Application.EnableEvents = True
        End If
    ElseIf UCase(Target.Value) = "COMPLETED" Then
        destWbk = ThisWorkbook.Names("Completed.xlsx").RefersTo
        destWbk = Replace(destWbk, "=" & Chr(34), "")
        destWbk = Replace(destWbk, Chr(34), "")
        Set wbk = Application.Workbooks(destWbk)
        Set rngDest2 = wbk.Range("A1:S1")
        If Not Intersect(Target, Sheet1.Range("rngTrigger")) Is Nothing Then
             Application.EnableEvents = False
             Target.EntireRow.Cut
             rngDest2.Insert Shift:=xlDown
             Target.EntireRow.Delete
             Application.EnableEvents = True
        End If
    End If
End Sub

您不能重命名这些子例程,您可以将所有三个子例程写入一个子例程,然后使用一些Select Case或IF语句在单个子例程下执行您想要的三个不同的操作。谢谢,我现在尝试一下,让您知道它是如何工作的。我很感激你这么快回复我命名任务呢?你给我的代码的第一部分是有效的,但没有别的。我认为rngDest是问题所在,它不起作用,因为我最初将其标记为rngDest3和rngDestCOMPLETE,但如果我更改它,我将返回到简单的rngDest,它会显示“当前范围中的重复声明”,我如何解决这个问题。再次感谢。@PerryKendrick我已经更新了我的答案,我相信它现在应该能像预期的那样工作了。:)