Ash*_*her 4 excel vba excel-vba
我有一个功能,我想从各种模块调用.什么是在VB(excel)中执行此操作的最佳方法.
模块"SheetExists"
Function Name(SheetName As String) As Boolean
' returns TRUE if the sheet exists in the active workbook
SheetExists = False
On Error GoTo NoSuchSheet
If Len(Sheets(SheetName).Name) > 0 Then
SheetExists = True
Exit Function
End If
NoSuchSheet:
End Function
Run Code Online (Sandbox Code Playgroud)
模块"主"
If Not SheetExists.Name("mySheet") Then
'do this
Else
' else do this
End If
Run Code Online (Sandbox Code Playgroud)
我不希望有这样做还是我?
Call SheetExists.Name("mySheet")
Run Code Online (Sandbox Code Playgroud)
这是从另一个模块调用函数的唯一方法吗?我是否必须将其声明为Public函数或其他内容?
不,你不必这样做,你可以从任何地方调用你的功能.
试试这个:
将此代码放在Module1中:
Sub TestSheetExists()
If SheetExists("Sheet1") Then
MsgBox "I exist!"
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
这在Module2中:
Function SheetExists(shtName As String, Optional wb As Workbook) As Boolean
Dim sht As Worksheet
If wb Is Nothing Then Set wb = ThisWorkbook
On Error Resume Next
Set sht = wb.Sheets(shtName)
On Error GoTo 0
SheetExists = Not sht Is Nothing
End Function
Run Code Online (Sandbox Code Playgroud)
显然,您可以使用您想要的模块的任何名称.
编辑:我看到从不同的模块调用仍然不适合你.请严格按照以下步骤设置可帮助您了解问题的测试工作簿.

在验证模块中,粘贴以下函数:
Function SheetExists(shtName As String, Optional wb As Workbook) As Boolean
Dim sht As Worksheet
If wb Is Nothing Then Set wb = ThisWorkbook
On Error Resume Next
Set sht = wb.Sheets(shtName)
On Error GoTo 0
SheetExists = Not sht Is Nothing
End Function
Run Code Online (Sandbox Code Playgroud)将此子句粘贴到CallMe中:
Sub TestSheetExistsFromCallMe()
If SheetExists("Sheet1") Then
MsgBox "I exist, and I was called from CallMe!"
End If
End Sub
Run Code Online (Sandbox Code Playgroud)将其粘贴到CallMeBack中:
Sub TestSheetExistsFromCallMeBack()
If SheetExists("Sheet1") Then
MsgBox "I exist, and I was called from CallMeBack!"
End If
End Sub
Run Code Online (Sandbox Code Playgroud)将其粘贴到CallMeAgain中:
Sub TestSheetExistsFromCallMeAgain()
If SheetExists("Sheet1") Then
MsgBox "I exist, and I was called from CallMeAgain!"
End If
End Sub
Run Code Online (Sandbox Code Playgroud)按F5键从CallMe中运行代码.您应该看到以下消息框:

从任何3个"呼叫"模块运行代码,您应该看到相应的消息框.
我从Tim Williams(/sf/answers/468193771/)获得了SheetExists功能,并且一直使用它.