Vba 将自定义错误消息添加到excel宏

Vba 将自定义错误消息添加到excel宏,vba,excel,excel-2007,Vba,Excel,Excel 2007,下面的宏将打开excel工作簿,并根据提供的数据生成图表。我想添加一些错误处理,以便在提供与指定工作簿(员工源数据)名称不同的excel工作簿时,会显示一个消息框,例如,请确保提供的电子表格名称为“员工源数据”。有没有办法做到这一点?提前谢谢 Sub GenerateEmployeeReport() Workbooks.Open Filename:=ThisWorkbook.Path & "\Employee_source_data" Range("E2").Selec

下面的宏将打开excel工作簿,并根据提供的数据生成图表。我想添加一些错误处理,以便在提供与指定工作簿(员工源数据)名称不同的excel工作簿时,会显示一个消息框,例如,请确保提供的电子表格名称为“员工源数据”。有没有办法做到这一点?提前谢谢

Sub GenerateEmployeeReport()
    Workbooks.Open Filename:=ThisWorkbook.Path & "\Employee_source_data"

    Range("E2").Select
    ActiveCell.FormulaR1C1 = "=SUM(RC[-3]:RC[-1])"
    Selection.AutoFill Destination:=Range("E2:E7"), Type:=xlFillDefault
    Range("E2:E7").Select
    Range("A1:A7,E1:E7").Select
    Range("E1").Activate
    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.SetSourceData Source:=Range( _
        "'Sheet2'!$A$1:$A$7,'Sheet2'!$E$1:$E$7")
    ActiveChart.ChartType = xl3DColumnClustered
End Sub
Dir()函数将派上用场。
试试像这样的东西

if dir(ThisWorkbook.path & "Employee_source_data*") = "" then
    msgbox "Please ensure spreadsheet name provided is Employee_source_data"
end if
另一种选择是使用FileDialog控件,如果您处于更容易让他们选择它的情况下。根据我的经验,没有人坚持命名约定,除非它被强制执行

Sub GenerateEmployeeReport()
    Dim strWorkbookName As String
    Dim Answer As String
Start:
    strWorkbookName = InputBox("Enter Workbook", "Open Workbook")

    On Error GoTo BadWorkbook
    Workbooks.Open Filename:=ThisWorkbook.Path & "\" & strWorkbookName

    Range("E2").Select
    ActiveCell.FormulaR1C1 = "=SUM(RC[-3]:RC[-1])"
    Selection.AutoFill Destination:=Range("E2:E7"), Type:=xlFillDefault
    Range("E2:E7").Select
    Range("A1:A7,E1:E7").Select
    Range("E1").Activate
    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.SetSourceData Source:=Range( _
        "'Sheet2'!$A$1:$A$7,'Sheet2'!$E$1:$E$7")
    ActiveChart.ChartType = xl3DColumnClustered
    Exit Sub

BadWorkbook:
    Answer = MsgBox("Please ensure spreadsheet name provided is Employee_source_data", vbRetryCancel)
    If Answer = 4 Then
        GoTo Start
    Else: Exit Sub
    End If
End Sub

goto命令将代码跳转到行标题
错误工作簿
,并使用msgbox rety cancel按钮为用户提供退出或继续的机会。然后,如果他们重试,用goto start重新启动sub,否则它会退出

好的,很好,很清楚您想要实现什么,但您还没有告诉我们您到目前为止尝试了什么。没有人会为您编写代码,您需要演示您尝试过的内容和不起作用的内容:)Hello@mehow我曾尝试过If语句和消息框,但并未取得太大进展,因为我对excel编程完全陌生,这是一次性要求:)过程非常简单。您需要一个变量来存储路径,然后使用
InStr()
StrComp()
来验证一个字符串是否存在于另一个字符串中。如果您正在硬编码该值,则应打开该工作簿。您不必测试它。如果找不到该工作簿,excel将给出一个错误,它不会打开另一个工作簿。谢谢@user2140261,我只想为用户提供一条友好的消息,以防提供错误的工作簿,而不是运行时错误。