Board logo

標題: vba瘦身,感恩 [打印本頁]

作者: sillykin    時間: 2015-9-1 12:26     標題: vba瘦身,感恩

Private Sub CommandButton1_Click()
Sheets("工作表3").Select
Label25 = [B7]
'Sheets("工作表3").Select
If [J11] = 1 Then
    OptionButton1 = False
    OptionButton2 = False
    OptionButton3 = False
    OptionButton4 = True
ElseIf [I11] = 1 Then
   OptionButton1 = False
    OptionButton2 = False
    OptionButton3 = True
    OptionButton4 = False
ElseIf [H11] = 1 Then
     OptionButton1 = False
    OptionButton2 = True
    OptionButton3 = False
    OptionButton4 = False
ElseIf [G11] = 1 Then
   
    OptionButton1 = True
    OptionButton2 = False
    OptionButton3 = False
    OptionButton4 = False
End If

Sheets("工作表1").Select

TextBox4 = Round(TextBox1 * 3.3, 0)
Me.TextBox4 = Format(TextBox4, "#,###.##")
TextBox5 = Round(TextBox2 * 3.3, 0)
Me.TextBox5 = Format(TextBox5, "#,###.##")
If TextBox6 < 0 Then
TextBox6 = 0
Else
TextBox6 = Round(TextBox4 / TextBox5, 2)
Me.TextBox6 = Format(TextBox6, "#,###.##")
End If


Private Sub TextBox15_Change()
    Sheets("工作表3").Select
    [C3] = TextBox15
    Sheets("工作表1").Select
      
   
End Sub

Private Sub TextBox16_Change()
Sheets("工作表3").Select
[C4] = TextBox16
Sheets("工作表1").Select
End Sub

Private Sub TextBox17_Change()
Sheets("工作表3").Select
    [C5] = TextBox17
Sheets("工作表1").Select
End Sub
作者: GBKEE    時間: 2015-9-1 16:28

回復 1# sillykin
試試看
  1. Option Explicit
  2. Private Sub CommandButton1_Click()
  3.     With Sheets("工作表3")  '不必Select來Select去
  4.         OptionButton4 = .[J11] = 1
  5.         OptionButton3 = .[I11] = 1
  6.         OptionButton2 = .[H11] = 1
  7.         OptionButton1 = .[G11] = 1
  8.     End With
  9. End Sub
複製代碼

作者: sillykin    時間: 2015-9-1 17:49

回復 2# GBKEE


    謝謝大大的回覆,感覺好短...
不好意思在請教Private Sub TextBox16_Change()
Sheets("工作表3").Select
[C4] = TextBox16
Sheets("工作表1").Select
End Sub

Private Sub TextBox17_Change()
Sheets("工作表3").Select
    [C5] = TextBox17
Sheets("工作表1").Select
End Sub
上述沒更好的方法嗎???
作者: GBKEE    時間: 2015-9-1 19:45

回復 3# sillykin
同樣的不必Select來Select去,試看看。
作者: sillykin    時間: 2015-9-2 11:41

謝謝大大的指導,感恩
作者: sillykin    時間: 2015-9-2 18:09

回復 5# sillykin

大大不好意思..在請教一下
Private Sub CommandButton3_Click()
Dim t As Integer, v1 As Integer

For t = 1 To 17


Range("C" & t + 3).Value = FormatNumber(Round(Range("A" & t + 3).Value * 3.3, 1))
Range("D" & t + 3).Value = FormatNumber(Round(Range("B" & t + 3).Value * 3.3, 1))
If Range("D" & t + 3) <> 0 Then
  Range("E" & t + 3) = FormatNumber(Round(Range("C" & t + 3) / Range("D" & t + 3), 2))
  Else
  Range("E" & t + 3).Value = ""
  End If
  
