2013-11-14 5 views
1

У меня есть папка с листами excel, а также другой рабочий лист с столбцом, записи которого соответствуют именам файлов рабочих листов в папке.VBA Excel - найти значение в столбце, вставить на другой лист

Колонка справа от названия рабочего листа имеет номер, который я хочу, чтобы вставить в каждый соответствующий лист ... но это не работает ... вот мой код до сих пор:

Sub FraisRank() 

    Dim folderPath As String 
    Dim filename As String 
    Dim filenameshort As String 
    Dim wb As Workbook 
    Dim fraislist As Workbook 
    Dim find As Range 
    Dim sel As Range 

    folderPath = "C:\Users\richard\Desktop\temp" 

    If Right(folderPath, 1) <> "\" Then folderPath = folderPath + "\" 

    Set fraislist = Workbooks.Open("C:\Users\richard\desktop\frais list.xlsx") 

    filename = Dir(folderPath & "*.*") 

    Do While filename <> "" 
     Application.ScreenUpdating = False 
     Set wb = Workbooks.Open(folderPath & filename) 
     filenameshort = Left(filename, Len(filename) - 4) 

     Set sel = fraislist.Sheets(1).Range("A1:A164") 

      Set find = sel.find(What:=filenameshort, After:=ActiveCell, LookIn:=xlFormulas, _ 
     LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
     MatchCase:=False, SearchFormat:=False) 

     If find Is Nothing Then 
      MsgBox ("Cell " & filenameshort & " not found") 

     Else 
      find.Offset(, 1).Resize(1, 1).Copy 
      ActiveSheet.Range("$H$5").PasteSpecial Paste:=xlPasteValues 
     End If 

     ActiveWorkbook.Save 

     ActiveWorkbook.Close 

     filename = Dir 
    Loop 

    End Sub 

Для когда я получаю ошибку Runtime «13», введите несоответствие в разделе «Установить find = ...». И вообще я не понимаю, как запустить «.find» на основе выбранных ячеек в „“ fraislist книги ...

+1

BIRDSVIEW: Изменить 'After: = ActiveCell' на' After: = fraislist.Sheets (1) .Range ("A1") ' –

+0

Siddharth благодарит за эту проблему! Выполните ответ, и я выберу – Petrov

+0

Если вы настаиваете :) –

ответ

1

Проблема с ActiveCell в том, что он всегда будет относиться к заявлениям Activesheet и, следовательно, например, Activecell/Select/Activate/ActiveSheet/Activeworkbook. Всегда создавать соответствующие объекты и работать с ними

INTERESTING READ

В вашем случае это не обязательно, что ActiveSheet является fraislist.Sheets(1) так ActiveCell не может ссылаться на правильный лист и, следовательно, лучше квалифицировать его полностью.

Если вы меняете After:=ActiveCell на номер After:=fraislist.Sheets(1).Range("A1"), тогда ваш код будет ссылаться на правильный лист, и он будет работать.

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