Excel 如何为特定工作表运行VBA代码(仅在工作表1中)(与活动工作表无关)?

Excel 如何为特定工作表运行VBA代码(仅在工作表1中)(与活动工作表无关)?,excel,vba,Excel,Vba,我是一个VBA编码新手。我正在建立自定义股票筛选。为此,我想将特定时间的股票价格打印到不同的单元格中,以用于我的策略。我不知何故开发了一个代码。但我不知道如何使它在特定的工作表(工作表1)中工作,而不考虑活动工作表。 以下是我粘贴在thisworkbook模块中的代码 提前谢谢 Option Explicit Private Sub Workbook_Open() Call ScheduleTask End Sub Public Sub ScheduleTask() Applicatio

我是一个VBA编码新手。我正在建立自定义股票筛选。为此,我想将特定时间的股票价格打印到不同的单元格中,以用于我的策略。我不知何故开发了一个代码。但我不知道如何使它在特定的工作表(工作表1)中工作,而不考虑活动工作表。 以下是我粘贴在thisworkbook模块中的代码

提前谢谢

Option Explicit


Private Sub Workbook_Open()
Call ScheduleTask
End Sub


Public Sub ScheduleTask()
Application.OnTime TimeValue("14:46:00"), "ThisWorkbook.Execute"

End Sub

Public Sub Execute()
Debug.Print "Executing task", Now
Range("D8:D57").Copy
Range("T8").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, 
SkipBlanks:=False, Transpose:=False
Call ScheduleTask1

End Sub

Public Sub ScheduleTask1()

Application.OnTime TimeValue("14:47:00"),"ThisWorkbook.Execute1"

End Sub

Public Sub Execute1()

Debug.Print "Executing task", Now
Range("D8:D57").Copy
Range("U8").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, 
SkipBlanks:=False, Transpose:=False
Call ScheduleTask2

End Sub

Public Sub ScheduleTask2()

Application.OnTime TimeValue("14:47:00"), "ThisWorkbook.Execute2"

End Sub

Public Sub Execute2()

Debug.Print "Executing task", Now
Range("D8:D57").Copy
Range("V8").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, 
SkipBlanks:=False, Transpose:=False
Call ScheduleTask
End Sub`enter code here`

为每个
范围
对象指定一个工作表。如果不这样做,VBA将使用
ActiveSheet

比如说

Range("D8:D57").Copy
将从
ActiveSheet
复制,但

ThisWorkbook.Worksheets("Sheet1").Range("D8:D57").Copy

将从该代码所在的工作簿的
Sheet1
(由
thiswoolk
表示)中进行复制。

为每个
范围
对象指定一个工作表。如果不这样做,VBA将使用
ActiveSheet

比如说

Range("D8:D57").Copy
将从
ActiveSheet
复制,但

ThisWorkbook.Worksheets("Sheet1").Range("D8:D57").Copy
将从该代码所在的工作簿的
Sheet1
(由
thiswoolk
表示)中进行复制。

您也可以使用

dim wb as Workbook
dim SheetOne as Worksheet
dim RangeOne as Range

set wb = ThisWorkbook
set SheetOne = wb.Sheets("Sheet1")
set RangeOne = SheetOne.Range("D8:D57")

RangeOne.Copy SheetOne.Range("T8")
你也可以和我一起工作

dim wb as Workbook
dim SheetOne as Worksheet
dim RangeOne as Range

set wb = ThisWorkbook
set SheetOne = wb.Sheets("Sheet1")
set RangeOne = SheetOne.Range("D8:D57")

RangeOne.Copy SheetOne.Range("T8")

指定要用于每个
范围
语句的工作表,如下所示:

Private子工作簿\u Open()
调用调度任务
端接头
公共子计划任务()
Application.OnTime时间值(“14:46:00”),“ThisWorkbook.Dostuff”
端接头
公共子Dostuff()
将我的工作表设置为工作表
设置Mysheet=thishworkbook.Worksheets(“在此处输入工作表名称”)
现在打印“正在执行任务”
Mysheet.Range(“D8:D57”)。副本
Mysheet.Range(“T8”).Paste特殊粘贴:=xlPasteValues,操作:=xlNone,SkipBlanks:=False,转置:=False
调用ScheduleTask1
端接头
公共子计划任务1()
Application.OnTime时间值(“14:47:00”),“ThisWorkbook.Dostuff1”
端接头
公共子文件1()
将我的工作表设置为工作表
设置Mysheet=thishworkbook.Worksheets(“在此处输入工作表名称”)
现在打印“正在执行任务”
Mysheet.Range(“D8:D57”)。副本
Mysheet.Range(“U8”).Paste特殊粘贴:=xlPasteValues,操作:=xlNone,SkipBlanks:=False,转置:=False
调用ScheduleTask2
端接头
公共子计划任务2()
Application.OnTime时间值(“14:47:00”),“ThisWorkbook.Dostuff2”
端接头
公共子文件2()
将我的工作表设置为工作表
设置Mysheet=thishworkbook.Worksheets(“在此处输入工作表名称”)
现在打印“正在执行任务”
Mysheet.Range(“D8:D57”)。副本
Mysheet.Range(“V8”).Paste特殊粘贴:=xlPasteValues,操作:=xlNone,SkipBlanks:=False,转置:=False
调用调度任务
端接头
另外,不要将“执行”用作子名称,因为它也是一个命令,会导致冲突


用@p编辑ᴇʜ的建议(两次)

指定每个
范围
语句使用的工作表,如下所示:

Private子工作簿\u Open()
调用调度任务
端接头
公共子计划任务()
Application.OnTime时间值(“14:46:00”),“ThisWorkbook.Dostuff”
端接头
公共子Dostuff()
将我的工作表设置为工作表
设置Mysheet=thishworkbook.Worksheets(“在此处输入工作表名称”)
现在打印“正在执行任务”
Mysheet.Range(“D8:D57”)。副本
Mysheet.Range(“T8”).Paste特殊粘贴:=xlPasteValues,操作:=xlNone,SkipBlanks:=False,转置:=False
调用ScheduleTask1
端接头
公共子计划任务1()
Application.OnTime时间值(“14:47:00”),“ThisWorkbook.Dostuff1”
端接头
公共子文件1()
将我的工作表设置为工作表
设置Mysheet=thishworkbook.Worksheets(“在此处输入工作表名称”)
现在打印“正在执行任务”
Mysheet.Range(“D8:D57”)。副本
Mysheet.Range(“U8”).Paste特殊粘贴:=xlPasteValues,操作:=xlNone,SkipBlanks:=False,转置:=False
调用ScheduleTask2
端接头
公共子计划任务2()
Application.OnTime时间值(“14:47:00”),“ThisWorkbook.Dostuff2”
端接头
公共子文件2()
将我的工作表设置为工作表
设置Mysheet=thishworkbook.Worksheets(“在此处输入工作表名称”)
现在打印“正在执行任务”
Mysheet.Range(“D8:D57”)。副本
Mysheet.Range(“V8”).Paste特殊粘贴:=xlPasteValues,操作:=xlNone,SkipBlanks:=False,转置:=False
调用调度任务
端接头
另外,不要将“执行”用作子名称,因为它也是一个命令,会导致冲突


用@p编辑ᴇʜ的建议(两次)

对于您拥有的每个范围声明,在其前面添加指定的表,如:
Sheets(1)。范围
或更好的
Sheets(“此处的表名”)。范围
对于您拥有的每个范围声明,在其前面添加指定的表,如:
Sheets(1)。范围
或更好的
Sheets(“此处的表名”).Range
我更改了下面的代码,但它没有在所有公共子计划任务2()应用程序中复制。实时时间值(“15:18:00”),“ThisWorkbook.Execute2”结束子公共子执行2()调试。打印“执行任务”,现在是ThisWorkbook.Worksheets(“Sheet1”)。范围(“D8:D57”)。复制此工作簿。工作表(“Sheet1”).Range(“V8”).Paste特殊粘贴:=xlPasteValues,操作:=xlNone,SkipBlanks:=False,转置:=False调用调度任务结束子任务有错误吗?这一定有用!直接启动
Execute2
过程以测试其是否有效。或者使用F8一步一步地检查它。我更改了下面的代码,但它没有复制所有公共子计划任务2()Application.OnTime时间值(“15:18:00”),“ThisWorkbook.Execute2”结束子公共子执行2()调试。打印“正在执行的任务”,现在是ThisWorkbook.Worksheets(“Sheet1”).Range(“D8:D57”)。复制此工作簿。工作表(“Sheet1”)。范围(“V8”)。粘贴特殊粘贴:=xlPasteValues,操作:=xlNone,SkipBlanks:=False,转置:=False调用计划任务结束子任务有错误吗?这一定有用!直接启动
Execute2
过程以测试其是否有效。或者使用F8一步一步地进行检查。我尝试了这段代码,它在第Public Sub Execute()行上给出了语法错误。注意,
Sheets(1)
Sheets(“Sheet1”)
可以完全不同