当输入括号时,VBA 创建公式会导致 1004 错误,并在输入空格时导致更新值框

标签 vba excel excel-formula formula

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

这一切的工作原理是 VBA 创建隐藏在工作簿中的“模板表”的副本。它根据用户在表单的文本框中输入的值来命名此副本。

此外,我还有一个摘要表,顾名思义,它是用户创建的表中输入的不同信息的摘要。

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

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

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

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

问题 2: 当在文本框中输入括号时,用户单击“生成工作簿”按钮时会出现 1004 错误。
示例 - Project1234(移动)

如果没有输入括号和空格,一切正常。

用户表单中有 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 编码员,所以如果我的语法或方法很糟糕,我深表歉意。如果您愿意,请随时改进并提供建议。

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

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

最佳答案

在公式中的工作表名称两边加上单引号。

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

关于当输入括号时,VBA 创建公式会导致 1004 错误,并在输入空格时导致更新值框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32383187/

相关文章:

excel - CountIfs() Power Query M 中的等效项,自身内的每行计数

json - 使用 JSON 将数据导入 Excel

excel - 如何使用VBA在Excel中的所有行前添加单引号

c# - 有没有办法在 C# 中将工具提示添加到 Excel 单元格数据

python - 在 XLS 或 CSV 文件中写入具有不同颜色的单元格的一部分

arrays - VBA 中的数组公式错误

excel - 锁定 Access 表以防止在特定时间进行写入

vba - 如何将 VBA 代码中的单词列入黑名单

vba - 在动态范围 Excel VBA 中粘贴值

regex - 避免 Excel IF 公式代码中的重复代码