我试图让工作表已经存在的警报工作,但是,我迷路了。 函数定义不正确还是?

 Public Sub CopySheets()

    Do

        shName = InputBox("Please enter name of new project", "New Project")

        If shName <> "" Then

        shExists = SheetExists(shName) 'Check for existing sheet name
        If Not shExists Then
        Worksheets(Array(1, 2)).Copy After:=Sheets(Sheets.Count)


        Else

        MsgBox "Project Name:" & Space(1) & shName & " already exists", vbOKOnly + vbCritical, "Deter"
        End If
        End If
    Loop Until Not shExists Or shName = ""
End Sub

Private Function SheetExists(ByVal sheetName As String, _
        Optional ByVal wb As Workbook)

        If wb Is Nothing Then Set wb = ActiveWorkbook
        On Error Resume Next
        SheetExists = Not wb.Worksheets(sheetName) Is Nothing

End Function

#1楼 票数:1 已采纳

您忘记添加函数的类型。 它必须是boolean

    Private Function 

    SheetExists(ByVal sheetName As String, _
        Optional ByVal wb As Workbook) As Boolean

        If wb Is Nothing Then Set wb = ActiveWorkbook
        On Error Resume Next
        SheetExists = Not wb.Worksheets(sheetName) Is Nothing

    End Function

您的代码的问题是,如果工作表不存在,行SheetExists = Not wb.Worksheets(sheetName) Is Nothing将引发错误,并且SheetExists将保留其默认值为空作为函数的默认数据类型,而没有定义数据类型是variant 如果您将数据类型定义为boolean则默认值将为False

恕我直言,这段代码虽然更长但更清晰

Private Function SheetExists(ByVal sheetName As String, _
    Optional ByVal wb As Workbook) As Boolean

    Dim ws As Worksheet

    If wb Is Nothing Then Set wb = ActiveWorkbook

    On Error GoTo EH
    Set ws = wb.Worksheets(sheetName)
    SheetExists = True

    Exit Function

EH:
    SheetExists = False

End Function

  ask by Kaizan translate from so

未解决问题?本站智能推荐:

2回复

转到标签功能的问题

我正在运行以下宏来打开 130 个 excel 文件,并将它们复制到每个实体的单独工作表中。 它有点适合我想做的事情(尽管可能不是最有效的)。 一旦工作表已经存在,我希望宏不再创建新工作表,而是跳过这一步。 我正在尝试为此使用错误代码,但是我无法使以下部分正常工作: 即使此代码下面的公式有错误
1回复

巨大的VBA功能问题

我正在处理一个电子表格,该电子表格将接收从作业输入的数据并在MS Word中创建执行摘要。 我已经编写了所有代码,以便在Word文档中正确获取数字和单词,但是VBA功能太大。 有没有一种方法可以将其拆分为几个较小的功能,这些功能全部在excel中使用一个按钮执行? 编辑。 按照下
2回复

如果功能给我带来问题

我的值一直是假的,而不是即使我输入Male时也添加的值。 有人有什么主意吗?
2回复

为名称分配“时间”功能时出现问题

如何在Excel VBA中将以下公式分配给名称值: 每当我执行脚本时,它都会引发“运行时错误”,并说“公式错误”。 但是,如果我将公式字符串复制并粘贴到Excel工作表中的单元格中,它将正确评估。 有趣的是,如果我从公式中删除“ TIME”功能(这会使公式变得毫无意义),则可以正常工
3回复

调用函数和子模块格式的问题

我将整合一些类似于结构的子对象,如下所示: 和 txtToNextLVEXP_Min,txtToNextLVEXP_Max,txtTargetLV_Min和txtTargetLV_Max是函数; txtTargetLV和txtTargetLV是MSForms.Control;
1回复

Excel 2010 VBA查找功能问题

Function ProtectiveDiscount(PDD As Range) '‘Find discount in table TotalDiscount = 0 For i = 0 To ListBox1.ListCount - 1 If ListBox1.Selected(i).Valu
1回复

动态图表的偏移功能导致空白单元格出现问题

我正在使用OFFSET函数为下图所示的表创建动态图表。 基本上,单击标记为“复制VCD平均值”的按钮,代码会将值从另一张纸复制到当前纸上。 如果遇到任何带有“#DIV / 0!”的单元格 我将其设置为“ N / A”。 但是在这种情况下,我没有动态图表。 如果代替“ N / AI”执行
2回复

VBA:如果使用Option Explicit,则在函数中定义变量的问题[关闭]

我有以下问题: Option Explicit 。 编码 引发未定义myVar的错误 但是,如果我将Dim myVar as Double行添加Dim myVar as Double则表示变量声明了两次。 我究竟做错了什么? 谢谢