Excel 复制行而不触发宏VBA
有几个问题与这个主题有关,但我有点挣扎 我有一个主Excel 复制行而不触发宏VBA,excel,vba,automation,copy,Excel,Vba,Automation,Copy,有几个问题与这个主题有关,但我有点挣扎 我有一个主表,用于存储各种信息。我使用列B隐藏/取消隐藏其他列。因此,对于在B列中输入的每个不同值,它将显示相应的列。e、 g.如果在列B中输入X,则将显示列C:F,并隐藏列g:I 这可以正常工作,但我想自动将此工作表中相同的值复制到单独的工作表中。e、 g.抓取母版中的所有X,并复制到仅包含X的单独表中 我可以这样做,但只能通过使用需要触发的宏。如果我需要复制大量行,这不是很有效。特别是如果您只更新了1行,但需要复制所有内容 我希望在输入值后立即自动复制
表
,用于存储各种信息。我使用列B
隐藏/取消隐藏其他列
。因此,对于在B列中输入的每个不同值,它将显示相应的列
。e、 g.如果在列B
中输入X
,则将显示列C:F
,并隐藏列g:I
这可以正常工作,但我想自动将此工作表中相同的值复制到单独的工作表中
。e、 g.抓取母版中的所有X
,并复制到仅包含X
的单独表中
我可以这样做,但只能通过使用需要触发的宏。如果我需要复制大量行
,这不是很有效。特别是如果您只更新了1行
,但需要复制所有内容
我希望在输入值后立即自动复制。无需触发宏
这是脚本
在主表中隐藏/取消隐藏特定列
:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B:B")) Is Nothing Then
On Error GoTo safe_exit
Application.EnableEvents = False
Dim t As Range
For Each t In Intersect(Target, Range("B:B"))
Select Case (t.Value)
Case "Change of Numbers"
Columns("B:BP").EntireColumn.Hidden = False
Columns("H:BL").EntireColumn.Hidden = True
'do nothing
End Select
Next t
End If
safe_exit:
Application.EnableEvents = True
End Sub
由于我无法将单独的工作表添加到脚本中以自动复制,因此我对如何执行此操作感到有点困惑
我目前正在使用下面的脚本。这会将相应的行
复制到相应的工作表
。但它只有在被触发时才起作用。我希望在填写后自动复制行
@Gexas,这是怎么回事
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B:B")) Is Nothing Then
On Error GoTo safe_exit
Application.EnableEvents = False
Dim t As Range
For Each t In Intersect(Target, Range("B:B"))
Select Case (t.Value)
Case "Change of Numbers"
Columns("B:BP").EntireColumn.Hidden = False
Columns("H:BL").EntireColumn.Hidden = True
'do nothing
End Select
Next t
End If
safe_exit:
Application.EnableEvents = True
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, sht1 As Worksheet, sht2 As Worksheet
Set sht1 = Worksheets("MASTER")
Set sht2 = Worksheets("CON")
sht2.UsedRange.ClearContents
With Intersect(sht1.Columns("B:BP"), sht1.UsedRange)
.Cells.EntireColumn.Hidden = False ' unhide columns
If .Parent.AutoFilterMode Then .Parent.AutoFilterMode = False
.AutoFilter field:=1, Criteria1:="Change of Numbers"
.Range("A:F, BL:BO").Copy Destination:=sht2.Cells(2, "B")
.Parent.AutoFilterMode = False
.Range("H:BK").EntireColumn.Hidden = True ' hide columns
End With
End Sub
过滤和复制
如果将“Sub”移动到工作表代码(Master)中,可能会像在“Private Sub”中一样丢失其中的“sht1”,如果不只是将行过滤器和复制适当地添加到“Private Sub”中
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo safe_exit
' Something has changed in Column "B"
If Not Intersect(Target, Range("B:B")) Is Nothing Then
Application.EnableEvents = False
' *******************
FilterAndCopy ' *
' *******************
Dim t As Range
For Each t In Intersect(Target, Range("B:B"))
Select Case (t.Value)
Case "Change of Numbers"
Columns("B:BP").EntireColumn.Hidden = False
Columns("H:BL").EntireColumn.Hidden = True
'do nothing
End Select
Next t
End If
safe_exit:
Application.EnableEvents = True
End Sub
'****************
Sub FilterAndCopy()
Dim rng As Range, sht1 As Worksheet, sht2 As Worksheet
Set sht1 = Worksheets("MASTER")
Set sht2 = Worksheets("CON")
sht2.UsedRange.ClearContents
With Intersect(sht1.Columns("B:BP"), sht1.UsedRange)
.Cells.EntireColumn.Hidden = False ' unhide columns
If .Parent.AutoFilterMode Then .Parent.AutoFilterMode = False
.AutoFilter field:=1, Criteria1:="Change of Numbers"
.Range("A:F, BL:BO").Copy Destination:=sht2.Cells(2, "B")
.Parent.AutoFilterMode = False
.Range("H:BK").EntireColumn.Hidden = True ' hide columns
End With
End Sub
'****************
过滤和复制
如果将“Sub”移动到工作表代码(Master)中,可能会像在“Private Sub”中一样丢失其中的“sht1”,如果不只是将行过滤器和复制适当地添加到“Private Sub”中
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo safe_exit
' Something has changed in Column "B"
If Not Intersect(Target, Range("B:B")) Is Nothing Then
Application.EnableEvents = False
' *******************
FilterAndCopy ' *
' *******************
Dim t As Range
For Each t In Intersect(Target, Range("B:B"))
Select Case (t.Value)
Case "Change of Numbers"
Columns("B:BP").EntireColumn.Hidden = False
Columns("H:BL").EntireColumn.Hidden = True
'do nothing
End Select
Next t
End If
safe_exit:
Application.EnableEvents = True
End Sub
'****************
Sub FilterAndCopy()
Dim rng As Range, sht1 As Worksheet, sht2 As Worksheet
Set sht1 = Worksheets("MASTER")
Set sht2 = Worksheets("CON")
sht2.UsedRange.ClearContents
With Intersect(sht1.Columns("B:BP"), sht1.UsedRange)
.Cells.EntireColumn.Hidden = False ' unhide columns
If .Parent.AutoFilterMode Then .Parent.AutoFilterMode = False
.AutoFilter field:=1, Criteria1:="Change of Numbers"
.Range("A:F, BL:BO").Copy Destination:=sht2.Cells(2, "B")
.Parent.AutoFilterMode = False
.Range("H:BK").EntireColumn.Hidden = True ' hide columns
End With
End Sub
'****************
工作表\u Change
事件可以包含两个函数。由于代码是从第一行到最后一行读取的,所以VBA将按顺序从第二行代码中复制内容,然后隐藏列。下面的代码应该可以工作,假设其他一切都很好。请注意,我无法测试它,也没有检查其他错误。刚换了菜
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, sht1 As Worksheet, sht2 As Worksheet
Set sht1 = Worksheets("MASTER")
Set sht2 = Worksheets("CON")
sht2.UsedRange.ClearContents
If Not Intersect(Target, Range("B:B")) Is Nothing Then
On Error GoTo safe_exit
Application.EnableEvents = False
With Intersect(sht1.Columns("B:BP"), sht1.UsedRange)
.Cells.EntireColumn.Hidden = False ' unhide columns
If .Parent.AutoFilterMode Then .Parent.AutoFilterMode = False
.AutoFilter field:=1, Criteria1:="Change of Numbers"
.Range("A:F, BL:BO").Copy Destination:=sht2.Cells(2, "B")
.Parent.AutoFilterMode = False
.Range("H:BK").EntireColumn.Hidden = True ' hide columns
End With
Dim t As Range
For Each t In Intersect(Target, Range("B:B"))
Select Case (t.Value)
Case "Change of Numbers"
Columns("B:BP").EntireColumn.Hidden = False
Columns("H:BL").EntireColumn.Hidden = True
'do nothing
End Select
Next t
End If
safe_exit:
Application.EnableEvents = True
End Sub
工作表\u Change
事件可以包含两个函数。由于代码是从第一行到最后一行读取的,所以VBA将按顺序从第二行代码中复制内容,然后隐藏列。下面的代码应该可以工作,假设其他一切都很好。请注意,我无法测试它,也没有检查其他错误。刚换了菜
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, sht1 As Worksheet, sht2 As Worksheet
Set sht1 = Worksheets("MASTER")
Set sht2 = Worksheets("CON")
sht2.UsedRange.ClearContents
If Not Intersect(Target, Range("B:B")) Is Nothing Then
On Error GoTo safe_exit
Application.EnableEvents = False
With Intersect(sht1.Columns("B:BP"), sht1.UsedRange)
.Cells.EntireColumn.Hidden = False ' unhide columns
If .Parent.AutoFilterMode Then .Parent.AutoFilterMode = False
.AutoFilter field:=1, Criteria1:="Change of Numbers"
.Range("A:F, BL:BO").Copy Destination:=sht2.Cells(2, "B")
.Parent.AutoFilterMode = False
.Range("H:BK").EntireColumn.Hidden = True ' hide columns
End With
Dim t As Range
For Each t In Intersect(Target, Range("B:B"))
Select Case (t.Value)
Case "Change of Numbers"
Columns("B:BP").EntireColumn.Hidden = False
Columns("H:BL").EntireColumn.Hidden = True
'do nothing
End Select
Next t
End If
safe_exit:
Application.EnableEvents = True
End Sub
所以从工作表\u Change
事件调用它?我觉得我错过了什么…嗯?你完全失去了我。为什么FilterAndCopy()
需要出现在主控表中?它是隐式公开的。我在这里显然有点不知所措。我不明白什么需要进入哪个工作表。我在工作表更改事件中调用什么?FilterAndCopy()
,因为我理解这个问题。所以从工作表更改事件中调用它?我觉得我错过了什么…嗯?你完全失去了我。为什么FilterAndCopy()
需要出现在主控表中?它是隐式公开的。我在这里显然有点不知所措。我不明白什么需要进入哪个工作表。我从工作表更改事件调用什么?FilterAndCopy()
我理解这个问题。但是FilterAndCopy()
仍然不会自动触发,或者我错了?但是FilterAndCopy()
仍然不会自动触发,或者我错了?没有,每次工作表上的任何地方发生更改时,都会更改工作表CON。不需要这样做,除非B列中的单元格中的值已更改为“数字更改”。哦,我明白你现在所说的,我将更改我的答案为正确的顺序。这很好。现在我想手动触发FilterAndCopy(运行宏)。不,每次工作表上的任何地方发生更改时,都会更改工作表CON。不需要这样做,除非B列中的单元格中的值已更改为“数字更改”。哦,我明白你现在所说的,我将更改我的答案为正确的顺序。这很好。现在我想手动触发FilterAndCopy(运行宏)。