创建一个VBA,点击刷新后,数据将被过滤并从一个工作表中复制并粘贴到另一个工作表中。当我试图运行它时,发生了无效的外部程序。
我曾使用C:I因为C是应该应用和过滤标准的列。但是,我仍然需要在"跟踪表"中的粘贴数据中包含B列(因此B:I)。 C是3.但我的问题不是关于范围,只是我知道范围是不确定的背景。
Sub Refresh()
Dim Worksheet1 As Worksheet
Dim lastrowtop, lastrowbottom As Integer
Worksheets("AUTOTRACK").Range("C2:I2").AutoFilter _
field:=3, _
Criteria1:=Date - 1
lastrowtop = Worksheets("AUTOTRACK").Cells(3, 2105).End(xlDown).Row
lastrowbottom = Worksheets("Tracking Sheet").Cells(3,1601).End(xlDown).Row
Range("C:I" & lastrowtop).Copy Destination:=Worksheets("Tracking
Sheet").Range("B:I" & lastrowbottom + 1)
MsgBox ("Pull is complete")
End Sub
答案 0 :(得分:1)
程序范围之外的代码必须位于模块的顶部,位于声明部分。
顾名思义,模块的该部分只能包含声明,通常包括以下内容:
Option Explicit
或Option Private Module
Private
,Public
和/或Friend
字段声明Dim
和Const
语句Enum
和Type
声明Declare
陈述声明部分中的任何可执行语句都是非法的,并且会产生编译时错误:
当可执行语句出现在模块主体中但在过程范围之外时,会引发类似的编译时错误:
答案 1 :(得分:0)
也许你就是在这之后
Option Explicit
Sub Refresh()
Dim lastrowtop As Long, lastrowbottom As Long
lastrowbottom = Worksheets("Tracking Sheet").Cells(3, 1601).End(xlDown).Row '<--| get "Tracking Sheet" 'lastrowbottom ' row index
With Worksheets("AUTOTRACK") '<--| reference "AUTOTRACK" sheet
lastrowtop = .Cells(3, 2105).End(xlDown).Row '<--| get its 'lastrowtop' row index
With .Range("B1:I" & lastrowtop) '<--| reference columns B:I from row 1 (header) to row 'lastrowtop'
.AutoFilter field:=2, Criteria1:=Date - 1 '<--| filter on referenced range 2nd column (i.e. column "C") with 'Date-1'
If Application.WorksheetFunction.Subtotal(103, .Cells) > 0 Then .SpecialCells(xlCellTypeVisible).Copy Worksheets("Tracking Sheet").Range("B" & lastrowbottom + 1) '<--| if any filtered cells other than headers, then copy them and paste to "Tracking Sheet" sheet from cell in column B and row 'lastrowbottom + 1'
End With
.AutoFilterMode = False '<--| remove autofilter
End With
MsgBox ("Pull is complete")
End Sub