2016-04-26 2 views
2

Итак, вот мой второй вопрос к вам, эксперты. Я пытаюсь найти последнюю строку столбца, но я продолжаю получать «диапазон значений метода для объекта».Метод «Диапазон» объекта _workheet не удался при поиске последнего VBA Excel

Я попытался изменить синтаксис на разные вещи, но я до сих пор не могу его обработать.

Я новичок в VBA Excel, и я очень ценю вашу помощь с этим.

Спасибо. нарушитель линия помечается ********

Private Sub GetProductCode() 
'Opens jobs file 
'Trims down customer reference column to job number only, then searches job file to return product code 
Dim sJobNumber As String 
Dim sCustomerReference As String 
Dim wsRevRownum As Long 
Dim wbkJobs As Workbook 
Dim wsJobs As Worksheet 
Dim wsRev As Worksheet 
Dim strPathFile As String 
Dim strSearch As String 
Dim fCell As Range 
Dim fCellRowNum As String 
Dim wsJobsLastrow As Long 
Dim wsRevLastrow As Long 


'On Error GoTo ErrHandler 
Application.ScreenUpdating = False 

'Change as desired 
    strPathFile = "\\ACHILLES\Company\Production_schedule\Jobs.xlsm" 
    strSearch = "Specific text" 

Set wbkJobs = Workbooks.Open _ 
       (Filename:=strPathFile, _ 
       UpdateLinks:=0, _ 
       ReadOnly:=True, _ 
       AddToMRU:=False) 

Set wsRev = ThisWorkbook.Sheets(3) 
MsgBox wsRev.Name 

Set wsJobs = wbkJobs.Sheets("Jobs") 

'MsgBox wbkJobs.Name 
wsRevRownum = 2 

With wsRev 
wsRevLastrow = wsRev.Range("E" & Rows.Count).End(xlUp).Row ******** 
End With 

With wsJobs 
wsJobsLastrow = wsJobs.Range("A" & Rows.Count).End(xlUp).Row 
End With 


'Loop through revenue file and search for entries in jobs file. If found then take the product code from the jobs file and populate revenue file 
Do Until wsRev.Range("E" & wsRevRownum).Address = (wsRevLastrow + 1) 
    'initialise variables 
    sCustomerReference = "" 
    sJobNumber = "" 
    strSearch = "" 
+1

попытка 'wsRevLastrow = .Range ("Е" и .Rows.Count) .END (xlUp) .Row' – findwindow

+0

или' .Cells (.Rows.Count, "Е"). Конец (xlUp) .Row'. В значительной степени такая же точная вещь;) –

+0

Я также продолжу и заметьте, что ваш цикл «Do Until» не будет делать то, что вы ожидаете. Свойство '.Address' возвращает тип' string' с адресом диапазона. Вы тестируете равенство с типом данных 'Long' в' (wsRevLastRow + 1) '. – user3561813

ответ

0

Попробуйте из них, если вы ищете последнюю строку на листе:

Sub GetLastRow() 

'Different ways to find the last row number of a range 

Dim ws As Worksheet 
Dim LastRow As Long 

Set ws = ThisWorkbook.Worksheets("Sheet1") 

'Ctrl + Shift + End 
    LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row 

'Using UsedRange 
    ws.UsedRange 'Refresh UsedRange 
    LastRow = ws.UsedRange.Rows(ws.UsedRange.Rows.Count).Row 

'Using Table Range 
    LastRow = ws.ListObjects("Table1").Range.Rows.Count 

'Using Named Range 
    LastRow = ws.Range("MyNamedRange").Rows.Count 

'Ctrl + Shift + Down (Range should be first cell in data set) 
    LastRow = ws.Range("A1").CurrentRegion.Rows.Count 

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