gpt4 book ai didi

vba - 循环VBA后变量值被遗忘

转载 作者:行者123 更新时间:2023-12-02 23:52:50 27 4
gpt4 key购买 nike

我目前正在尝试设置 Do While循环的一部分仅执行一次。我实际上正在尝试为一张工作表定义一个单元格范围,然后让我的循环将相同的单元格范围应用于所有工作表/工作簿,而无需重新指定该范围。

这是我到目前为止所拥有的:

isExecuted = False
Do While FileName <> ""
' Open a workbook in the folder
Set WorkBk = Workbooks.Open(Folder & "\" & FileName)

' Conditional to select range only once
If Not isExecuted Then

Dim rng As Range
Set rng = Application.InputBox("Select a Range", "Obtain Range Object", Type:=8)
Debug.Print (rng.Address)
MsgBox "The cells selected were " & rng.Address
isExecuted = True

End If


Set SourceRange = WorkBk.Worksheets(1).Range(rng.Address)

' more stuff goes here

处于 Debug模式。第一次这个循环执行时,一切都按预期工作,我可以看到我的 rng.Address 是指定的单元格范围。然而,在第二个循环中,rng.Address 变为 <ObjectRequired> ,因此脚本的其余部分失败。关于如何将 rng.Address 永久设置为指定的单元格范围有什么想法吗?

最佳答案

在没有看到更多代码的情况下很难说出具体问题是什么,但我建议使用更简洁的逻辑,例如:

    If Not isExecuted Then

Dim rng As Range
Set rng = Application.InputBox("Select a Range", "Obtain Range Object", Type:=8)
Debug.Print (rng.Address)
MsgBox "The cells selected were " & rng.Address
isExecuted = True

End If

这样做:

If rng is Nothing Then
Set rng = Application.InputBox("Select a Range", "Obtain Range Object", Type:=8)
End If

注意:如果您在'更多内容移至此处部分期间关闭工作簿,则可能会杀死对该范围的对象引用

Any ideas as to how to permanently set rng.Address to the specified cell range?

是的,只需保留地址而不是对象。由于 Address 是字符串文字,因此即使对象引用超出范围,您也可以将其保留在 String 变量中:

Dim addr As String
If addr = vbNullString
addr = Application.InputBox("Select a Range", "Obtain Range Object", Type:=8).Address
End If
Set SourceRange = WorkBk.Worksheets(1).Range(addr)

关于vba - 循环VBA后变量值被遗忘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45961290/

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