尝试更改Worksheets.PageSetup.CenterHeader
的值时出现问题。现在可以通过使用=
运算符传递值来写入/读取此值,并且以下内容可以正常运行:
Sub Test()
Call writeHeaderValue(ThisWorkbook.Sheets("Sheet1"), "What what")
End Sub
Sub writeHeaderValue(ByRef mysheet As Worksheet, ByVal writeValue As String)
Set mysheet = ActiveSheet
Debug.Print mysheet.Parent.Name
Debug.Print mysheet.Name
Debug.Print mysheet.PageSetup.CenterHeader
Application.PrintCommunication = False
mysheet.PageSetup.CenterHeader = writeValue
Application.PrintCommunication = True
End Sub
但令我头痛的是什么让我头疼并且无法弄清楚如果我从一个我从工作表中的公式调用的函数中调用这个相同的writeHeaderValue,它确实显示了值并且对工作表的引用似乎是正确的但它无法改变价值。编译器没有错误或任何意外的错误,但值不会改变。奇怪的是,debug.print部分清楚地表明我有正确的引用,它也显示了该属性的当前值,但它没有改变,所以在下面的部分中一定有问题:
Function writeValue(ByVal myValue As String)
Application.Volatile
Dim mysheet As Worksheet
Dim r As Range
Set r = Application.Caller
Set mysheet = r.Parent
Call writeHeaderValue(mysheet, myValue)
writeValue = myValue
End Function
要尝试这项工作,您可以使用ex。
的公式=writeValue("TEST")
这应该将文档标题中心值更改为“TEST”,但正如您应该发现的那样。 所以我的问题很简单 - 可以做些什么来使writeValue函数工作?
我有直觉感觉它与使用Application.Caller有关但这是我想要的工作,以便根据公式所在的单元格传递对工作表的引用。第二个猜测是有在计算期间发生的事情,在此期间禁用了写入功能,但是你告诉我。
感谢您的帮助!