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

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

这一切的工作原理是VBA创build了一个隐藏在工作簿中的“模板”的副本。 它根据用户在表单的TextBox中input的值命名该副本。

此外,我有一个汇总表,就像顾名思义,是在用户创build的工作表中input的不同信息的摘要。

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

现在,当用户input他们的信息到UserForm中时,他们点击一个Generate Workbookbutton,该button运行下面的代码,根据在UserForm TextBox中input的信息在公式表单中生成公式。

当VBA试图将公式添加到汇总表中的单元格时,有两个问题。

问题1:当文本框中input空格时,当用户单击“生成工作簿”button时,将打开“更新值”对话框。
示例 – 项目1234

问题2:括号input到文本框中时,用户单击生成工作簿button时发生1004错误。
示例 – Project1234(Mobile)

如果没有input括号,也没有空格,那么一切正常。

UserForm中有25个可能的条目。
每个条目有三个文本框:ProjectNameTXT,SheetNameTXT和ProjectNumTXT – 每个编号为1-25(即ProjectNameTXT1,SheetNameTXT1,ProjectNumTXT1)。
这两个问题适用于SheetNameTXT文本框。

csvRange是我前面提到的function。

这是相关的代码。

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创build的该函数的修改版本: https ://superuser.com/a/241233

我不是世界上最伟大的VBA编码器,所以如果我的语法或方法很糟糕,我很抱歉。 如果您有这样的倾向,请随时改进并提供build议。

我search了StackOverflow并没有发现任何可以解决问题的东西。 尝试了一些类似的问题,但没有运气让他们解决这些问题的解决scheme。

与往常一样,你的帮助和build设性的批评是非常赞赏。

在公式中将单引号放在您的工作表名称中。

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