2015-06-19 4 views
0

Получение определенной или объектной ошибки в моем макросе excel vba, и я не уверен, почему. Я предполагаю, что это имеет какое-то отношение к тому, как я называю ссылку на ячейку. Я рассмотрел некоторые другие подобные вопросы. Они очень похожи, но я пропускаю ее там, где моя ошибка.VBA/Excel Определенная приложением или объектно-ориентированная ошибка

Вот код:

Set AllianceSheet = Worksheets(2) 

Dim YearBeginRange As Range 
Dim YearEndRange As Range 
Dim Year As Integer 
Dim BeginRow As Long 
Dim EndRow As Long 
Dim CountryRange As Range 
'Dim WS As Worksheet 
'Dim WSName As String 

Year = 1965 
'WSName = "Ally-" & Year 



Set YearBeginRange = AllianceSheet.Range("C1", AllianceSheet.Range("C1").End(xlDown)).Find(What:=Year, After:=AllianceSheet.Range("C1"), LookIn:=xlFormulas, _ 
     LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
     MatchCase:=False, SearchFormat:=False) 
    If YearBeginRange Is Nothing Then 
     MsgBox Year & "Begin year not found" 
    Else 
     'MsgBox Year & "Begin year found!" 
     'Debug.Print YearBeginRange.Row 
     'Debug.Print TypeName(YearBeginRange.Row) 
     BeginRow = YearBeginRange.Row 
    End If 

Set YearEndRange = AllianceSheet.Range("C1", AllianceSheet.Range("C1").End(xlDown)).Find(What:=Year + 1, After:=AllianceSheet.Range("C1"), LookIn:=xlFormulas, _ 
     LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
     MatchCase:=False, SearchFormat:=False) 
    If YearBeginRange Is Nothing Then 
     MsgBox Year & "End year not found" 
    Else 
     EndRow = YearEndRange.Row 
    End If 


Set CountryRange = AllianceSheet.Range(AllianceSheet.Cells(1, BeginRow), AllianceSheet.Cells(1, EndRow)) 



'Debug.Print BeginRow 
'Debug.Print EndRow 
'Debug.Print WSName 

End Sub 

ошибка приходит на:

Set CountryRange = AllianceSheet.Range(AllianceSheet.Cells(1, BeginRow), AllianceSheet.Cells(1, EndRow)) 

Я знаю, что я что-то очень простой так что спасибо не хватает заранее. FYI, BeginRow = 65930 и EndRow = 81430 в этом случае.

+0

EndRow ничего, если YearEndRange не найден. Где вы ищете (.Find) для YearEndRange, вы проверяете YearBeginRange. –

ответ

2

У вас есть аргументы .Cells обращенно - она ​​должна быть row, column, не column, row:

Set CountryRange = AllianceSheet.Range(AllianceSheet.Cells(BeginRow, 1), _ 
             AllianceSheet.Cells(EndRow, 1)) 
+0

@agnuke Скорее всего, это ответ, так как максимальное количество столбцов, которое может иметь лист, равно 16384 (офис 2010), вы можете проверить по 'Columns.Count' – PatricK

+0

Даже не пытаясь исправить ошибку, я собираюсь идти вперед и предположим, что ты прав, и я идиот. Благодаря! – agnuke

Смежные вопросы