为什么 Range 方法 Select 第一次有效但第二次无效
Why does the Range method Select work the first time but not the second
Sub History1()
'
' History Macro
'
'
Dim sDate As String
Application.ScreenUpdating = False
sDate = Sheets("Summary").Range("P1").Value
If Not WorksheetExists(sDate) Then
Sheets.Add.Name = sDate
End If
Sheets(sDate).Visible = True
Sheets(sDate).Cells.UnMerge
Sheets("Summary").Range("A1:Z100").Select
Selection.Copy
Sheets(sDate).Range("A1:Z100").Select
Selection.Paste
Sheets(sDate).Visible = False
Sheets("Summary").Cells(3, 1).Select
Application.ScreenUpdating = True
' MsgBox ("Done")
End Sub
sDate 中的值是字符串 05_14_21 并且在子程序中较早使用时工作正常。 Range.Select 操作的第一个实例工作正常,至少我认为是这样。没有产生错误。第二个说“范围 class 的 Select 方法失败”。工作表“05_14_21”在第二次操作时可见。我很茫然。任何见解都将 appreciated.Th
您不能在未激活的 sheet 范围内使用 .Select
。它会给你 运行-Time Error 1004。解决方法是首先 select sheet,然后 select 范围。但老实说,使用 .Select
是不必要的,并且会在宏为 运行 时使屏幕抖动。 .Select
也会减慢您的宏,当您开始在代码中使用循环时,这会变得非常明显。
相反,我建议直接引用您的范围,而不是像这样使用 .Select
:
Sub History1()
Dim sDate As String
Application.ScreenUpdating = False
sDate = Sheets("Summary").Range("P1").Value
If Not WorksheetExists(sDate) Then
Sheets.Add.Name = sDate
End If
Sheets(sDate).Visible = True
Sheets(sDate).Cells.UnMerge
Sheets("Summary").Range("A1:Z100").Copy Destination:= Sheets(sDate).Range("A1:Z100")
Sheets(sDate).Visible = False
Application.ScreenUpdating = True
' MsgBox ("Done")
End Sub
我不确定您为什么需要 select 单元格 (3,1),但为了做到这一点,您需要激活正确的 sheet。正如在另一个答案中指出的那样,使用 select 是不可取的。这也导致更简洁的复制和粘贴方式。
Dim sDate As String
Application.ScreenUpdating = False
sDate = Sheets("Summary").Range("A1").Value
If WorksheetExists(sDate) = False Then
Sheets.Add.Name = sDate
End If
Sheets(sDate).Visible = True
Sheets(sDate).Cells.UnMerge
Sheets("Summary").Range("A1:Z100").Copy _
Destination:=Sheets(sDate).Range("A1:Z100")
Sheets(sDate).Visible = False
Sheets("summary").Activate
Sheets("Summary").Cells(3, 1).Select
Application.ScreenUpdating = True
Sub History1()
'
' History Macro
'
'
Dim sDate As String
Application.ScreenUpdating = False
sDate = Sheets("Summary").Range("P1").Value
If Not WorksheetExists(sDate) Then
Sheets.Add.Name = sDate
End If
Sheets(sDate).Visible = True
Sheets(sDate).Cells.UnMerge
Sheets("Summary").Range("A1:Z100").Select
Selection.Copy
Sheets(sDate).Range("A1:Z100").Select
Selection.Paste
Sheets(sDate).Visible = False
Sheets("Summary").Cells(3, 1).Select
Application.ScreenUpdating = True
' MsgBox ("Done")
End Sub
sDate 中的值是字符串 05_14_21 并且在子程序中较早使用时工作正常。 Range.Select 操作的第一个实例工作正常,至少我认为是这样。没有产生错误。第二个说“范围 class 的 Select 方法失败”。工作表“05_14_21”在第二次操作时可见。我很茫然。任何见解都将 appreciated.Th
您不能在未激活的 sheet 范围内使用 .Select
。它会给你 运行-Time Error 1004。解决方法是首先 select sheet,然后 select 范围。但老实说,使用 .Select
是不必要的,并且会在宏为 运行 时使屏幕抖动。 .Select
也会减慢您的宏,当您开始在代码中使用循环时,这会变得非常明显。
相反,我建议直接引用您的范围,而不是像这样使用 .Select
:
Sub History1()
Dim sDate As String
Application.ScreenUpdating = False
sDate = Sheets("Summary").Range("P1").Value
If Not WorksheetExists(sDate) Then
Sheets.Add.Name = sDate
End If
Sheets(sDate).Visible = True
Sheets(sDate).Cells.UnMerge
Sheets("Summary").Range("A1:Z100").Copy Destination:= Sheets(sDate).Range("A1:Z100")
Sheets(sDate).Visible = False
Application.ScreenUpdating = True
' MsgBox ("Done")
End Sub
我不确定您为什么需要 select 单元格 (3,1),但为了做到这一点,您需要激活正确的 sheet。正如在另一个答案中指出的那样,使用 select 是不可取的。这也导致更简洁的复制和粘贴方式。
Dim sDate As String
Application.ScreenUpdating = False
sDate = Sheets("Summary").Range("A1").Value
If WorksheetExists(sDate) = False Then
Sheets.Add.Name = sDate
End If
Sheets(sDate).Visible = True
Sheets(sDate).Cells.UnMerge
Sheets("Summary").Range("A1:Z100").Copy _
Destination:=Sheets(sDate).Range("A1:Z100")
Sheets(sDate).Visible = False
Sheets("summary").Activate
Sheets("Summary").Cells(3, 1).Select
Application.ScreenUpdating = True