2017-12-21 7 views
0

Excel VBA에서 작은 계산원 프로그램을 만들려고합니다. 그러나 나는 추가 주문을 추가하고 싶은 부분에 갇혀있다. 내 양식에는 4 개의 콤보 상자가 있습니다. 음료, 옆구리, 특산물 및 개인. 내가 달성하고 싶은 것은 콤보 상자의 값을 폼의 목록 상자에 추가하고 추가 단추를 클릭하면 가지고있는 시트 ("TABLE 1")에 추가하는 것입니다. 값이 없다면 콤보 상자를 무시하고 다음을 확인합니다. 여기 VBA Excel을 사용하여 데이터를 저장하지 못했습니다.

내 코드입니다 : 내가 값 "SMB 버킷 '과'나초"을 선택했는지 가정

Private Sub cmdadd_Click() 

Range("A2").Select 

If MsgBox("ADD ORDERS?", vbYesNo, "CONFIRMATION") = vbYes Then 
Application.ScreenUpdating = False 

Dim ws As Worksheet 
Dim ws1 As Worksheet 
Dim lo As ListObject 
Dim lr As ListRow 
Set ws = Sheets("TABLE 1") 
Set ws1 = Sheets("Overview") 
ws.Unprotect "321321" 
Set lo = ws.ListObjects(1) 
Set lr = lo.ListRows.Add 

lr.Range(1, 1).Value = Date 

If cmbdrinks.Value = "SMB BUCKET" Then 
lr.Range(1, 2).Value = cmbdrinks.Value 
ListBox1.AddItem (cmbdrinks.Value) 
txtbill.Value = txtbill.Value + 258 
lr.Range(1, 3).Value = 258 
lr.Range(1, 4).Value = Time 
lr.Range(1, 4).NumberFormat = "h:mm:ss AM/PM" 
lr.Range(1, 5).Value = ws1.Range("I4").Value 

ElseIf cmbdrinks.Value = "SMB TOWER" Then 
lr.Range(1, 2).Value = cmbdrinks.Value 
ListBox1.AddItem (cmbdrinks.Value) 
txtbill.Value = txtbill.Value + 288 
lr.Range(1, 3).Value = 288 
lr.Range(1, 4).Value = Time 
lr.Range(1, 4).NumberFormat = "h:mm:ss AM/PM" 
lr.Range(1, 5).Value = ws1.Range("I4").Value 

If cmbside.Value = "NACHOS" Then 
    lr.Range(1, 2).Value = cmbside.Value 
    ListBox1.AddItem (cmbside.Value) 
    txtbill.Value = txtbill.Value + 58 
    lr.Range(1, 3).Value = 58 
    lr.Range(1, 4).Value = Time 
    lr.Range(1, 4).NumberFormat = "h:mm:ss AM/PM" 
    lr.Range(1, 5).Value = ws1.Range("I4").Value 

ElseIf cmbside.Value = "FRENCH FRIES" Then 
    lr.Range(1, 2).Value = cmbside.Value 
    ListBox1.AddItem (cmbside.Value) 
    txtbill.Value = txtbill.Value + 48 
    lr.Range(1, 3).Value = 48 
    lr.Range(1, 4).Value = Time 
    lr.Range(1, 4).NumberFormat = "h:mm:ss AM/PM" 
    lr.Range(1, 5).Value = ws1.Range("I4").Value 

Else 
End If 


Else 
End If 

, 무슨 일이의 것은 내가 "CMDADD"버튼을 클릭 할 때이다, 그것은 저장 내 목록 상자에 아무런 문제가없는 데이터, SMB 버킷 및 NACHOS가 나열되어 있으면 "TXTBILL"에 표시된 가격도 정확합니다. 그러나 "TABLE 1"시트에 저장된 데이터에는 첫 번째 콤보 상자에서 "SMB BUCKET"을 선택했지만이 경우 "NACHOS"라고 추가 한 마지막 항목 만 포함됩니다.

내 문장이 잘못 중첩되어 있거나 루프 문을 사용해야합니까? 나는이 작은 프로젝트를 통해 나를 인도 할 수 있기를 바랍니다. 내가 원하는 것을 성취 할 수있는 쉬운 방법이 있다면 나는 그 도움에 매우 감사 할 것입니다!

미리 감사드립니다.

답변

0

결과를 저장할 행을 하나만 만들면 문제가 발생하며 매번 값을 덮어 쓰게됩니다. 각 항목에 대해 새 목록 행이 필요합니다. 당신의 ElseIf cmbdrinks.Value = "SMB TOWER" Then 문에서

은 다음 두 줄을 추가

Set lr = lo.ListRows.Add 
lr.Range(1, 1).Value = Date 

는 나초이나 튀김에 대한 행을 추가합니다.

또한 Else 블록에 대한 정보가 없으면 포함 할 필요가 없습니다. 다음과 같이

귀하의 If…Then 문은 다음과 같습니다

If <test condition> Then 
ElseIf <test condition> Then 
End If