관련 : 지식인 질문
https://www.instagram.com/p/Cf_XuyWFBc9/
위 링크의 영상처럼 장바구니 목록을 구성해서 신용카드로 결제하는 화면을 구성하고 싶다는 질문입니다.

VBA와 ListBox 를 이용해서 만들어 보았습니다.
그림을 클릭해서 아이템을 추가하고 개수를 늘립니다.
+와 -를 눌러서 숫자를 수정합니다.
물건 가격은 그림 도형의 이름 "item_축구공_10000"에서 가져옵니다.

0개가 되면 목록에서 삭제합니다.
물건의 최대 개수는 10개로 제한했습니다. 바꾸려면 maxITem 값을 수정하면 됩니다.
결제화면 버튼을 누르면 총액수를 보여주고 결제하기를 누릅니다.

애니메이션이 뜨고 결제가 완료됩니다.
아래 실행 영상을 확인하세요.
윈도우에서만 작동하기 때문에 터치가 되는 노트북을 이용하거나
갤럭시 탭 등에 SuperDisplay로 윈도우 화면을 연동해서 태블릿화면을 터치하는 방식으로
원본 영상처럼 구현이 가능합니다.
아래는 사용된 Module1의 코드입니다.
ListBox를 다루는 코드 예시로 활용할 수 있습니다.
ListBox 는 Index가 0부터 시작하고 Column 순서도 0부터 시작하는 것에 주의해야 합니다.
Option Explicit
Option Compare Text '문자열 비교시 대소문자 무시
Const MaxItem As Integer = 10
Const PaySlide As Long = 3
'초기화
Sub InitList()
Slide1.ListBox1.Clear
Slide1.ListBox1.ColumnCount = 3
End Sub
Sub test()
ClickItem ActivePresentation.Slides(2).Shapes("item_축구공_10000")
End Sub
'아이템 추가
Sub ClickItem(shp As Shape)
Dim Found As Integer, i As Integer
Dim itemName As String, itemPrice As Long, itemTotal As Long
With Slide1.ListBox1
itemName = Split(shp.Name, "_")(1)
itemPrice = Split(shp.Name, "_")(2)
'기존 아이템인지 검색
Found = -1
For i = LBound(.List) To UBound(.List)
If .List(i, 0) = itemName Then Found = i: Exit For
Next i
'새로 추가
If Found = -1 Then
.AddItem itemName
'Debug.Print itemName, itemPrice
.List(.ListCount - 1, 1) = 1
.List(.ListCount - 1, 2) = Format(itemPrice, "###,###")
'기존 아이템
Else
.List(Found, 1) = .List(Found, 1) + 1
End If
'총합계산
For i = LBound(.List) To UBound(.List)
itemTotal = itemTotal + .List(i, 1) * .List(i, 2)
Next i
ActivePresentation.Slides(PaySlide).Shapes("Total"). _
TextFrame.TextRange = Format(itemTotal, "###,###,###")
End With
End Sub
Sub PlusMinus(shp As Shape)
Dim i As Integer
Dim flag As Boolean
Dim itemTotal As Long
If shp.Name = "plus" Then flag = True Else flag = False
With Slide1.ListBox1
If .ListIndex < 0 Then MsgBox "먼저 개수를 수정할 물건을 선택하세요.", vbInformation: Exit Sub
.List(.ListIndex, 1) = .List(.ListIndex, 1) + IIf(flag, 1, -1)
'0개인 경우 삭제
If .List(.ListIndex, 1) = 0 Then
.RemoveItem .ListIndex
'최대개수 초과인 경우
ElseIf .List(.ListIndex, 1) > MaxItem Then
MsgBox "최고개수는 " & MaxItem & "입니다.", vbOKOnly + vbInformation
.List(.ListIndex, 1) = 10
End If
'총합계산
For i = LBound(.List) To UBound(.List)
itemTotal = itemTotal + .List(i, 1) * .List(i, 2)
Next i
ActivePresentation.Slides(PaySlide).Shapes("Total"). _
TextFrame.TextRange = Format(itemTotal, "###,###,###")
End With
End Sub
Sub OnSlideShowPageChange(SSW As SlideShowWindow)
If SSW.View.Slide.SlideIndex = 1 Then InitList
End Sub
첫 슬라이드와 결제 전 슬라이드에 빈 슬라이드가 사용된 것은 의도적인 것입니다.
자동 전환 되는 첫 슬라이드는 ListBox 초기화를 위한 것이고
결제 전 빈 슬라이드는 원처럼 도는 애니메이션이 한번 재생되어 다시 재생되지 않는 것을 방지하기 위함입니다.
참고로 원 모양의 동그라미를 그리는 방법을 이용해서 로딩 애니메이션도 삽입해보았습니다.
중간에 결제 확인 화면 앞에 삽입된 로딩 애니메이션입니다.
'PPT+VBA' 카테고리의 다른 글
시간 제한 퀴즈 게임 템플릿 (1) | 2024.01.01 |
---|---|
폴더 내의 모든 PPT를 PDF로 일괄로 내보내기 (0) | 2023.12.17 |
폴더 내의 모든 PPT파일을 동영상으로 내보내기 (0) | 2023.12.04 |
특정 슬라이드쇼 설정으로 항상 쇼를 시작 (0) | 2023.11.18 |
모핑 슬라이드 사진앨범 생성 (0) | 2023.10.06 |
프랙탈1 - Sierpinsky 삼각형 그리기 (0) | 2023.09.27 |
차트(Moon Chart) 자동으로 그리기 (0) | 2023.09.04 |
도형의 Node를 대칭되게 조절 (0) | 2023.08.23 |
최근댓글