2016-06-17 2 views
0

Добрый день. У меня возникла проблема с этим кодом. Он отлично работает, если я разрешаю книгу Excel читать, а затем закрываю ее с помощью функции ActiveWorkbook.Close. Если я прокомментирую функцию .close, я получаю ошибку времени выполнения. Я хотел бы, чтобы все книги открывались и открывались.Использование диапазона для ввода данных в имя файла

+1

Переменная 'counter' не отображается для использования внутри цикла. Попробуйте изменить 'EVar = Worksheets (« Открыватель »). Диапазон (« A1 »). Значение' to 'EVar = Рабочие листы (« Открыватель »). Диапазон (« A »и счетчик) .Value' –

+0

Вы хотите' EVar = Рабочие листы («Открыватель»). Диапазон («A» и счетчик). Значение? Кроме того, стоит упомянуть, чтобы исправить вашу строку до 'lastrow = Worksheets (« Открыватель »). Ячейки (Worksheets (« Открыватель »). Rows.Count, 1) .End (xlUp) .Row' – BruceWayne

+0

' EPath = EPath = " C: Мой путь \ "' должен быть 'EPath =" C: \ My path \ "' –

ответ

0

Нечто подобное (непроверенные)

Sub openwb1() 

    Dim EPath As String, EFile As String, EMo As String 
    Dim EVar As String, lastrow As Long, counter As Long, EFound As String 
    Dim wb As Workbook 

    lastrow = Worksheets("Opener").Cells(Rows.Count, 1).End(xlUp).Row 

    'next two lines do not need to be inside the loop 
    EPath = "Q:\MY PATH\" 
    EMo = MonthName(DatePart("m", Now), True) & " " & DatePart("yyyy", Now) & "\" 

    For counter = 1 To lastrow 

     EVar = Worksheets("Opener").Range("A" & counter).Value 

     If Len(Dir(EPath & EVar & EMo, vbDirectory)) = 0 Then 

      MkDir EPath & EVar & EMo 

     Else 
      'only check for a file if the source folder was found... 
      EFound = Dir(EPath & EVar & EMo & "*$*.xlsx") 

      If EFound <> "" Then 
       Set wb = Workbooks.Open(Filename:=EPath & EVar & EMo & "\" & EFound) 

       'do something with wb 

       wb.Close False 'don't save changes? 

      End If 

     End If 

    Next counter 

End Sub 
0

Попробуйте изменить EVar = Worksheets("Opener").Range("A" & counter).Value к EVar = Thisworkbook.Worksheets("Opener").Range("A" & counter).Value.

BTW, lastrow = Worksheets("Opener").Cells(Worksheets("Opener").Rows.Count, 1).End(xlUp).Row можно изменить на lastrow = Worksheets("Opener").Cells(Rows.Count, 1).End(xlUp).Row, потому что каждый рабочий лист в этой книге имеет то же самое Rows.Count. Вам не нужно указывать, какую рабочую таблицу считать.

+0

Прошу прощения. Это не сработало. Я опубликовал свои результаты в этой теме. –

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

  • Нет связанных вопросов^_^