'================================================================================
   '20年以下
    If Range("A" & t + 3) = "" Then
        Range(("C" & t + 3), ("E" & t + 3)) = ""
      
        Exit Sub
    End If
   
    If (Range("E" & t + 3) > 3) Then
         Range("F" & t + 3) = FormatNumber(Round((Range("C" & t + 3) * 0.4) - (Range("D" & t + 3) * 0.7), 0))
         
    ElseIf (Range("E" & t + 3) > 2) Then
   
         Range("F" & t + 3) = FormatNumber(Round((Range("C" & t + 3) * 0.3) - (Range("D" & t + 3) * 0.4), 0))
        
    ElseIf (Range("E" & t + 3) > 1) Then
   
         Range("F" & t + 3) = FormatNumber(Round((Range("C" & t + 3) - Range("D" & t + 3)) * 0.2, 0))
        
    ElseIf (Range("E" & t + 3) <= 1) Then
         Range("F" & t + 3) = 0
    End If
   
   
'================================================================================
   '逾20~30年
    If Range("A" & t + 3) = "" Then
         Range(("C" & t + 3), ("E" & t + 3)) = ""
        Exit Sub
    End If
   
    If (Range("E" & t + 3) > 3) Then
         Range("G" & t + 3) = FormatNumber(Round((Range("C" & t + 3) * 0.36) - (Range("D" & t + 3) * 0.6), 0))
         
    ElseIf (Range("E" & t + 3) > 2) Then
   
         Range("G" & t + 3) = FormatNumber(Round((Range("C" & t + 3) * 0.28) - (Range("D" & t + 3) * 0.36), 0))
        
    ElseIf (Range("E" & t + 3) > 1) Then
   
         Range("G" & t + 3) = FormatNumber(Round((Range("C" & t + 3) - Range("D" & t + 3)) * 0.2, 0))
        
     ElseIf (Range("E" & t + 3) <= 1) Then
         Range("G" & t + 3) = 0
    End If
  
'================================================================================
   '逾30~40年
    If Range("A" & t + 3) = "" Then
        Range(("C" & t + 3), ("E" & t + 3)) = ""
        Exit Sub
    End If
   
    If (Range("E" & t + 3) > 3) Then
         Range("H" & t + 3) = FormatNumber(Round((Range("C" & t + 3) * 0.34) - (Range("D" & t + 3) * 0.55), 0))
         
    ElseIf (Range("E" & t + 3) > 2) Then
   
         Range("H" & t + 3) = FormatNumber(Round((Range("C" & t + 3) * 0.27) - (Range("D" & t + 3) * 0.34), 0))
        
    ElseIf (Range("E" & t + 3) > 1) Then
   
         Range("H" & t + 3) = FormatNumber(Round((Range("C" & t + 3) - Range("D" & t + 3)) * 0.2, 0))
        
     ElseIf (Range("E" & t + 3) <= 1) Then
         Range("H" & t + 3) = 0
    End If
'================================================================================
   '逾40年以上
    If Range("A" & t + 3) = "" Then
         Range(("C" & t + 3), ("E" & t + 3)) = ""
        Exit Sub
    End If
   
    If (Range("E" & t + 3) > 3) Then
         Range("I" & t + 3) = FormatNumber(Round((Range("C" & t + 3) * 0.32) - (Range("D" & t + 3) * 0.5), 0))
         
    ElseIf (Range("E" & t + 3) > 2) Then
   
         Range("I" & t + 3) = FormatNumber(Round((Range("C" & t + 3) * 0.26) - (Range("D" & t + 3) * 0.32), 0))
        
    ElseIf (Range("E" & t + 3) > 1) Then
   
         Range("I" & t + 3) = FormatNumber(Round((Range("C" & t + 3) - Range("D" & t + 3)) * 0.2, 0))
        
     ElseIf (Range("E" & t + 3) <= 1) Then
         Range("I" & t + 3) = 0
    End If
   
   
