返回列表 上一主題 發帖

[發問] 各位先進大家好,有個小問題想問

[發問] 各位先進大家好,有個小問題想問

各位先進您們好:

小弟最近自學了excel中的vba來寫一些程式,最近遇到幾個問題想請教
先附上我寫的程式碼

Sub firstrecord()
    '將儲存格A3編號為1'
    Worksheets("salary").Range("A3").Value = "1"
   
    '將應支金額填入,並相對應excel的儲存格'
    Worksheets("salary").Range("B3").Value = UserForm1.Textbox1.Text
    Worksheets("salary").Range("C3").Value = UserForm1.TextBox2.Text
    Worksheets("salary").Range("D3").Value = UserForm1.TextBox3.Text
    Worksheets("salary").Range("E3").Value = UserForm1.TextBox4.Text
    Worksheets("salary").Range("F3").Value = UserForm1.TextBox5.Text
    Worksheets("salary").Range("G3").Value = UserForm1.TextBox6.Text
    Worksheets("salary").Range("H3").Value = UserForm1.TextBox7.Text
    Worksheets("salary").Range("I3").Value = UserForm1.TextBox8.Text
    Worksheets("salary").Range("J3").Value = UserForm1.TextBox9.Text
    Worksheets("salary").Range("K3").Value = UserForm1.TextBox10.Text
   
    '將應扣金額填入,並相對應excel的儲存格'
    Worksheets("salary").Range("M3").Value = UserForm1.TextBox11.Text
    Worksheets("salary").Range("N3").Value = UserForm1.TextBox12.Text
    Worksheets("salary").Range("O3").Value = UserForm1.TextBox13.Text
    Worksheets("salary").Range("P3").Value = UserForm1.TextBox14.Text
    Worksheets("salary").Range("Q3").Value = UserForm1.TextBox15.Text
    Worksheets("salary").Range("R3").Value = UserForm1.TextBox16.Text
    Worksheets("salary").Range("S3").Value = UserForm1.TextBox17.Text
    Worksheets("salary").Range("T3").Value = UserForm1.TextBox18.Text
    Worksheets("salary").Range("U3").Value = UserForm1.TextBox19.Text
    Worksheets("salary").Range("V3").Value = UserForm1.TextBox20.Text
    Worksheets("salary").Range("W3").Value = UserForm1.TextBox21.Text
    Worksheets("salary").Range("X3").Value = UserForm1.TextBox22.Text
   
   
    '將應支金額相加'
    Dim a, b, c, d, e, f, g, h, i, j, k
   
   
    a = Worksheets("salary").Range("D3").Value
    b = Worksheets("salary").Range("E3").Value
    c = Worksheets("salary").Range("F3").Value
    d = Worksheets("salary").Range("G3").Value
    e = Worksheets("salary").Range("H3").Value
    f = Worksheets("salary").Range("I3").Value
    g = Worksheets("salary").Range("J3").Value
    h = Worksheets("salary").Range("K3").Value
    i = b * c
    j = d * e
    k = f * g
   
   
    '顯示出應支金額小計'
    UserForm1.Label19 = a + i + j + k
    UserForm1.Label19 = Worksheets("salary").Range("L3").Value
   
    '顯示各項目小計'
   
    UserForm1.Label35 = i
    UserForm1.Label34 = j
    UserForm1.Label13 = k
   
    '將應扣金額相加'
    Dim aa, bb, cc, dd, ee, ff, gg, hh, ii As Integer
    aa = UserForm1.TextBox11.Text
    bb = UserForm1.TextBox12.Text
    cc = UserForm1.TextBox13.Text
    dd = UserForm1.TextBox14.Text
    ee = UserForm1.TextBox15.Text
    ff = UserForm1.TextBox22.Text
    gg = (UserForm1.TextBox16.Text) * (UserForm1.TextBox17.Text)
    hh = (UserForm1.TextBox18.Text) * (UserForm1.TextBox19.Text)
    ii = (UserForm1.TextBox20.Text) * (UserForm1.TextBox21.Text)
   
    '顯示應扣金額小計'
    Worksheets("salary").Range("Y3").Value = a1 + b1 + c1 + d1 + e1 + f1 + g1 + h1 + i1
    UserForm1.Label42 = Worksheets("salary").Range("Y3").Value
   
    '顯示實支金額'
    UserForm1.Label16 = (UserForm1.Label19) - (UserForm1.Label42)
   
