gpt4 book ai didi

vba - 函数 "openfile"返回工作簿以运行时错误 '91' 结束

转载 作者:行者123 更新时间:2023-12-04 20:17:48 25 4
gpt4 key购买 nike

我想通过以下功能打开并引用工作簿。只有函数会产生运行时错误“91”:在跳回主代码之前未设置对象变量或 block 变量。
当我将确切的代码(只是不是函数)放入我的主代码时,它可以完美地工作。
但是我不想在我的主代码中包含整个函数,因为我认为它是不必要的和丑陋的。
也许有人可以帮助我使我的代码更好,更易于理解!
已经谢谢你了!

这是我的主要子的相关部分:

Sub main_sub()
Dim WBtest As Workbook
Dim WBpath As String

WBpath = ThisWorkbook.Sheets("Control").Range("A6").Value 'read path
WBtest = openfile(WBpath) 'I call my function here
End Sub

这是产生错误的函数
该函数应该返回(新)打开的工作簿
Public Function openfile(path As String) As Workbook    'path is fullpath
Dim wb As Workbook
Dim alreadyopen As Boolean

For Each wb In Workbooks 'loop over all Workbooks
If wb.FullName = path Then 'check if file is already open
alreadyopen = True
Set openfile = wb
End If
Next wb
If alreadyopen = False Then
'file not yet opened --> open it
Set openfile = Workbooks.Open(path)
End If
'MsgBox openfile.name 'this returns the right name
End Function

当我将所有内容都写在我的主子中时,它可以工作(但很丑,所以我不希望它在那里!)
这有效:
Sub main_sub()
Dim WBtest As Workbook
Dim WBpath As String
Dim wb As Workbook 'for loop
Dim alreadyopen As Boolean

WBpath = ThisWorkbook.Sheets("Control").Range("A6").Value 'read path

For Each wb In Workbooks 'loop over all Workbooks
If wb.FullName = WBpath Then
alreadyopen = True
Set WBtest = wb
End If
Next wb
If alreadyopen = False Then
'file not yet opened --> open it
Set WBtest = Workbooks.Open(WBpath)
End If
End Sub

我稍后在我的代码中遇到了类似的问题,我想让一个函数也返回一个工作簿。所以这似乎是问题所在。
函数如何返回工作簿?
我发现类似的函数返回工作表。那些工作。为什么不使用工作簿?

非常感谢你的帮助!

最佳答案

两种方法的不同之处在于,在第一种方法中,您忘记了 Set少量。因此,解决方案:

Set WBtest = openfile(WBpath) 'I call my function here

关于vba - 函数 "openfile"返回工作簿以运行时错误 '91' 结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17918975/

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