Скопировать кучу листов и сохранить, используя диапазон, с исходного листа?

#excel #vba

#excel #vba

Вопрос:

Я хочу скопировать этот лист в свою рабочую книгу и сохранить в формате CSV, используя значение в ячейке C29 листа 1 исходного листа, который я скопировал: Del Mar_Replines_20200831_Macro Build.xlsm. Когда я запускаю это, я получаю ошибку «индекс вне диапазона».

Если я просто вставлю значение в ячейку C29 в качестве имени файла, макрос сработает. Ячейка C29 — это уравнение (не уверен, имеет ли это значение).

 Sheets("Balance Sheet").Copy
    
    ActiveWorkbook.SaveAs Filename:=Workbooks("Del Mar_Replines_20200831_Macro Build").Worksheets("Sheet1").Range("C29").Value
  
    ActiveWindow.Close
  

Комментарии:

1. Попробуйте добавить расширение файла к имени файла. Или используйте Thisworkbook.Worksheets("Sheet1").Range("C29").Value , если ячейка находится в той же книге, что и ваш код VBA.

2. Не сработало. Я попробовал оба варианта.

3. Тогда может не быть листа с таким именем

4. Являются Sheets("Balance Sheet") and ли листы («Лист1») `оба в Del Mar_Replines_20200831_Macro Build.xlsm ? И если да, есть ли ваш макрос в этой книге? или они в двух разных книгах?

Ответ №1:

Этот макрос предполагает, что два листа расположены в Workbooks("Del Mar_Replines_20200831_Macro Build") , а ваш макрос находится в одной книге.

Во-первых: вам нужно убедиться, что значение в C29 не содержит недопустимых символов, которых не может быть в имени файла.

 With ThisWorkbook 'refers to the workbook that contains your macro
    .Sheets("Balance Sheet").Copy 'the sheet you want to copy

    'When you copy a sheet it becomes active. If you don't identify the save path, 
    'the active workbook will be saved to Excels default save location. 
    'The new saved workbook will be located in Excels default save location;
    'the file name will be the value from "ThisWorkbook.Sheets("Sheet1").(C29)",
    'with file extension ".CSV", and file format "6"(csv). 

    ActiveWorkbook.SaveAs .Sheets("Sheet1").Range("C29").Value amp; ".csv", FileFormat:=6

    ActiveWindow.Close SaveChanges:=False 'close the new workbook with no popup
End With