Cập nhật dữ liệu từ form xuống sheet excel (1 người xem)

  • Thread starter Thread starter bebeen
  • Ngày gửi Ngày gửi

Người dùng đang xem chủ đề này

bebeen

Thành viên thường trực
Tham gia
13/2/12
Bài viết
213
Được thích
24
Em đang gặp khó khăn code cập nhật dữ liệu trên form xuống sheet..! Mọi người giúp em chút nhé!
Mã:
Private Sub cbLuu_Click()
    Dim Arr(1 To 3), k
    Dim Arry(1 To 9), i
    For k = 1 To 3
        Arr(k) = NhapLieu.Controls("TextBox" & k).Value
    Next
    For i = 4 To 9
        Arry(i) = NhapLieu.Controls("txbNhap" & i).Value
    Next
    S1.Range("A65000").End(3).Offset(1).Resize(, 3) = Arr
    S1.Range("D65000").End(3).Offset(1).Resize(, 6) = Arry
End Sub
 
Bạn thử sửa như thế này xem
Mã:
    S1.Range("A65000").End(3).Offset(1).Resize(, 3) = Arr
    S1.Range("D65000").End(3).Offset(1).Resize(, 6) = Arry
thành
Mã:
    S1.Range("A65000").End(3).Offset(1).Resize(3) = Arr
    S1.Range("D65000").End(3).Offset(1).Resize(6) = Arry
 
Upvote 0
Bạn thử sửa như thế này xem
Mã:
    S1.Range("A65000").End(3).Offset(1).Resize(, 3) = Arr
    S1.Range("D65000").End(3).Offset(1).Resize(, 6) = Arry
thành
Mã:
    S1.Range("A65000").End(3).Offset(1).Resize(3) = Arr
    S1.Range("D65000").End(3).Offset(1).Resize(6) = Arry
Tiếc quá em lại không mang theo laptop để thử. Em cũng quên không đính kèm file luôn. Cám ơn anh @dhn46 nhiều!
 
Upvote 0
Em vừa tạo 1 file giả lập như thế này và cho code vào nhưng nó không cho kết quả theo ý muốn. Anh và A/C xem dùm cho em nhé!
 

File đính kèm

Upvote 0
Ah đọc mãi cũng đoán được 1 phần ý của bạn

Có phải ý bạn như thế này không?

1/ Cái Arr là gán giá trị xuống cột A, B, C
2/ Cái Arry là gán giá trị từ cột D tới I.

Nếu đúng vậy thì Code của bạn chưa được bởi. Các mảng bạn khai báo đều là mảng 1 chiều khi dập xuống sheet sẽ theo chiều ngang nên (1) code bạn chỉ hiện giá trị đầu tiên. Còn (2) do bạn bắt đầu nhập từ phần tử thứ 4 của Arry nên đập xuống sheet sẽ bị sai.

Bạn hãy thử Code dạng như thế này, tôi cũng chưa hiểu thật kỹ ý bạn bởi bạn có nhiều text box mà không biết nó sẽ nhận giá trị nào nên đoán thôi nhé

Mã:
Private Sub cbLuu_Click()
    Dim Arr(1 To 9), k As Long, i As Long
    For k = 1 To 3
        Arr(k) = NhapLieu.Controls("TextBox" & k).Value
    Next
    For i = 4 To 9
        Arr(i) = NhapLieu.Controls("txbNhap" & i).Value
    Next
    S1.Range("A65000").End(3).Offset(1).Resize(, 9) = Arr
End Sub
 
Upvote 0
Em vừa tạo 1 file giả lập như thế này và cho code vào nhưng nó không cho kết quả theo ý muốn. Anh và A/C xem dùm cho em nhé!

Vài lời chia sẻ với bạn
1. Nên sửa tên TB lại cho đơn giản code. Ví dụ TB1, TB2... cho đến hết.
2. Phải cho chút ít dữ liệu để mọi người có cái gì đó trực quan chút mà biết đường suy luận để viết code
 
Upvote 0
Em đã sửa thêm Tb cho file và tạo thêm dữ liệu giả lập. Nhờ các anh xem thêm cho em nhé!
 

File đính kèm

Upvote 0
Em đã sửa thêm Tb cho file và tạo thêm dữ liệu giả lập. Nhờ các anh xem thêm cho em nhé!
Code thì có lẻ sẽ được hết nhưng chẳng ai làm kỳ cục vậy cả, đã nhập dữ liệu vào sheet nhưng trên form vẫn giữ nguyên. Vậy form sẽ lớn dần lên à. mỗi lần thêm dữ liệu thì tạo thêm TB sao? và tạo đến khi nào? Và lợi ích của nó??? Nói chung là kỳ cục
 
Upvote 0
Thực ra e muốn tạo thêm TB vậy nhập được nhiều mặt hàng thui ah. Form trước e làm tạm. A xem dùm cho e nhé! Tại chỗ e bình thường phát sinh phiếu khoảng 4 hoặc 5 mặt hàng thui ah!
 
Upvote 0
Để giải quyết vấn đề trước mắt thì bạn tạm dùng cái sau
Mã:
Private Sub cbLuu_Click()
    Dim Arr(1 To 4, 1 To 9), k As Long, i As Long, j As Long
    For i = 1 To 4
        If Me.Controls("TB" & (i - 1) * 6 + 4) <> "" Then
            For k = 1 To 3
                Arr(i, k) = NhapLieu.Controls("TB" & k).Value
            Next
            For j = 4 To 9
                Arr(i, j) = NhapLieu.Controls("TB" & j + (i - 1) * 6).Value
            Next
        End If
    Next
    S1.Range("A65000").End(3).Offset(1).Resize(4, 9) = Arr
