为什么不能使用VBA更改活动Excel工作表
我有一个函数,它试图将当前激活的图纸Sheet1更改为Sheet2,然后为Sheet2中的单元格赋值。 但是,ActiveSheet.name没有更改,分配失败。请参阅代码片段。该函数是从sheet1调用的为什么不能使用VBA更改活动Excel工作表,excel,vba,Excel,Vba,我有一个函数,它试图将当前激活的图纸Sheet1更改为Sheet2,然后为Sheet2中的单元格赋值。 但是,ActiveSheet.name没有更改,分配失败。请参阅代码片段。该函数是从sheet1调用的 Dim oldwksheet as String oldwksheet = ActiveSheet.Name 'value is Sheet1 Sheets("Sheet2").Activate Sheets("Sheet2").Se
Dim oldwksheet as String
oldwksheet = ActiveSheet.Name 'value is Sheet1
Sheets("Sheet2").Activate
Sheets("Sheet2").Select
oldwksheet = ActiveSheet.Name 'value still is Sheet1"
Sheets("Sheet2").Range("F2") = Now() 'this fails.
end function
为什么??我做错了什么 您需要的是sub,而不是函数
函数只能向其所在的单元格返回值。它不能选择或激活工作表,也不能在任意单元格中存放值。我不知道为什么,但您可以使用一个函数 假设您的函数以MyFunction命名,则在相关工作表代码窗格中放置以下代码:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then If Left(Target.Formula, 12) = "=MyFunction(" Then Sheets("Sheet2").Range("F2") = Now()
End Sub
这样,每当您在相关工作表的任何单元格中键入=MyFunction时,当前日期和时间将被放置在Sheet2的F2单元格中,Excel的计算引擎将调用函数UDF。他们不允许做某些事情,如修改应用程序状态、激活工作表。。以及修饰其他细胞。函数接受输入、计算值并返回该值。不多不少。谁/什么在调用此函数?究竟为什么您需要激活sheet,无论是-UDF还是sub/function?Mathieu我使用=ChangeActiveSheet从sheet1中的单元格调用此函数,您是对的,我现在了解到函数将无法工作。我用了一个潜艇,它工作没有问题,我将重新组织我的工作簿,使用潜艇。谢谢-我用了潜艇,它工作没有问题。我今天学到了一些东西。