我有一个带有TextBoxes的UserForm,用于从模板创建新工作表。
这一切如何运作的要点是VBA创建了一个"模板表的副本"隐藏在工作簿中的内容。它根据用户在表单文本框中输入的值来命名此副本。
此外,我有一个摘要表,顾名思义,是用户创建的表格中输入的不同信息的摘要。
为了减轻用户手动将信息复制到摘要表中的需要,我使用了一个与函数关联的公式,该函数将为它们更新摘要表。
现在,当用户完成将信息输入UserForm时,他们会单击Generate Workbook按钮,该按钮运行下面的代码,根据UserForm TextBox中输入的信息在Summary表中构建公式。
当VBA尝试将公式添加到摘要表中的单元格时,我遇到两个问题。
问题1: 当一个空格进入TextBox时,它会打开一个" Update Values"用户单击“生成工作簿”按钮时的对话框 示例 - 项目1234
问题2: 当括号输入TextBox时,当用户单击Generate Workbook按钮时会发生1004错误 示例 - Project1234(移动)
如果没有输入括号和空格,则一切正常。
UserForm中有25个可能的条目 每个条目都有三个TextBox:ProjectNameTXT,SheetNameTXT和ProjectNumTXT - 每个编号为1-25(即ProjectNameTXT1,SheetNameTXT1,ProjectNumTXT1)。 仅这两个问题属于SheetNameTXT TextBoxes。
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并没有找到任何可以解决问题的方法。尝试了一些针对类似问题提出的解决方案,但没有运气让他们解决这些问题。
与往常一样,您的帮助和建设性批评非常受欢迎。
答案 0 :(得分:2)
在公式中的工作表名称周围加上单引号。
"=IF(ISERROR(csvRange('" & strSName & "'!A2:A2500)),"""",csvRange('" & strSName & "'!A2:A2500))