单步执行时宏有效,但运行时,似乎跳过步骤

EBa*_*ton 2 excel vba

我正在使用以下宏:

'Copy active agency ID and paste into search on Worker Details
    ActiveCell.Select
    Selection.Copy
    Range("L5").Select
     Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    'Call macro to run the agency details search
    Call AgencyDetails
Run Code Online (Sandbox Code Playgroud)

基本上,它使用活动单元格,将其粘贴到搜索字段中,然后运行一个宏来根据该条件提取数据。

单步执行时,它会复制并粘贴活动单元格,然后搜索工作正常。

运行宏时,它似乎没有将活动单元格复制并粘贴到搜索字段。或者被调用的宏运行得太早......

我曾尝试添加暂停doevents等,但我认为doevents是用于 odbc 连接。

使事情进一步复杂化。我有另一个几乎相同的宏,它将文本复制到搜索字段中,然后根据该条件返回数据:

'Copy active worker ID and paste into search on Worker Details
    ActiveCell.Select
    Selection.Copy
    Sheets("Worker Details").Select
    Range("E5").Select
     Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    'Call macro to run the worker details search
    Call WorkerDetails
Run Code Online (Sandbox Code Playgroud)

这工作正常。

有任何想法吗?可能非常简单,因为我的 vba 并不出色。

谢谢,

Sub AgencyDetails()

    Dim BlankCheckAgency As Range
    Set BlankCheckAgency = Range("AgencyDetails[[#Headers],[Agency ID]]")
    Dim BlankCheckWorkers As Range
    Set BlankCheckWorkers = Range("AgencyWorkers[[#Headers],[auto_number]]")


    Application.ScreenUpdating = False
    ActiveWorkbook.Sheets("Agency Search Data").Visible = xlSheetVisible

    'Clear Data
    Range("G9,L9,G12,I12,G15,I15,G18,L18,Q9,Q12,Q15").Select
    Selection.ClearContents
    Range("G28").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.ClearContents
    Range("I28").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.ClearContents
    Range("K28").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.ClearContents
    Range("L5").Select

    'Refresh Data
    ActiveWorkbook.Connections("AgencyDetails").Refresh
    ActiveWorkbook.Connections("AgencyBDM").Refresh
    ActiveWorkbook.Connections("AgencyAM").Refresh
    ActiveWorkbook.Connections("AgencySalesRep").Refresh
    ActiveWorkbook.Connections("AgencyWorkers").Refresh

    'DataCheck for agency details
    Sheets("Agency Search Data").Select
    BlankCheckAgency.Select
    ActiveCell.Offset(1).Select
    If IsEmpty(ActiveCell) = False Then
    GoTo Data
    Else
    GoTo NoData
    End If

NoData:
    'Go back to search window and display message
    Sheets("Agency Search").Select
    ActiveWorkbook.Sheets("Agency Search Data").Visible = xlSheetVeryHidden
    Application.ScreenUpdating = True
    msgBox "No agency on record matched the ID you have searched for." & vbNewLine & vbNewLine & "If you think this is wrong, please contact OSD"
    GoTo Finish

Data:
    'Agency Name
    Range("AgencyDetails[Agency Name]").Select
    Selection.Copy
    Sheets("Agency Search").Select
    Range("G9").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    'Unmerge Address
    Range("L9").Select
    With Selection
        .HorizontalAlignment = xlGeneral
        .VerticalAlignment = xlBottom
        .WrapText = True
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = True
    End With
    Selection.UnMerge

    'Full Address
    Sheets("Agency Search Data").Select
    Range("AgencyDetails[Full Address]").Select
    Selection.Copy
    Sheets("Agency Search").Select
    Range("L9").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    'Merge Address
    Range("L9:O15").Select
    With Selection
        .HorizontalAlignment = xlLeft
        .VerticalAlignment = xlTop
        .WrapText = True
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Selection.Merge

    'Agency Status
    Sheets("Agency Search Data").Select
    Range("AgencyDetails[Agency Status 2]").Select
    Selection.Copy
    Sheets("Agency Search").Select
    Range("G15").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    'Agency Brand
    Sheets("Agency Search Data").Select
    Range("AgencyDetails[Brand]").Select
    Selection.Copy
    Sheets("Agency Search").Select
    Range("I15").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    'Agency Reg
    Sheets("Agency Search Data").Select
    Range("AgencyDetails[Agency Reg]").Select
    Selection.Copy
    Sheets("Agency Search").Select
    Range("G12").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    'VAT Reg
    Sheets("Agency Search Data").Select
    Range("AgencyDetails[Vat Reg]").Select
    Selection.Copy
    Sheets("Agency Search").Select
    Range("I12").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    'Unmerge GNotes
    Range("G18").Select
    With Selection
        .HorizontalAlignment = xlGeneral
        .VerticalAlignment = xlBottom
        .WrapText = True
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = True
    End With
    Selection.UnMerge

    'General Notes
    Sheets("Agency Search Data").Select
    Range("AgencyDetails[General Notes]").Select
    Selection.Copy
    Sheets("Agency Search").Select
    Range("G18").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    'Merge GNotes
    Range("G18:J24").Select
    With Selection
        .HorizontalAlignment = xlLeft
        .VerticalAlignment = xlTop
        .WrapText = True
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Selection.Merge

    'Unmerge SNotes
    Range("L18").Select
    With Selection
        .HorizontalAlignment = xlGeneral
        .VerticalAlignment = xlBottom
        .WrapText = True
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = True
    End With
    Selection.UnMerge

    'Sales Notes
    Sheets("Agency Search Data").Select
    Range("AgencyDetails[Sales Notes]").Select
    Selection.Copy
    Sheets("Agency Search").Select
    Range("L18").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

     'Merge SNotes
    Range("L18:O24").Select
    With Selection
        .HorizontalAlignment = xlLeft
        .VerticalAlignment = xlTop
        .WrapText = True
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Selection.Merge

    'BDM
    Sheets("Agency Search Data").Select
    Range("AgencyBDM[Full Name]").Select
    Selection.Copy
    Sheets("Agency Search").Select
    Range("Q9").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    'Sales Rep
    Sheets("Agency Search Data").Select
    Range("AgencySalesRep[Full Name]").Select
    Selection.Copy
    Sheets("Agency Search").Select
    Range("Q12").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    'AM
    Sheets("Agency Search Data").Select
    Range("AgencyAM[Full Name]").Select
    Selection.Copy
    Sheets("Agency Search").Select
    Range("Q15").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    'DataCheck for workers
    Sheets("Agency Search Data").Select
    BlankCheckWorkers.Select
    ActiveCell.Offset(1).Select
    If IsEmpty(ActiveCell) = False Then
    GoTo Data2
    Else
    GoTo NoData2
    End If

