Создание 1 электронной таблицы на строку с MS Project

851
bethlakshmi

Я хотел бы создать сценарий, который создает набор электронных таблиц, по 1 на каждую выбранную строку в расписании проекта MS. Это более сложно, чем то, что я видел в «функции экспорта», так как функция экспорта обрабатывает ваш файл MS-Project как таблицу и выполняет преобразование таблицы в таблицу.

Вот что я хочу от функциональности:

  • чтобы иметь возможность выбрать набор задач в MS-Project и вызвать функцию
  • чтобы функция брала 3-5 выбранных элементов из задач и помещала их в определенные места в электронной таблице Excel.
  • В идеале это позволило бы мне дать ему шаблонную таблицу со строками, представляющими места, в которые я хочу поместить данные.
  • Электронная таблица будет иметь несколько вкладок, и я хотел бы установить данные на нескольких вкладках.
  • Каждая задача получает новую электронную таблицу в своем собственном файле.

Я рад написать функцию для этого, но я не знаком ни с какими языками программирования макросов MS или хитростями. Я могу легко визуализировать желаемый псевдокод, я просто не знаю, есть ли API, которые будут делать то, что я хочу.

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

1

1 ответ на вопрос

1
DaveParillo

Да, это возможно, но, возможно, многое для новичка в макропрограммировании. Сложность немного увеличивается, потому что вы пытаетесь одновременно работать и с Excel, и с проектом - но это все полностью выполнимо.

Нет никаких API, которые уже сделали бы это сжатие, но MS Office имеет очень богатую модель Document Object . Один из лучших ресурсов, которые у вас есть, это ваш ключ «F1». Попробуйте записать то, что вы хотите сделать, очень маленькими шагами и измените код, чтобы сделать его соответствующим образом общим. Рекордер может помочь вам обнаружить объекты, методы и свойства, с которыми вам нужно познакомиться.

Основным рабочим объектом в Project является объект Task . В Excel это объект Range . Вам нужно познакомиться с обоими, чтобы делать то, что вы хотите. Грубый набросок:

  1. Начните с выбранных вами задач в проекте
  2. Для каждой задачи вашего выбора:
    а. Создать новую рабочую книгу
    б. Получить значения, которые вы хотите от проекта
    c. напишите их в соответствующий диапазон в Excel

Я немного нечетко отношусь к шаблонной части вашего вопроса, так что не беспокойтесь об этом в приведенном ниже примере, но вы можете определить вещь под названием Named Range в Excel. Таким образом, эти имена могут находиться в вашем шаблоне, вы можете даже использовать одно и то же имя на нескольких листах (вкладках), если хотите, и использовать эти имена, чтобы определить, куда записывать ваши данные taks. Например, я записал идентификатор задачи Range("A2"), но это также могло бытьRange("Project_ID")

Кроме того, я бы рекомендовал разбить это на несколько функций, по одной для каждого шага в вашей схеме. Вот очень простая отправная точка. Чтобы использовать этот пример, вам нужно создать ссылку на определения объектов Excel из Project. Откройте проект VBA IDE и выберите Сервис -> Ссылки . Найдите запись Microsoft Excel XX.0 Object Library и установите флажок. «XX» - это ваша версия Excel. Моему 10, твое чудо будет другим. Любой, кто использует это, должен будет сделать такой же выбор.

Option Explicit  Sub CopyTasksToExcel() Dim xlApp As Excel.Application Dim t As Task Dim wb As Excel.Workbook  Set xlApp = New Excel.Application  For Each t In ActiveSelection.Tasks Set wb = CreateWorkbook(xlApp, t.Name, t.ID) WriteSheetHeadingOn wb WriteTaskOn t, wb wb.Close SaveChanges:=True Next t  xlApp.Quit Set xlApp = Nothing End Sub  Function CreateWorkbook(ByVal xlApp As Excel.Application, _ ByVal TaskName As String, _ ByVal TaskID As Long) As Excel.Workbook Dim wb As Excel.Workbook Dim fName As String   Set wb = xlApp.Workbooks.Add 'You could specify a template here fName = ActiveProject.Path & "\" _ & TaskID & "-" _ & TaskName & ".xls" wb.SaveAs FileName:=fName  Set CreateWorkbook = wb Set wb = Nothing End Function  'Writes date from a Project Task to the provided workbook. Sub WriteTaskOn(ByVal prjTask As Task, _ ByVal xlWb As Excel.Workbook) With xlWb.Sheets(1) .Range("A2").Value = prjTask.ID .Range("B2").Value = prjTask.Name .Range("C2").Value = prjTask.Duration End With End Sub   Sub WriteSheetHeadingOn(ByVal xlWb As Excel.Workbook) With xlWb.Sheets(1) .Range("A1").Value = "ID" .Range("B1").Value = "Name" .Range("C1").Value = "Duration" End With End Sub 

Похожие вопросы