1. 개요 : SI 프로젝트 과정에서 업무 분석을 위해 엑셀로 만든 장표를 사용하고, 다시 이 장표의 내용을 활용해 PFD를 그려야는데 주로 PPT파일을 이용합니다. 개발해야 하는 과제 수가 많은 경우에는 이 작업에 많은 시간을 소요하게 되는데요, ChatGPT를 사용해서 이 작업을 처리하는 코드를 구현해 사용하면 유용할 것 같아서 시도를 해 봤습니다.
2. 접근방식 :
초기> 구문 서술 방식으로 프롬프트를 주고 코드를 만들어 달라고 하니 부분적으로 오류가 발생해서 디버 깅 하는데 신경을 쓰게 되었습니다.
개선> 프롬프트를 알고리즘 형태로 정리해서 주문하니 좀 더 나은 코드를 만들어 주긴 했지만, 길지 않은 프롬프트 임에도 코드를 완성하지 못해 중단되기를 반복하였고, 프롬프트를 조금씩 달리하여 주문하여 일단 원하는 최소한의 결과물을 만들어내는 코드를 얻게 됐습니다.
3. 프롬프트 : 최종 적용해 결과물을 얻은 프롬프트는 다음과 같습니다.
지금부터 고급 vba 프로그래머로서 답변을 해 줘.
엑셀 파일에 있는 데이터를 이용해서 파워포인트 파일에 프로세스 플로우 다이어 그램을 만들어 주는 vba 코드를 만들고 싶어.
1. 소스 엑셀 파일의 경로와 파일명은 ''이야.
2. 타켓 파워포인트 파일의 경로와 파일명은 ''이야.
3. 소스 엑셀 파일에는 여러 개의 시트가 있고, 시트의 개수는 유동적이야.
4. 소스 엑셀 파일의 각 시트에는 E9셀 부터 E24셀 까지 '단위 프로세스 명칭' 값이 들어있어.
5. 파워포인트 파일에 새로운 빈 페이지를 생성해
6. 첫번째의 시트에서 E9셀 부터 E24셀 까지 순서대로 값을 읽어
7. 생성한 파워포인트 페이지에 하나의 시트에서 읽어들인 셀 값들을 이용해서 순서대로 사각형을 생성하고 각각의 셀 값을 생성한 사각형의 텍스트로 지정해
8. 앞에서 만든 사각형과 다음에 만든 사각형은 화살표가 있는 직선으로 연결해.
9. E24셀의 값을 읽어들어서 마지막 사각형을 만들 때까지 6에서 8까지 반복해
10. 모든 시트의 값으로 파워포인트 파일에 플로우차트 페이지를 모두 만들때까지 반복해
11. 파워포인트 파일을 저장하고 종료해
위와 같이 수행하는 vba 코드를 만들어줘.
4. 프롬프트
Sub CreateProcessFlowDiagram()
' Define source and target file paths
Dim sourceFilePath As String
Dim targetFilePath As String
sourceFilePath = "엑셀파일.xlsx"
targetFilePath = "PPT파일.pptx"
' Create a new PowerPoint presentation
Dim pptApp As PowerPoint.Application
Dim pptPres As PowerPoint.Presentation
Set pptApp = New PowerPoint.Application
Set pptPres = pptApp.Presentations.Add
' Loop through each sheet in the source Excel file
Dim sourceWB As Workbook
Set sourceWB = Workbooks.Open(sourceFilePath)
Dim sheetCount As Integer
sheetCount = sourceWB.Sheets.Count
Dim i As Integer
For i = 1 To sheetCount
' Create a new slide in the PowerPoint presentation
Dim pptSlide As PowerPoint.Slide
Set pptSlide = pptPres.Slides.Add(pptPres.Slides.Count + 1, ppLayoutBlank)
' Read the process names from the current sheet
Dim processNames() As Variant
processNames = sourceWB.Sheets(i).Range("E9:E24").Value
' Create rectangles for each process name
Dim rectLeft As Integer
rectLeft = 100
Dim rectTop As Integer
rectTop = 100
Dim rectWidth As Integer
rectWidth = 100
Dim rectHeight As Integer
rectHeight = 50
Dim j As Integer
For j = 1 To UBound(processNames)
Dim pptShape As PowerPoint.Shape
Set pptShape = pptSlide.Shapes.AddShape(msoShapeRectangle, rectLeft, rectTop, rectWidth, rectHeight)
pptShape.TextFrame.TextRange.Text = processNames(j, 1)
rectLeft = rectLeft + rectWidth + 100
2. 접근방식 :
초기> 구문 서술 방식으로 프롬프트를 주고 코드를 만들어 달라고 하니 부분적으로 오류가 발생해서 디버 깅 하는데 신경을 쓰게 되었습니다.
개선> 프롬프트를 알고리즘 형태로 정리해서 주문하니 좀 더 나은 코드를 만들어 주긴 했지만, 길지 않은 프롬프트 임에도 코드를 완성하지 못해 중단되기를 반복하였고, 프롬프트를 조금씩 달리하여 주문하여 일단 원하는 최소한의 결과물을 만들어내는 코드를 얻게 됐습니다.
3. 프롬프트 : 최종 적용해 결과물을 얻은 프롬프트는 다음과 같습니다.
지금부터 고급 vba 프로그래머로서 답변을 해 줘.
엑셀 파일에 있는 데이터를 이용해서 파워포인트 파일에 프로세스 플로우 다이어 그램을 만들어 주는 vba 코드를 만들고 싶어.
1. 소스 엑셀 파일의 경로와 파일명은 ''이야.
2. 타켓 파워포인트 파일의 경로와 파일명은 ''이야.
3. 소스 엑셀 파일에는 여러 개의 시트가 있고, 시트의 개수는 유동적이야.
4. 소스 엑셀 파일의 각 시트에는 E9셀 부터 E24셀 까지 '단위 프로세스 명칭' 값이 들어있어.
5. 파워포인트 파일에 새로운 빈 페이지를 생성해
6. 첫번째의 시트에서 E9셀 부터 E24셀 까지 순서대로 값을 읽어
7. 생성한 파워포인트 페이지에 하나의 시트에서 읽어들인 셀 값들을 이용해서 순서대로 사각형을 생성하고 각각의 셀 값을 생성한 사각형의 텍스트로 지정해
8. 앞에서 만든 사각형과 다음에 만든 사각형은 화살표가 있는 직선으로 연결해.
9. E24셀의 값을 읽어들어서 마지막 사각형을 만들 때까지 6에서 8까지 반복해
10. 모든 시트의 값으로 파워포인트 파일에 플로우차트 페이지를 모두 만들때까지 반복해
11. 파워포인트 파일을 저장하고 종료해
위와 같이 수행하는 vba 코드를 만들어줘.
4. 프롬프트
Sub CreateProcessFlowDiagram()
' Define source and target file paths
Dim sourceFilePath As String
Dim targetFilePath As String
sourceFilePath = "엑셀파일.xlsx"
targetFilePath = "PPT파일.pptx"
' Create a new PowerPoint presentation
Dim pptApp As PowerPoint.Application
Dim pptPres As PowerPoint.Presentation
Set pptApp = New PowerPoint.Application
Set pptPres = pptApp.Presentations.Add
' Loop through each sheet in the source Excel file
Dim sourceWB As Workbook
Set sourceWB = Workbooks.Open(sourceFilePath)
Dim sheetCount As Integer
sheetCount = sourceWB.Sheets.Count
Dim i As Integer
For i = 1 To sheetCount
' Create a new slide in the PowerPoint presentation
Dim pptSlide As PowerPoint.Slide
Set pptSlide = pptPres.Slides.Add(pptPres.Slides.Count + 1, ppLayoutBlank)
' Read the process names from the current sheet
Dim processNames() As Variant
processNames = sourceWB.Sheets(i).Range("E9:E24").Value
' Create rectangles for each process name
Dim rectLeft As Integer
rectLeft = 100
Dim rectTop As Integer
rectTop = 100
Dim rectWidth As Integer
rectWidth = 100
Dim rectHeight As Integer
rectHeight = 50
Dim j As Integer
For j = 1 To UBound(processNames)
Dim pptShape As PowerPoint.Shape
Set pptShape = pptSlide.Shapes.AddShape(msoShapeRectangle, rectLeft, rectTop, rectWidth, rectHeight)
pptShape.TextFrame.TextRange.Text = processNames(j, 1)
rectLeft = rectLeft + rectWidth + 100