NoData2:
    Rows("1:1000").Select
    Selection.RowHeight = 15
    Sheets("Agency Search").Select
    ActiveWorkbook.Sheets("Agency Search Data").Visible = xlSheetVeryHidden
    Application.ScreenUpdating = True
    msgBox "The agency details have been pulled but there are no workers associated with the Agency" & vbNewLine & vbNewLine & "If you think this to not be true, please contact OSD"
    GoTo Finish

Data2:
    'Pull worker IDs
    Sheets("Agency Search Data").Select
    Range("AgencyWorkers[auto_number]").Select
    Selection.Copy
    Sheets("Agency Search").Select
    Range("G28").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    'Pull worker first name
    Sheets("Agency Search Data").Select
    Range("AgencyWorkers[first_name]").Select
    Selection.Copy
    Sheets("Agency Search").Select
    Range("I28").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    'Pull worker last name
    Sheets("Agency Search Data").Select
    Range("AgencyWorkers[last_name]").Select
    Selection.Copy
    Sheets("Agency Search").Select
    Range("K28").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Rows("1:1000").Select
    Selection.RowHeight = 15
    Range("L5").Select

Finish:
    ActiveWorkbook.Sheets("Agency Search Data").Visible = xlSheetVeryHidden
    Application.ScreenUpdating = True
End Sub
Run Code Online (Sandbox Code Playgroud)

Xab*_*ier 5

建议尽可能不要使用 Select 和 Activate 方法,将选定单元格中的值传递到所需的单元格,如下所示:

Range("L5").Value = ActiveCell.Value
'Call macro to run the agency details search
Call AgencyDetails
Run Code Online (Sandbox Code Playgroud)

正如 Vityata 所提到的,最好完全限定您的范围,例如:

Sheet1.Range("L5").Value甚至Sheets("Sheet1").Range("L5").Value,这样您的代码将不会采用 ActiveSheet 并且将从定义的范围中获取值。

更新

Sub AgencyDetails()

    Dim BlankCheckAgency As Range
    Set BlankCheckAgency = Sheets("Agency Search Data").Range("AgencyDetails[[#Headers],[Agency ID]]")
    Dim BlankCheckWorkers As Range
    Set BlankCheckWorkers = Range("AgencyWorkers[[#Headers],[auto_number]]")
'

    Application.ScreenUpdating = False
    ActiveWorkbook.Sheets("Agency Search Data").Visible = xlSheetVisible

    'Clear Data
    ActiveSheet.Range("G9,L9,G12,I12,G15,I15,G18,L18,Q9,Q12,Q15").ClearContents
    LastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "G").End(xlUp).Row
    Range("G28:G" & LastRow).ClearContents
    Range("I28:I" & LastRow).ClearContents
    Range("K28:K" & LastRow).ClearContents

    'Range("L5").Select

    'Refresh Data
    ActiveWorkbook.Connections("AgencyDetails").Refresh
    ActiveWorkbook.Connections("AgencyBDM").Refresh
    ActiveWorkbook.Connections("AgencyAM").Refresh
    ActiveWorkbook.Connections("AgencySalesRep").Refresh
    ActiveWorkbook.Connections("AgencyWorkers").Refresh

    'DataCheck for agency details
    If IsEmpty(BlankCheckAgency.Offset(1)) = False Then
        GoTo Data
    Else
        GoTo NoData
    End If

NoData:
    'Go back to search window and display message
    Sheets("Agency Search").Select
    ActiveWorkbook.Sheets("Agency Search Data").Visible = xlSheetVeryHidden
    Application.ScreenUpdating = True
    MsgBox "No agency on record matched the ID you have searched for." & vbNewLine & vbNewLine & "If you think this is wrong, please contact OSD"
    GoTo Finish

Data:
    'Agency Name
    Range("AgencyDetails[Agency Name]").Copy
    Sheets("Agency Search").Range("G9").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Run Code Online (Sandbox Code Playgroud)