'================================================================================
   '增值稅總計
    If Range("J" & t + 3) = "" Then
         Range(("K" & t + 3)) = ""
        Else
         Range("K" & t + 3) = FormatNumber(Round((Range("F" & t + 3)) * (Range("J" & t + 3)), 1))
         Range("L" & t + 3) = FormatNumber(Round((Range("G" & t + 3)) * (Range("J" & t + 3)), 1))
         Range("M" & t + 3) = FormatNumber(Round((Range("H" & t + 3)) * (Range("J" & t + 3)), 1))
         Range("N" & t + 3) = FormatNumber(Round((Range("I" & t + 3)) * (Range("J" & t + 3)), 1))
         
    End If
   
Next

End Sub
為何在
A4儲存格輸入181,000
B4儲存格輸入140,625
--------------------
C4儲存格答案為597,300
D4儲存格答案為464,062(正確為464,063)
F4儲存格答案為26,648(正確為26,647)
不知要如何處置,有高手協助嗎???
作者: sillykin    時間: 2015-9-4 17:29

如果用下面函數計算
=TEXT(B1*3.3,"#,###")
vba要如何下呢???
作者: Joforn    時間: 2015-9-10 12:40

本帖最後由 Joforn 於 2015-9-10 12:42 編輯

回復 7# sillykin
Format$([B1] * 0.33, "#,##0") '这个会保留0,不保留0的话改成Format$([B1] * 0.33, "#,###")
作者: Joforn    時間: 2015-9-10 12:45

回復 7# sillykin
也可以使用下面的:
FormatNumber([B3], 0)
作者: sillykin    時間: 2015-9-10 23:57

回復 9# Joforn


    謝謝大大之回覆,但還是四捨五入因素,造成計算之銀誤,
作者: sillykin    時間: 2016-2-13 20:28

回復 10# sillykin

不好意思..想在請問vba瘦身

Private Sub OptionButton1_Click()
If OptionButton1 = True Then
[B58].VALUE = 1
[C58] = "國防事業"
End If
Unload Me
UserForm40.Show

End Sub

Private Sub OptionButton2_Click()
If OptionButton2 = True Then
[B58].Value = 2
[C58] = "警察單位"
End If
Unload Me
UserForm40.Show

End Sub

Private Sub OptionButton3_Click()
If OptionButton3 = True Then
[B58].Value = 3
[C58] = "其他公共行政類"
End If
Unload Me
UserForm40.Show
End Sub


Private Sub OptionButton4_Click()
If OptionButton4 = True Then
[B58].Value = 4
[C58] = "教育類"
End If
Unload Me
UserForm40.Show
End Sub


Private Sub OptionButton5_Click()
If OptionButton5 = True Then
[B58].Value = 5
[C58] = "學生"
End If
Unload Me
UserForm40.Show
End Sub


Private Sub OptionButton6_Click()
If OptionButton6 = True Then
[B58].Value = 6
[C58] = "工、商及服務類"
End If
Unload Me
UserForm40.Show
End Sub


Private Sub OptionButton7_Click()
If OptionButton7 = True Then
[B58].Value = 7
[C58] = "農林漁牧類"
End If
Unload Me
UserForm40.Show
End Sub

Private Sub OptionButton8_Click()
If OptionButton8 = True Then
[B58].Value = 8
[C58] = "礦石及土石採取業"
End If
Unload Me
UserForm40.Show
End Sub


Private Sub OptionButton9_Click()
If OptionButton9 = True Then
[B58].Value = 9
[C58] = "製造業"
End If
Unload Me
UserForm40.Show
End Sub


Private Sub OptionButton10_Click()
If OptionButton10 = True Then
[B58].Value = 10
[C58] = "水電燃氣業"
End If
Unload Me
UserForm40.Show
End Sub


Private Sub OptionButton11_Click()
If OptionButton11 = True Then
[B58].Value = 11
[C58] = "營造業"
End If
Unload Me
UserForm40.Show
End Sub


Private Sub OptionButton12_Click()
If OptionButton12 = True Then
[B58].Value = 12
[C58] = "批發及零售業"
End If
Unload Me
UserForm40.Show
End Sub
Private Sub OptionButton13_Click()
If OptionButton13 = True Then
[B58].Value = 13
[C58] = "住宿及餐飲業"
End If
Unload Me
UserForm40.Show
End Sub


