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我已经更新了我的答案,我相信它现在应该能像预期的那样工作了。:)