End Sub

Bạn nên thay đổi cách nhập liệu chứ như thế này không được tốt lắm. Hơn nữa khi đưa file giả lập bạn nên đưa them mấy cái Label cho dễ hình dung và nhìn ngoại quan đẹp hơn.
 

File đính kèm

Upvote 0
Để giải quyết vấn đề trước mắt thì bạn tạm dùng cái sau
Mã:
Private Sub cbLuu_Click()
    Dim Arr(1 To 4, 1 To 9), k As Long, i As Long, j As Long
    For i = 1 To 4
        If Me.Controls("TB" & (i - 1) * 6 + 4) <> "" Then
            For k = 1 To 3
                Arr(i, k) = NhapLieu.Controls("TB" & k).Value
            Next
            For j = 4 To 9
                Arr(i, j) = NhapLieu.Controls("TB" & j + (i - 1) * 6).Value
            Next
        End If
    Next
    S1.Range("A65000").End(3).Offset(1).Resize(4, 9) = Arr
End Sub

Bạn nên thay đổi cách nhập liệu chứ như thế này không được tốt lắm. Hơn nữa khi đưa file giả lập bạn nên đưa them mấy cái Label cho dễ hình dung và nhìn ngoại quan đẹp hơn.
Quả thực bài này đúng ý em rùi. Cám ơn anh nhiều!
 
Upvote 0
Để giải quyết vấn đề trước mắt thì bạn tạm dùng cái sau
Mã:
Private Sub cbLuu_Click()
    Dim Arr(1 To 4, 1 To 9), k As Long, i As Long, j As Long
    For i = 1 To 4
        If Me.Controls("TB" & (i - 1) * 6 + 4) <> "" Then
            For k = 1 To 3
                Arr(i, k) = NhapLieu.Controls("TB" & k).Value
            Next
            For j = 4 To 9
                Arr(i, j) = NhapLieu.Controls("TB" & j + (i - 1) * 6).Value
            Next
        End If
    Next
    S1.Range("A65000").End(3).Offset(1).Resize(4, 9) = Arr
End Sub

Bạn nên thay đổi cách nhập liệu chứ như thế này không được tốt lắm. Hơn nữa khi đưa file giả lập bạn nên đưa them mấy cái Label cho dễ hình dung và nhìn ngoại quan đẹp hơn.

Anh ơi, em dựa vào code anh và đã làm file mới này. Nhưng kết quả không được như em mong muốn. Không biết code sai chỗ nào? Anh sửa thêm cho em nhé!
Mã:
Private Sub cbLuu_Click()
    Dim Arr(1 To 6, 1 To 11), k As Long, i As Long, j As Long
    For i = 1 To 6
        If Me.Controls("TB" & (i - 1) * 6 + 5) <> "" Then
            For k = 1 To 5
                Arr(i, k) = NhapLieu.Controls("TB" & k).Value
            Next
            For j = 6 To 11
                Arr(i, j) = NhapLieu.Controls("TB" & j + (i - 1) * 6).Value 'Khong biet dong nay sua sao nua!
            Next
        End If
    Next
    S1.Range("A65000").End(3).Offset(1).Resize(6, 11) = Arr
End Sub
Lưu ý: Các combobox em chưa thêm dữ liệu được. Còn ô Cộng và VAT em chỉ để vậy để hiện thị kết quả thui.
 

File đính kèm

Upvote 0
Bạn thay đoạn
Mã:
  For i = 1 To 6
Bằng
Mã:
  For i = 1 To 5

Mà góp ý lại một lần nữa là bạn nên thay đổi kiểu nhập liệu với cách truy xuất trên Form như vậy sẽ rất bất tiện cho những xử lý lần sau.
 
Upvote 0
Bạn thay đoạn
Mã:
  For i = 1 To 6
Bằng
Mã:
  For i = 1 To 5

Mà góp ý lại một lần nữa là bạn nên thay đổi kiểu nhập liệu với cách truy xuất trên Form như vậy sẽ rất bất tiện cho những xử lý lần sau.
Cám ơn anh! Tại em muốn tìm hiều thêm về Form thui ah!
Em sửa theo anh rùi nhưng vẫn không được anh. Nó vẫn cập nhật thêm 1 dòng nữa! Anh xem file đính kèm dùm cho nhe!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Ui ngại nhất là "đoán lỗi", đọc đi đọc lại chẳng biết sai cái gì, nhưng chắc mình đoán đúng ^^. Có phải bạn muốn nhập 1 dòng thì hiện 1 dòng, 2 dòng hiện 2 dòng không? Nếu đúng thế thì bạn sửa như sau
Mã:
Private Sub cbLuu_Click()
    Dim Arr(1 To 6, 1 To 11), k As Long, i As Long, j As Long
    For i = 1 To 5
        If NhapLieu.Controls("TB" & 6 + (i - 1) * 6).Value <> "" Then
            If Me.Controls("TB" & (i - 1) * 6 + 5) <> "" Then
                For k = 1 To 5
                    Arr(i, k) = NhapLieu.Controls("TB" & k).Value
                Next
                For j = 6 To 11
                    Arr(i, j) = NhapLieu.Controls("TB" & j + (i - 1) * 6).Value
                Next
            End If
        End If
    Next
    S1.Range("A65000").End(3).Offset(1).Resize(6, 11) = Arr
End Sub
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom