Excel ko lưu định dạng sheet khi mở lại (dữ liệu lấy từ Database)

  • Thread starter Thread starter HideBoy
  • Ngày gửi Ngày gửi
Liên hệ QC

HideBoy

Thành viên thường trực
Tham gia
6/1/08
Bài viết
204
Được thích
413
Nghề nghiệp
Hỏi mình nhé!
Trên VBA mình có vấn đề như sau: Mình kết nối cơ sở dữ liệu Oracle, sau đó, lọc ra được các trường theo điều kiện nào đó, nhưng gặp phải chuyện bực mình là:
1. Định dạng cho cột "số tiền" có kiểu là Number, GroupDigit: 123.456,12
2. Tính tổng số tiền: Cells(8,5).value= "=sum("E1:E7")" kết quả = 100
3. Độ rộng cột = 8 thì tương đương 61 Pixels
Sau khi Save -> Close -> ReOpen thì Sheet đó nó hiện thế này:
1. Định dạng cho cột "số tiền" có kiểu là Number, GroupDigit: Nhưng khi lọc nó hiện ra như kiểu text, không nhóm GroupDigit.
2. Tính tổng số tiền: Cells(8,5).value= "=sum("E1:E7")" kết quả Cells(8,5) là =sum("E1:E7")" không phải là 100.
3. Độ rộng cột = 8 thì lại tương đương 122 Pixels

Cho dù mình không điều chỉnh độ phân giải màn hình hay zoom (vẫn là 100%)
Ai đó chỉ giúp mình xem! Có sheet thì không thay đổi có sheet thì lại bị thế! Thế mới AKAY!

from hai2hai: Lần sau nếu bạn ghi ko rõ tiêu đề thì bài sẽ bị xóa mà ko cần giải thích. Tôi đã phải sửa lại tiêu đề của bạn cho rõ ràng hơn
 
Chỉnh sửa lần cuối bởi điều hành viên:
Câu 1 thì mình chưa biết tại sao?
Câu 2 thì bạn có thể dùng code như sau:
PHP:
Cells(8, 5).Value = Evaluate("=sum(E1:E7)")
Thật sự tình huống này mình chưa hiểu tạo sao? Bạn có thể gửi file lên không?
Thân.
 
Upvote 0
Câu 2 thì bạn có thể dùng code như sau:
PHP:
Cells(8, 5).Value = Evaluate("=sum(E1:E7)")
Thân.
Code trên của Po_Pikachu cho ra kết quả giống như code sau:
PHP:
Cells(8,5).value= "=sum(E1:E7)"
Chỉ khác ở chỗ là code của Po_Pikachu gán thẳng giá trị vào cells(8,5), còn code kia thì gán công thức thẳng vào cells(8,5).

Vấn đề của bạn ấy là chỗ tô đậm màu đỏ, phải bỏ nó đi:
Cells(8,5).value= "=sum("E1:E7")"


To HideBody: Bạn nên đưa cả đoạn code đó lên thì hay hơn!
 
Lần chỉnh sửa cuối:
Upvote 0
Private Sub Cmd_Loc_Click()
On Error GoTo ErrorHandling
Dim ConnStr As String, conn As Object
Dim strSQL As String
Dim rs As Object

Range("A10: I65536").Value = "" ' Khi loc lai dữ liệu phải xóa toàn bộ dl cũ đi!

If Txt_Dfrom.Text = "" Then
df = "01-01-1997"
Else
df = Txt_Dfrom.Text
End If
If Txt_Dto.Text = "" Then
dt = Day(Now()) & "-" & Month(Now()) & "-" & Year(Now())
Else
dt = Txt_Dto.Text
End If
If Txt_Mst.Text = "" Then
tm = ""
Else
tm = " AND(QLT_CTU_HDR.TIN='" & Txt_Mst.Text & "')"
End If
ConnStr = "driver={Microsoft ODBC for Oracle}; server=XXX; uid=XXX_USER; pwd=XXX_PAS"
Set conn = CreateObject("ADODB.Connection")
conn.ConnectionString = ConnStr
conn.Open
strSQL = "SELECT QLT_CTU_HDR.TIN, QLT_CTU_HDR.TEN_DTNT, QLT_CTU_DTL.CCG_MA_CAP, QLT_CTU_DTL.CCG_MA_CHUONG, QLT_CTU_DTL.TMT_MA_MUC, QLT_CTU_DTL.TMT_MA_TMUC, QLT_CTU_HDR.SO_CTU, QLT_CTU_DTL.SO_TIEN/1, QLT_CTU_HDR.NGAY_NOP_KB FROM QLT_OWNER.QLT_CTU_DTL QLT_CTU_DTL, QLT_OWNER.QLT_CTU_HDR QLT_CTU_HDR WHERE (QLT_CTU_HDR.ID = QLT_CTU_DTL.CTH_ID) AND (QLT_CTU_HDR.DCT_LOAI<'3') AND (QLT_CTU_HDR.NGAY_NOP_KB Between '" & df & "' And '" & dt & "')" & tm
Set rs = CreateObject("ADODB.Recordset")
Set rs = conn.Execute(strSQL)
If rs Is Nothing Then
MsgBox "Kh«ng cã b¶n ghi nµo tho¶ m·n!", vbExclamation, gc_Title
Else
'Worksheets.Select
Cells(10, 1).Select
'n = 0
'Do Until n = rs.Fields.Count
'Cells(10, n + 1) = rs.Fields(n).Name
'n = n + 1
'Loop
Cells(10, 1).CopyFromRecordset rs
End If
rs.Close
conn.Close
LastRow = FindLastRow() - 1 ' LastRow bao giê còng tiÕn mét dßng do thuËt to¸n r=r+1 trong hµm FindLastRow
Cells(LastRow + 1, 7).Value = " Tæng"
Cells(LastRow + 1, 8).Value = "= Sum(" & "H10:H" & LastRow & ")"
Rows(LastRow + 1).Font.Bold = True
Exit Sub
ErrorHandling:
MsgBox "Kh«ng kÕt nèi ®&shy;îc d÷ liÖu hoÆc ®iÒu kiÖn nhËp sai.", Title:=gc_Title
End Sub

Đưa code thì đâu có vấn đề gì! Code chạy ngon lành, định dạng cũng ngon lành! nhưng sau đó mở ra thì bị các lỗi như tớ đã nói.
Ví dụ:
Cells(LastRow + 1, 8).Value = "= Sum(" & "H10:H" & LastRow & ")"
Mình viết Function "Lastrow" để tự tìm vị trí dòng dữ liệu cuối cùng để đưa vào công thức tính tổng.
Toàn bộ quá trình từ thiết kế sheet cho đến kết xuất dữ liệu, cộng tổng,.. đều không vấn đề gì. Nhưng khi ghi xong, mở lại file Excel đó! Nó kéo giãn các cột, các Txt, Cmb, Cmd,... Cũng vẫn độ rộng cột là 8 nhưng pixels lại là 122 tăng gấp 2 lần (trước là 61 pixels). Tất cả các xâu ở các cột đều là Text cả, ngay cả khi định dạng lại dữ liệu là Number, GroupDigit nhưng vẫn "trơ" ra là text dù đã F2.
Cells(LastRow + 1, 8) hiện lên xâu "=Sum(H10: Hxxx)" Tìm mãi chưa ra nguyên nhân! Vì có vài sheet thì nó vẫn tính toán ngon lành, nhưng 1,2 sheet thì bị thế! Cáu ghê cơ! Có cái chạy máy mình thì không sao! Đem sang máy khác thì nó lại bị thế! Ngay trên máy mình cũng bị! Không lẽ virus!
 
Lần chỉnh sửa cuối:
Upvote 0
Cells(LastRow + 1, 8) hiện lên xâu "=Sum(H10: Hxxx)" Tìm mãi chưa ra nguyên nhân!
Bạn sửa thử chỗ này xem sao:
[highlight=vb]
Private Sub Cmd_Loc_Click()
'.................................................
Cells(LastRow + 1, 7).Value = "Tæng"
Cells(LastRow + 1, 8).Value = "=Sum(H10:H" & LastRow & ")"
'.................................................
End Sub
[/highlight]

Còn các vấn đề khác, do chưa nắm được cấu trúc dữ liệu nguồn của bạn nên chưa biết. Bạn có thể đưa file excel đã trích xuất lên không?
 
Upvote 0
Cảm ơn bạn!
Nhưng công thức đó chỉ đơn thuần là nối chuỗi, việc đặt dấu "" có quan trọng gì đâu!
Cơ bản là tất cả các tính toán mình đều thành công! nhưng khi mở lại workbook nó lại định dạng là text tất! Lọc lại nó ra số liệu, nhưng các thao tác tính tổng đều bị là Text. Độ rộng thì tăng gấp đôi số pixels.
Trong forum này mình không có quyền post with attachment file, thế mới đau!
hihi!
 
Upvote 0
Trong forum này mình không có quyền post with attachment file, thế mới đau!
Đừng đau, gởi mail cho lão cheettit, (thanhmypham@gmail.com), lão ấy post lên cho.
 
Upvote 0
Mình mất công code hoài mà không hiểu sao nó cứ bị như vậy? Ai từng làm connect với Oracle xin chỉ giáo với ạh! híc híc! Năm hết rồi mà việc vẫn chưa hoàn thành!
Mình soát hết lỗi rồi mà nó vẫn cứ bị vậy! VBA của mình dở quá! híc híc
 
Upvote 0
Ặc ặc! Sau khi mình viết code cho các Cmd, Cmb, Lab, Txt, ... định dạng .Left, .Width thì hết các lỗi đó!
Với lại trong quá trình cài sang các máy trạm khác thì phải nhớ định dạng lại ngày, số,.. theo chuẩn của Vietnam Là hết lỗi! :d
 
Upvote 0
Web KT

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

Back
Top Bottom