2017-05-10 5 views
3

아래 코드를 실행하고 가짜 결과를 얻습니다.VBA 복사 프로젝트에서 Excel로 데이터 붙여 넣기

어떤 이유로 MS 프로젝트 데이터 대신 원하는 코드에 5 줄의 코드를 복사합니다.

누구나 초보자를 도와 줄 수 있습니까? 코드의

다섯 줄은 잘못 Excel 워크 시트에 복사 :

'Open MS Project file 
projApp.Application.FileOpenEx "C:File.mpp" 

Set projApp = projApp.ActiveProject 

'Final set up of code 
Set projApp = Nothing 

Error Image

Sub OpenProjectCopyPasteData() 

Dim appProj As MSProject.Application 
Dim aProg As MSProject.Project 
Dim sel As MSProject.Selection 
Dim ts As Tasks 
Dim t As Task 
Dim rng As Range 
Dim ws As Worksheet 

Application.DisplayAlerts = False 

'Clear current contents 

Set ws = Worksheets("Project Data") 
Set rng = ws.Range("A:J") 
rng.ClearContents 

On Error Resume Next 
Set appProj = GetObject(, "MSProject.Application") 
If appProj Is Nothing Then 
    Set appProj = New MSProject.Application 
End If 
appProj.Visible = True 

'Open MS Project file 
projApp.Application.FileOpenEx "C:File.mpp" 
Set projApp = projApp.ActiveProject 

'Final set up of code 
Set projApp = Nothing 

appProj.Visible = True 

WindowActivate WindowName:=aProg 

'Copy the project columns and paste into Excel 
Set ts = aProg.Tasks 

SelectTaskColumn Column:="Task Name" 
OutlineShowAllTasks 
OutlineShowAllTasks 
EditCopy 
Set ws = Worksheets("Project Data") 
Set rng = ws.Range("A:A") 
ActiveSheet.Paste Destination:=rng 

SelectTaskColumn Column:="Task Name" 
EditCopy 
Set rng = ws.Range("B:B") 
ActiveSheet.Paste Destination:=rng 

SelectTaskColumn Column:="Resource Names" 
EditCopy 
Set rng = ws.Range("C:C") 
ActiveSheet.Paste Destination:=rng 

SelectTaskColumn Column:="Finish" 
EditCopy 
Set rng = ws.Range("D:D") 
ActiveSheet.Paste Destination:=rng 

Application.DisplayAlerts = True 
appProj.DisplayAlerts = True 

End Sub 
+0

왜도 너무 변수에'ActiveSheet'를 할당? ActiveSheet가 무엇인지 모르는 사이에 모호성을 줄이는 데 도움이됩니다. – BruceWayne

+0

아래의 내 대답과 코드를 참조하십시오. –

+0

@ShaiRado 대단히 감사합니다. 거대한 도움! – ERKSMTY

답변

3

원래 코드는 위의 일을 어떻게, 확실하지 않다 당신 Dim 및 변수 appProjSet하지만 이후 나중에 projApp.Application.FileOpenEx "C:File.mpp" (projApp <>appProj)으로 MS-Project 파일을 열려고합니다. "C A"

은 열에서 "프로젝트 데이터"를 워크 시트에 3 열 ( "Name", "Resource Names""Finish")를 복사합니다 아래 (테스트) 코드를 사용해보십시오.

코드

Option Explicit 

Sub OpenProjectCopyPasteData() 

Dim PrjApp  As MSProject.Application 
Dim aProg  As MSProject.Project 
Dim PrjFullName As String 
Dim t   As Task 
Dim rng   As Range 
Dim ws   As Worksheet 

Application.ScreenUpdating = False 
Application.DisplayAlerts = False 

'Clear current contents 
Set ws = Worksheets("Project Data") 
Set rng = ws.Range("A:J") 
rng.ClearContents 

On Error Resume Next 
Set PrjApp = GetObject(, "MSProject.Application") 
If PrjApp Is Nothing Then 
    Set PrjApp = New MSProject.Application 
End If 
On Error GoTo 0 
PrjApp.ScreenUpdating = False 
PrjApp.Visible = True 

'Open MS Project file 
PrjFullName = "C:File.mpp" '<-- keep the MS-Project file name and path in a variable 
PrjApp.Application.FileOpenEx PrjFullName 
Set aProg = PrjApp.ActiveProject 

' show all tasks 
OutlineShowAllTasks 

'Copy the project columns and paste into Excel 
SelectTaskColumn Column:="Name" 
EditCopy 
Set ws = Worksheets("Project Data") 
Set rng = ws.Range("A:A") 
rng.PasteSpecial xlPasteValues 
rng.PasteSpecial xlPasteFormats 

SelectTaskColumn Column:="Resource Names" 
EditCopy 
Set rng = ws.Range("B:B") 
rng.PasteSpecial xlPasteValues 
rng.PasteSpecial xlPasteFormats 

SelectTaskColumn Column:="Finish" 
EditCopy 
Set rng = ws.Range("C:C") 
rng.PasteSpecial xlPasteValues 
rng.PasteSpecial xlPasteFormats 

' reset settings of Excel and MS-Project 
Application.DisplayAlerts = True 
Application.ScreenUpdating = True 
PrjApp.ScreenUpdating = True 
PrjApp.DisplayAlerts = True 

'PrjApp.FileClose False 
PrjApp.Quit pjDoNotSave 
Set PrjApp = Nothing 

End Sub 
+0

코드에서 경로를 정의하는 대신 워크 시트에 저장된 경로를 반복하도록 수정하는 데 문제가 있습니다. 거기에 어떤 제안? [링크] (http://stackoverflow.com/questions/44012400/misunderstood-runtime-error-vba-for-excel-and-ms-project) – ERKSMTY

+0

@ERKSMTY 당신은 새로운 질문을 올리거나, 시도하고있는 것을 정확히 묘사해야합니다. 달성하고 관련 코드를 추가하십시오. 이것은 다른 사용자와 나 자신이 당신을 도울 수있게 해줍니다. –

+0

내 마지막 코멘트에있는 링크를 확인하십시오. – ERKSMTY