Private Sub OptionButton14_Click()
If OptionButton14 = True Then
[B58].Value = 14
[C58] = "運輸、倉儲及通信業"
End If
Unload Me
UserForm40.Show
End Sub


Private Sub OptionButton15_Click()
If OptionButton15 = True Then
[B58].Value = 15
[C58] = "金融及保險業"
End If
Unload Me
UserForm40.Show
End Sub


Private Sub OptionButton16_Click()
If OptionButton16 = True Then
[B58].Value = 16
[C58] = "不動產及租賃業"
End If
Unload Me
UserForm40.Show
End Sub


Private Sub OptionButton17_Click()
If OptionButton17 = True Then
[B58].Value = 17
[C58] = "專業服務業"
End If
Unload Me
UserForm40.Show
End Sub
Private Sub OptionButton18_Click()
If OptionButton18 = True Then
[B58].Value = 18
[C58] = "技術服務業"
End If
Unload Me
UserForm40.Show
End Sub


Private Sub OptionButton19_Click()
If OptionButton19 = True Then
[B58].Value = 19
[C58] = "無業、家管、退休人員等"
End If
Unload Me
UserForm40.Show
End Sub


Private Sub OptionButton20_Click()
If OptionButton20 = True Then
[B58].Value = 20
[C58] = "不動非法人組織授信戶負責人"
End If
Unload Me
UserForm40.Show
End Sub
'===============================================================================





Private Sub UserForm_Click()

End Sub
作者: GBKEE    時間: 2016-2-14 15:10

本帖最後由 GBKEE 於 2016-2-14 15:38 編輯

回復 11# sillykin
空白的表單模組程式碼
  1. Option Explicit
  2. Dim xAr(), xClass() As New OP_Class
  3. Private Sub UserForm_Initialize()
  4.      Dim xLeft As Integer, xTop As Integer, i As Integer, Form_Height As Integer, Form_Width As Integer
  5.      Dim OB As Object
  6.      xAr = Array("國防事業", "警察單位", "其他公共行政類", "教育類", "學生", "工、商及服務類", "農林漁牧類", "AAA", "BBBB", "CCCC", "DDDDD", "EEE")
  7.      'xAr 也可以是工作表上單欄或單列的範圍
  8.      ReDim xClass(1 To UBound(xAr) + 1)
  9.      xLeft = 10: xTop = 10
  10.      For i = 1 To UBound(xAr) + 1
  11.         Set OB = Controls.Add("Forms.OptionButton.1", "OptionButton" & i)
  12.         
  13.         Set xClass(i).Op = OB
  14.         With OB
  15.             .Caption = xAr(i - 1)
  16.             .Tag = i
  17.             .Left = xLeft
  18.             .Top = xTop
  19.             .Width = 150
  20.             .Height = 20
  21.             If i Mod 10 Then
  22.                  xTop = xTop + 10 + .Height
  23.                  Form_Height = IIf(Form_Height < xTop, xTop + 10 + .Height * 2, Form_Height)
  24.             Else
  25.                 xTop = 10
  26.                 xLeft = xLeft + 10 * 2 + .Width
  27.                 Form_Width = IIf(Form_Width < xLeft, Form_Width + xLeft + .Width, Form_Width)
  28.             End If
  29.         End With
  30.      Next
  31.      '調整Form的高度,寬度
  32.      Height = Form_Height
  33.      Width = Form_Width
  34. End Sub
複製代碼
物件模組的程式碼
  1. Option Explicit
  2. Public WithEvents Op As MSForms.OptionButton
  3. Private Sub Op_Click()
  4.     'OptionButton
  5.     With Op
  6.         MsgBox .Name & vbLf & .Caption
  7.         [B58] = .Tag
  8.         [C58] = .Caption
  9.         Unload .Parent
  10.     End With
  11.     UserForm40.Show
  12. End Sub
複製代碼
[attach]23268[/attach]
作者: sillykin    時間: 2016-2-14 15:44

回復 12# GBKEE


    謝謝G大的回覆..




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)