VBA 创建公式在输入括号时导致 1004 错误,在输入 space 时导致更新值框

VBA to create formula causes 1004 error when parentheses entered and causes an update values box when space is entered

我有一个带有文本框的用户窗体,用于从模板创建新的 sheets。

这一切工作原理的要点是 VBA 创建了隐藏在工作簿中的 "template sheet" 的副本。它根据用户在表单的文本框中输入的值命名此副本。

此外,我有一个摘要 sheet,顾名思义,就是在用户创建的 sheet(s) 中输入的不同信息的摘要。

为了减轻用户手动将信息复制到摘要 sheet 的需要,我使用了一个绑定到函数的公式,该函数将为他们更新摘要 sheet。

现在,当用户将他们的信息输入到用户窗体中后,他们单击“生成工作簿”按钮,该按钮运行下面的代码,根据在用户窗体文本框中输入的信息将公式构建到摘要中 sheet。

当 VBA 尝试向摘要 Sheet 中的单元格添加公式时,我遇到了两个问题。

问题 1: 在文本框中输入 space 后,当用户单击“生成工作簿”按钮时,它会打开一个 "Update Values" 对话框。
示例 - 项目 1234

问题 2: 当在 TextBox 中输入括号时,当用户单击“生成工作簿”按钮时出现 1004 错误。
示例 - 项目 1234(手机)

如果没有括号,也没有输入 space,一切正常。

用户窗体中有 25 个可能的条目。
每个条目都有三个文本框:ProjectNameTXT、SheetNameTXT 和 ProjectNumTXT - 每个编号为 1-25(即 ProjectNameTXT1、SheetNameTXT1、ProjectNumTXT1)。
这两个问题 与 SheetNameTXT 文本框有关。

csvRange就是我之前提到的函数。

这是相关代码。

UserForm1 中的代码:

Private Sub GenerateWorkbook_Click()

    Dim ws As Worksheet
    Dim k As Long
    Dim strSName

    For k = 1 To 25

        strSName = Me.Controls("SheetNameTXT" & k).Text

            'Creates a data sheet for each project.
            'Uses the MASTER SHEET as a template.
            Set ws = ThisWorkbook.Worksheets("MASTER SHEET")
            ws.Copy ThisWorkbook.Sheets(Sheets.count)
            ActiveSheet.Name = strSName
            ActiveSheet.Visible = xlSheetHidden

            ThisWorkbook.Worksheets("Summary").Select

           'THIS IS THE CODE CAUSING THE ISSUES
            Range("B" & k + 3).Value = "=IF(ISERROR(csvRange(" & strSName & "!A2:A2500)),"""",csvRange(" & strSName & "!A2:A2500))"

    Next k

    Unload UserForm1

End Sub

函数 csvRange 的代码:

Function csvRange(myRange As Range)
    Dim csvRangeOutput
    For Each entry In myRange
        If Not IsEmpty(entry.Value) Then

            'Create comma separated value
            csvRangeOutput = csvRangeOutput & entry.Value & ", "

        End If
    Next

    'Removes the last comma and space.
    csvRange = Left(csvRangeOutput, Len(csvRangeOutput) - 2)

End Function

csvRange 函数是 muncherelli 创建的此函数的修改版本: https://superuser.com/a/241233

我不是世界上最伟大的 VBA 编码员,如果我的语法或方法很糟糕,我深表歉意。如果您愿意,请随时改进并提供建议。

我搜索了 Whosebug,但没有找到任何可以解决问题的方法。尝试了针对类似问题建议的一些解决方案,但没有运气让他们解决这些问题。

一如既往,非常感谢您的帮助和建设性的批评。

在公式中将您的 sheet 名称用单引号引起来。

"=IF(ISERROR(csvRange('" & strSName & "'!A2:A2500)),"""",csvRange('" & strSName & "'!A2:A2500))