2015-01-07 4 views
1

원하는 결과를 제공하기 위해 3 가지 값을 곱해야하는 양식이 있습니다. 그것은 다음과 같습니다 :VBA로 곱하기

Private Sub cmdAdd_Click() 

Dim emptyRow As Long 
Dim ctl As Control 
Dim A As Integer 
Dim B As Integer 
Dim C As Integer 
Dim D As Integer 
Dim E As Integer 
Dim Answer As Integer 
Dim Answer2 As Integer 
Dim Answer3 As Integer 



If Me.txtNoTotalAff.Value = "" Then 
    MsgBox "Please enter the Total Number of Affiliates", vbExclamation, "ROI" 
    Me.txtNoTotalAff.SetFocus 
    Exit Sub 
End If 
If Me.lstClientName.Value = "" Then 
    MsgBox "Please enter Client Name", vbExclamation, "ROI" 
    Me.lstClientName.SetFocus 
    Exit Sub 
End If 
'Determine Empty Row 
emptyRow = Worksheets("ROI").Range("A1").CurrentRegion.Rows.Count 
A = txtNoTotalAff.Value 
B = txtActiveAff.Value 
C = txtAvgTraffic.Value 
D = txtConvRate.Value 
E = txtAOV.Value 

Answer = A * B 
Answer2 = Answer * C 
Answer3 = (Answer2 * D) * E 

'Transfer Information 
With Worksheets("ROI").Range("A1") 
.Offset(emptyRow, 0).Value = lstClientName.Value 
.Offset(emptyRow, 1).Value = txtNoTotalAff.Value 
.Offset(emptyRow, 2).Value = txtActiveAff.Value 
.Offset(emptyRow, 3).Value = Answer 
.Offset(emptyRow, 4).Value = txtAvgTraffic.Value 
.Offset(emptyRow, 5).Value = Answer2 
.Offset(emptyRow, 6).Value = txtConvRate.Value 
.Offset(emptyRow, 7).Value = txtAOV.Value 
.Offset(emptyRow, 8).Value = Answer3 
.Offset(emptyRow, 9).Value = txtAffName.Value 

End With 

'Clear the Form 
For Each ctl In Me.Controls 
    If TypeName(ctl) = "TextBox" Or TypeName(ctl) = "ComboBox" Then 
    ctl.Value = "" 
    ElseIf TypeName(ctl) = "CheckBox" Then 
    ctl.Value = False 
    End If 
Next ctl 
End Sub 

나는 변수를 사용하고 각을 계산하도록하거나 필요하거나 내가 원하는 결과를 얻을 수있는 답변 자체를 사용하고 싶습니다.

어떻게하면됩니까?

+1

당신이 여기있는 코드에 어떤 문제가 있습니까? 당신은 당신이 가진 문제 (또는 솔직히, 당신이 해결하려고하는 문제)를 설명하지 못했습니다. –

+0

이 글을 읽으려면 어떻게해야하는지에 대한 몇 가지 차이점이 있습니다. 그 차이점 중 하나의 결과로 오류가 있다고 가정해야합니다. 당신의 잘못은 무엇입니까? – peege

+0

먼저 숫자를 가변적으로 숫자로 변환하지 않고 텍스트를 곱하려고 시도하는 데 문제가 있다고 생각합니다. 게시 한 코드의 논리가 훌륭하고 제대로 작동하는 것처럼 보입니다. – peege

답변

0

숫자 문자 일 수있는 텍스트 문자열을 늘리려고하기 때문에 오류라고 가정합니다. 그들은 숫자로 변환해야합니다. 사용하고있는 숫자의 종류에 따라 Long 형 또는 Double 형을 사용합니다. 정수는 텍스트 상자에서 다양한 사용자 입력에 오류가 발생할 가능성이 큽니다. 이 예제에서 Long을 사용하려고합니다. Integer에 가장 가깝기 때문입니다. 그러나 숫자가 매우 커지거나 소수를 사용하면 Double으로 전환합니다.

코드에 대한 몇 가지 사항을 수정했습니다. 주로 텍스트 상자의 .Text 속성을 가져 와서 Long 변수로 변환합니다. 또한 주소 선언에서 A1에서 Offset을 사용하는 대신 '.Cells (Row, Col)'를 사용하여 주소를 선언하십시오. 일반적으로 논리가 옳은 것처럼 보입니다.

오류를 확인해보십시오.

코드 :

Private Sub cmdAdd_Click() 

Dim emptyRow As Long 
Dim ctl As Control 
Dim A As Long, B As Long, C As Long, D As Long, E As Long 
Dim Answer As Long, Answer2 As Long, Answer3 As Long 

    'Validation 
    If txtNoTotalAff.Text= "" Then 
     MsgBox ("Please enter the Total Number of Affiliates", vbExclamation, "ROI") 
     txtNoTotalAff.SetFocus 
     Exit Sub 
    End If 

    If Me.lstClientName.Value = "" Then 
     MsgBox ("Please enter Client Name", vbExclamation, "ROI") 
     lstClientName.SetFocus 
     Exit Sub 
    End If 

    'Determine Empty Row 
    emptyRow = Sheets("ROI").Range("A" & Rows.count).End(xlUp).row + 1 
    A = CLng(txtNoTotalAff.Text) 
    B = CLng(txtActiveAff.Text) 
    C = CLng(txtAvgTraffic.Text) 
    D = CLng(txtConvRate.Text) 
    E = CLng(txtAOV.Text) 

    Answer = A * B 
    Answer2 = Answer * C 
    Answer3 = (Answer2 * D) * E 

    'Transfer Information 
    Sheets("ROI").Cells(emptyRow, 1) = lstClientName.Text  'Col "A" 
    Sheets("ROI").Cells(emptyRow, 2) = txtNoTotalAff.Text 'Col "B" 
    Sheets("ROI").Cells(emptyRow, 3) = txtActiveAff.Text  'Col "C" 
    Sheets("ROI").Cells(emptyRow, 4) = Answer     'Col "D" 
    Sheets("ROI").Cells(emptyRow, 5) = txtAvgTraffic.Text  'Col "E" 
    Sheets("ROI").Cells(emptyRow, 6) = Answer2    'Col "F" 
    Sheets("ROI").Cells(emptyRow, 7) = txtConvRate.Text  'Col "G" 
    Sheets("ROI").Cells(emptyRow, 8) = txtAOV.Text   'Col "H" 
    Sheets("ROI").Cells(emptyRow, 9) = Answer3    'Col "I" 
    Sheets("ROI").Cells(emptyRow, 10) = txtAffName.Value  'Col "J" 

    'Clear the Form 
    For Each ctl In Me.Controls 
     If TypeName(ctl) = "TextBox" Or TypeName(ctl) = "ComboBox" Then 
     ctl.Value = "" 
     ElseIf TypeName(ctl) = "CheckBox" Then 
     ctl.Value = False 
     End If 
    Next ctl 
End Sub