Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么不能使用VBA更改活动Excel工作表_Excel_Vba - Fatal编程技术网

为什么不能使用VBA更改活动Excel工作表

为什么不能使用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

我有一个函数,它试图将当前激活的图纸Sheet1更改为Sheet2,然后为Sheet2中的单元格赋值。 但是,ActiveSheet.name没有更改,分配失败。请参阅代码片段。该函数是从sheet1调用的

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中的单元格调用此函数,您是对的,我现在了解到函数将无法工作。我用了一个潜艇,它工作没有问题,我将重新组织我的工作簿,使用潜艇。谢谢-我用了潜艇,它工作没有问题。我今天学到了一些东西。