gpt4 book ai didi

excel - 从两个不同的 VB (excel) 模块调用子功能/模块

转载 作者:行者123 更新时间:2023-12-02 09:29:15 24 4
gpt4 key购买 nike

我有一个想要从多个模块调用的函数。在 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

模块“主”

If Not SheetExists.Name("mySheet") Then
'do this
Else
' else do this
End If

不想必须这样做还是我?

Call SheetExists.Name("mySheet")

这是从另一个模块调用函数的唯一方法吗?我是否必须将其声明为公共(public)函数或其他函数?

最佳答案

不,您不必这样做,您可以从任何地方调用您的函数。

试试这个:

将此代码放入 Module1 中:

Sub TestSheetExists()
If SheetExists("Sheet1") Then
MsgBox "I exist!"
End If
End Sub

这在模块 2 中:

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

显然,您可以为您的模块使用任何您想要的名称。

<小时/>

编辑:我发现从不同模块进行调用仍然不适合您。严格按照以下步骤设置测试工作簿,以帮助您理解问题。

  1. 创建新的 Excel 工作簿
  2. 打开 VBA 编辑器 (Alt-F11)
  3. 右键单击项目并选择插入模块。重复此 4 次以获得 4 个模块。
  4. 按 F4 打开属性窗口(如果尚未打开)
  5. 将模块名称更改为以下内容:CallMe、CallMeAgain、CallMeBack、Validation Renamed modules
  6. 在验证模块中,粘贴以下函数:

    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
  7. 将此子内容粘贴到 CallMe 中:

    Sub TestSheetExistsFromCallMe()
    If SheetExists("Sheet1") Then
    MsgBox "I exist, and I was called from CallMe!"
    End If
    End Sub
  8. 将此粘贴​​到 CallMeBack 中:

    Sub TestSheetExistsFromCallMeBack()
    If SheetExists("Sheet1") Then
    MsgBox "I exist, and I was called from CallMeBack!"
    End If
    End Sub
  9. 将其粘贴到 CallMeAgain 中:

    Sub TestSheetExistsFromCallMeAgain()
    If SheetExists("Sheet1") Then
    MsgBox "I exist, and I was called from CallMeAgain!"
    End If
    End Sub
  10. 按 F5 从 CallMe 中运行代码。您应该看到以下消息框: enter image description here

  11. 从 3 个“调用”模块中的任意一个运行代码,您应该会看到相应的消息框。

我从 Tim Williams ( https://stackoverflow.com/a/6688482/138938 ) 那里得到了 SheetExists 函数并一直使用它。

关于excel - 从两个不同的 VB (excel) 模块调用子功能/模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11458941/

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