2013-04-27 2 views
0

Я использовал этот сайт и другие, чтобы запустить этот проект, но я ударил кирпичную стену. То, что я делаю, это импорт (копирование) столбцов c-h из конкретной книги (ImportConvert.xlsx) и вставка их в столбцы a-f ControlBook.xlsm. Затем я копирую строки a -c третьей книги (Clients.xlsx) и вставляю эти столбцы в столбцы m - o ControlBook.xlsm. Оба находятся на одном листе. Мне удалось зайти так далеко от учебников, которые я прочитал до сих пор, и поблагодарить всех за эту информацию. Следующее, что я собираюсь выполнить, - это поиск каждого значения в столбце B рабочего листа с каждым значением в столбце O, чтобы увидеть, содержится ли значение в столбце O внутри строкового значения в столбце B. Когда совпадение найдено, я хочу значение в столбце O для отображения в столбце g.Отображение значения из одной ячейки в столбце O на основе найденного значения Поиск InStr отдельной ячейки в столбце B

Когда я выполняю код, он обрабатывается от начала до конца, но не отображает значение в столбце g.

Вот код:

Sub StartProcess() 

Dim wbk As Workbook 

    strDataFile = "C:\Documents and Settings\Administrator\Desktop\ImportConvert.xlsx" 
    strMasterFile = "C:\Documents and Settings\Administrator\Desktop\ControlBook.xlsm" 
    strClientFile = "C:\Documents and Settings\Administrator\Desktop\Clients.xlsx" 

    Set wbk = Workbooks.Open(strDataFile) 

     With wbk.Sheets("Data") 
      Range("c:h").Copy 
     End With 


    Set wbk = Workbooks.Open(strMasterFile) 

     With wbk.Sheets("Deposits") 
      Range("a:f").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 
     End With 

     wbk.Save 
     wbk.Close 

    Set wbk = Workbooks.Open(strClientFile) 

     With wbk.Sheets("ActivePayee") 
      Range("a:c").Copy 
     End With 

    Set wbk = Workbooks.Open(strMasterFile) 

     With wbk.Sheets("Clients") 
      Range("m:o").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 
     End With 

Dim rngSub As Range 
Dim rngSrch As Range 

For Each rngSub In Range("o2:o1000") 
    For Each rngSrch In Range("b2:b1000") 
     If InStr(rngSrch, rngSub) > 0 Then 
      rngSrch.Offset(, 5) = rngSub.Value 
     End If 
    Next 
Next 

End Sub 

Это не самое элегантное решение, но человек, которого я пытаюсь помочь нетерпелив и просто не хочет, чтобы его сейчас (не касается построен должным образом). Я вернусь после того, как он успокоится и узнает более элегантный способ создания этого проекта. Я просто хочу дать этому парню что-то, чтобы он не был настолько паническим.

Я пришел к этому с минимальным воздействием VBA, но я знаком с программированием через PhP, mySQL и т. Д. Я поработал с VBA в конце 90-х и начале 2000-х годов, но не был выставлен VBA в длинном время.

Заранее благодарим за любую помощь.

ответ

0

Все ваши ссылки Range(...) могут ссылаться на неправильные Sheet s. Без отборочным Range само по себе относится к Activesheet.Range

Изменение

With wbk.Sheets("Data") 
    Range("c:h").Copy 
End With 

в

With wbk.Sheets("Data") 
    .Range("c:h").Copy 
End With 

Аналогично для всех других применений Range

И

For Each rngSub In Range(...) 

до

For Each rngSub In wrk.Worksheets("YourName").Range(...) 
Смежные вопросы