2014-01-30 244 views
0

我目前正在研究从用户处获取日期,打开日历,查看月份是否存在以及是否存在,创建一个包含该月份名称的工作表。VBA中的运行时错误“9”[excel] - 下标超出范围

的代码看起来是这样的,其中m_y是一个字符串,并具有价值,如“2014年1月” [包括“标志]:

Sub addmonth(m_y) 
    On Error Resume Next 
    CalendarWorkbook.Worksheets(m_y).Select 

    If Err.Number<>0 Then 
    'code to add sheet and format it 

我试图把它在一个带/尾随着命令,我别无选择,在代码中明确的答案中提到的其他方法,如使用.Range()代替.Select;但是我在后面没有运气

提供将不胜感激任何帮助

+0

而且你的工作表名称中包含'''符号? – sam092

+0

当我改变名称说“2014年2月”时,它工作是因为表单存在。当我放入“2015年2月”时,它不起作用 – user3094302

+1

'我没有任何选项明确的代码'为什么没有特殊的原因? – pnuts

回答

1

.Select在大多数情况下是运行时错误的主要原因。我相信你有另一个工作簿打开。 INTERESTING READ

试试这个法子不使用.Select

Option Explicit 

Sub test() 
    addmonth ("""Feb2015""") 
End Sub 

Sub addmonth(m_y) 
    Dim calendarworkbook As Workbook 
    Dim ws As Worksheet 

    Set calendarworkbook = ThisWorkbook 

    On Error Resume Next 
    Set ws = calendarworkbook.Worksheets(m_y) 
    On Error GoTo 0 

    If ws Is Nothing Then calendarworkbook.Worksheets.Add.Name = m_y 
End Sub 

注意:OERN(出错时继续下一步)应谨慎使用。确保它只是限制你想要的部分而不是剩下的部分。否则它不是很好的错误处理:)

0

这工作了。我

Sub test() 
    addmonth ("""Feb2015""") 
End Sub 

Sub addmonth(m_y) 
    Dim calendarworkbook As Workbook 
    Set calendarworkbook = ThisWorkbook 
    On Error Resume Next 
    calendarworkbook.Worksheets(m_y).Select 

    If Err.Number <> 0 Then 
     With calendarworkbook.Worksheets.Add 
      .Name = m_y 
     End With 
    End If 
End Sub 
+0

我遇到了'calendarworkbook.Worksheets(m_y).Select'这行同样的问题,运行时错误9-下标超出范围 – user3094302

+0

没问题,那么有一种可能性是,在还没有恢复之前你有另一个错误。看看这个线程是否有帮助。 http://stackoverflow.com/questions/15459332/on-error-resume-next-seemingly-not-working – sam092

+0

我只是尝试在不同的笔记本电脑上的相同的代码,它工作正常;然而,在我的看来,它似乎崩溃了。这可能是软件故障吗? – user3094302

相关问题