2014-01-30 243 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

相關問題