gpt4 book ai didi

vba - 带有输入框的变量与模块中的多个子变量

转载 作者:行者123 更新时间:2023-12-02 11:04:13 26 4
gpt4 key购买 nike

这是我的代码的开头:

Private FilesPath As String
Private CostCentersPath As String
Private FinalPath As String
Private CurrentName As String
Private CostCenters As Worksheet
Private Final As Workbook
Private Template As Worksheet

Sub ReadySetGo()

FilesPath = "O:\MAP\04_Operational Finance\Accruals\Accruals_Swiss_booked\2017\Month End\10_2017\Advertising\automation\" 'path change ("automation")
CostCentersPath = FilesPath & "CostCenters.xlsx"
CurrentName = InputBox("Please adjust the final file name:", , "ABGR_2017-10_FINAL.xls.xlsx")
FinalPath = FilesPath & CurrentName

Set CostCenters = Workbooks("CostCenters.xlsx").Worksheets("Cost Center Overview")
Set Final = Workbooks(CurrentName)
Set Template = Workbooks("Template.xlsm").Worksheets("Template")


End Sub

Sub ReadySetGo 仅用于为变量赋值,并从模块中的其他子程序中调用。但显然,使用这种方法,每次调用子程序时都会弹出输入框。除了 Workbook.Open 事件之外,是否有其他方法将变量的 CurrentName 值传递给模块中的其他子项,以避免多个输入框?

谢谢,巴特克

最佳答案

一般来说,有很多好方法可以满足您的需求,具体取决于您的申请的解决方式。也许最简单的就是简单地写:

If CurrentName <> vbNullString Then 
InputBox("Please adjust the final file name:", , "ABGR_2017-10_FINAL.xls.xlsx")
End if

但是要小心,因为它可能会在某个地方破坏你的代码。但是,在最好的情况下,您只会运行一次。

<小时/>

另一种方法是将 CurrentName 值保存在给定范围内,并每次都从那里读取它:

If Len(Range("A1")) = 0 Then
Range("A1") = InputBox("Please ...")
End if
CurrentName = Range("A1")
<小时/>

一般来说,您可以更进一步,将单例模式引入到您的代码中https://en.wikipedia.org/wiki/Singleton_pattern ,从而确保 CurrentName 仅分配一次。然而,在这种情况下可能有点矫枉过正 - How to create common/shared instance in vba

关于vba - 带有输入框的变量与模块中的多个子变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47474814/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com