End Sub

我的問題是
1.為什麼我可以直接利用自己設計的表單填完資料,順利將所打的資料填入到excel中,但是在vb環境中,檢查程式碼卻總是出現"資料型態不正確"?是因為我宣告的變數有問題嗎?
2.因為這個算是我土法煉鋼的方式,依照我的邏輯寫出來的,所以感覺有點雜,不知道是否有簡化的方式?

另外如果文章排版或是發問的規則沒有遵守到,還是看不懂我寫的T_T
還煩請各位告知,並不吝指教
謝謝

回復 2# GBKEE


    抱歉,我貼的那個有點錯誤
    附件內容已經把我的excel附上了,自己搞到有點昏頭@_@
    再麻煩各位先進指點一下迷津
    謝謝~

新增薪資表.rar (764.63 KB)

TOP

回復 4# GBKEE


   感謝版主的熱心回覆,試過之後沒有出現之前的問題了,

但是有些語法我還不太清楚要在什麼時候用,以及他的意思,正在補強資料中@_@

另外想問,如果我要在表格中向下新增資料,是否要多一個一個向下偵測最後儲存格的程式

類似像這樣的
ActiveCell.End(xlDown).Select
        LastRec = ActiveCell.Row

還是可以利用for...next...迴圈也能解決?

是否請各位能給點提示就好,剩下的我再去試試看

另外貼程式碼的時候 要選哪個選項才能有左邊的編號?像版主回覆的那樣?是代碼嗎?

謝謝各位

TOP

回復 6# GBKEE


感謝版主大的回覆,重複想了想,也查了資料,
有些地方總算是弄清楚,但還是有幾個問題我想再請教一下

1.有關於迴圈的部分
xRow = Application.CountA(Sh.Range("a:a"))            '有資料儲存格的計數
   With Sh
         .Cells(xRow + 1, "A") = xRow - 1
For i = 1 To 12
            '將應支金額填入,並相對應excel的儲存格' 1-10
            If i <= 10 Then .Cells(xRow + 1, "A").Offset(, i) = UserForm1.Controls("Textbox" & i)
            '將應扣金額填入,並相對應excel的儲存格' 11-22
            .Cells(xRow + 1, "M").Offset(, i - 1) = UserForm1.Controls("Textbox" & i + 10)
  Next
    End With

我可以將它解釋成
"當 i 小於等於10,儲存格會從("A & xRow+1)為起始點,向右移動 i 格,並且將 userfome1中第 i 個textbox的內容填入 "
但是下一句將這樣邏輯套用進去就滿奇怪?
所以不知道是不是我的認知有錯誤,是否能請各位大大幫我解釋一下,謝謝

2.當我在計算小計的時候,原本的程式碼如下:
  Sh.Range("L3").Value = a + b + c + d + e
        .Label19 = Sh.Range("L3")

但這樣不管輸入幾個人的資料,小計只會出現在L3這個
因此我作了以下修改:
sh.Range("L" & xRow + 1) = a + b + c + d + e
        .Label19 = sh.Range("L" & xRow + 1)

這樣就把問題解決了,但是我不懂的是,在寫.Cells()和.Range()儲存格方式是否有不同?
.Cell(xRow+1, "A")和.Range("A" & xRow+1)這兩者所代表的意思也不同嗎?
因為當我把前面寫.Cell儲存格的方式,寫入.Range中,也就是.Range(xRow+1, "A")
會出現
"執行階段錯誤1004,應用程式或物件定義的錯誤"
意思就是指我對.Range的寫法錯誤了嗎?

恩,以上兩個問題,還請大家不吝指教
如果問的問題過於淺顯,還是各位大大見諒

謝謝

TOP

回復 8# GBKEE

感謝版主的細心地回覆

本來剛剛要問的迴圈問題,想說再看一次

結果就忽然看懂了,不枉我之前想到腦袋快燒焦

關於迴圈

只是我後面的敘述沒有一起看,以為是分段的

另外後面幫我補充的我也記下來了

再次感謝

現在正在從版上學習更多用法

希望之後有問題,還請各位大大幫小弟解答

謝謝~

TOP

        靜思自在 : 【行善要及時】行善要及時,功德要持續。如燒開水一般,未燒開之前千萬不要停熄火候,否則重來就太費事了。
返回列表 上一主題