2015-06-02 2 views
0

У меня есть куча данных на одном листе, который я пытаюсь сохранить в отдельных книгах на основе значений в нескольких столбцах. Подход, который я принимаю (к лучшему или худшему!), - это скопировать соответствующий рабочий лист (и макросы) в новую книгу, сохранить его с соответствующим именем (допустим, temp.xlsx), а затем очистить данные в этой новой книге удаление нерелевантных строк (функция называется deleteInfo). Это необходимо сделать, не изменяя исходную книгу, в соответствии с политикой компании.Вызов функции из другой книги Excel

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

Я попытался:

Application.Run "'temp.xlsx'!deleteInfo" 

ActiveWorkbook.Application.Run deleteInfo 

Application.Run ("'C:\user\.....\temp.xlsx'!deleteInfo") 

Но никто из них не работал.

+0

Вы пытались копировать как .xlsm? – pnuts

+0

Да, без радости печально. Я попытался использовать «temp.xlsm» в приведенном выше коде, также попытался: ActiveWorkbook.SaveAs имя_файла: = «temp.xlsm», _ FileFormat: = xlOpenXMLWorkbook, CreateBackup: = False – Cormac

ответ

0

Для решения этой задачи вы должны подумать о создании надстройки Excel (расширение файла .xla), содержащего макросы VBA, при этом обычные книги с макросами (с расширением .xls или .xlsx) сохраняются. Подробнее о статье в Microsoft: https://support.office.com/en-ca/article/Add-or-remove-add-ins-0af570c4-5cf3-4fa9-9b88-403625a0b460 Надеюсь, это может помочь.

0

Решил эту проблему, экспортировав модуль, в котором был сохранен макрос, копируя оригинальную книгу и импортируя ее в новую книгу. pathName было определено в предыдущем модуле как путь к папке исходного файла (pathName = ActiveWorkbook.Path)

Sub exportMacro(ByVal pathName As String) 
    'Export the macro to save as .bas file 

    On Error Resume Next 
    Kill pathName & "\Module6.bas" 'Delete previously exported file 
    On Error GoTo 0 
    ActiveWorkbook.VBProject.VBComponents("Module6").Export pathName & "\Module6.bas" 
End Sub 


Sub importMacro(ByVal pathName As String) 
    'import the macro to a new workbook 

    ActiveWorkbook.VBProject.VBComponents.Import pathName & "\Module6.bas" 

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