Hỏi về lưu dữ liệu kết quả marco (1 người xem)

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

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

nthxe

Trình còi
Tham gia
14/6/08
Bài viết
260
Được thích
114
Kính gửi các anh chị em,
Tôi là newbaby về marco nên có thắc mắc cơ bản muốn hỏi các anh các chị.

Trong Marco của tôi, tôi muốn kết quả dữ liệu các lần nhập được hỏi xem có lưu lại hay không? Nếu có thì được lưu ở 1 sheet khác. Mong các ACE giúp.

Các message hiển thị tiếng Việt như thế nào nhỉ?
 

File đính kèm

Kính gửi các anh chị em,
Tôi là newbaby về marco nên có thắc mắc cơ bản muốn hỏi các anh các chị.

Trong Marco của tôi, tôi muốn kết quả dữ liệu các lần nhập được hỏi xem có lưu lại hay không? Nếu có thì được lưu ở 1 sheet khác. Mong các ACE giúp.

Các message hiển thị tiếng Việt như thế nào nhỉ?

Bạn dùng thử với đoạn code sau,

Mã:
Sub TestInputBox()
Dim ws As Worksheet:    Set ws = Sheets("Sheet2")
Title = Range("L1")
ws.Range("C3:C6").Clear
tempKB = Application.InputBox(Range("L2"), Title)
        If tempKB = False Then GoTo Thoat 'khi dung` Cancel
        ws.Cells(2, 3).Value = tempKB
tempA1 = Application.InputBox(Range("L3"), Title)
        If tempA1 = False Then GoTo Thoat
        ws.Cells(3, 3).Value = tempA1
tempA2 = Application.InputBox(Range("L4"), Title)
        If tempA2 = False Then GoTo Thoat
        ws.Cells(4, 3).Value = tempA2
tempA3 = Application.InputBox(Range("L5"), Title)
        If tempA3 = False Then GoTo Thoat
        ws.Cells(5, 3).Value = tempA3
'...
MsgBox ("TestInputBox xong")
    Set ws = Nothing
    Exit Sub
Thoat:
ws.Range("C3:C6").Clear
Set ws = Nothing
End Sub

Link: https://www.mediafire.com/?1t0ws8k11n4b58o
 
Lần chỉnh sửa cuối:
Upvote 0
Dear all,

Cảm ơn bạn Phucbugis đã trợ giúp, tớ chưa rành lắm về VBA nên muốn hỏi kỹ hơn để học hỏi.

1, Code của bạn đã chạy tốt nhưng tớ không hiểu công thức tính toán bạn để ở đâu? Nếu muốn sửa công thức, tớ vào đâu để sửa?

2, Nếu mới nhập đến A2, không muốn đưa các giá trị A3 trở về sau vào tính toán thì làm thế nào để chương trình hiểu chỉ tính toán ở các số đã nhập đó thôi, không tính từ A3 trở đi?

3, Khi có kết quả hiển thị gồm Y và các giá trị a đã nhập, muốn chọn lưu kết quả ra 1 file excel khác thì làm thế nào? không phải kết quả nào cũng lưu, chỉ cái nào cần mới lưu bạn nhé.

Cảm ơn mọi người nhiều
 
Lần chỉnh sửa cuối:
Upvote 0
Dear all,

Cảm ơn bạn Phucbugis đã trợ giúp, tớ chưa rành lắm về VBA nên muốn hỏi kỹ hơn để học hỏi.

1, Code của bạn đã chạy tốt nhưng tớ không hiểu công thức tính toán bạn để ở đâu? Nếu muốn sửa công thức, tớ vào đâu để sửa?
mình đặt dấu nháy '... là để cho bạn tự ráp tiếp code của bạn vào đó chứ :-=

2, Nếu mới nhập đến A2, không muốn đưa các giá trị A3 trở về sau vào tính toán thì làm thế nào để chương trình hiểu chỉ tính toán ở các số đã nhập đó thôi, không tính từ A3 trở đi?
Mình dựa vào code cũ của bạn và sửa lại theo yêu cầu này

Mã:
Sub TestInputBox()
Dim ws As Worksheet:    Set ws = Sheets("Sheet2")
Title = Range("L1")


INPUT_VALUE:
    ws.Range("C2:C6").ClearContents
    
    tempKB = Application.InputBox(Range("L2"), Title)
        If tempKB = False Then GoTo Thoat 'khi dung` Cancel
        ws.Cells(2, 3).Value = tempKB
    
    tempA1 = Application.InputBox(Range("L3"), Title)
        If tempA1 = False Then GoTo Thoat
        ws.Cells(3, 3).Value = tempA1
    tempA2 = Application.InputBox(Range("L4"), Title)
        If tempA2 = False Then GoTo Stop1
        ws.Cells(4, 3).Value = tempA2
    tempA3 = Application.InputBox(Range("L5"), Title)
        If tempA3 = False Then GoTo Stop1
        ws.Cells(5, 3).Value = tempA3
        
Stop1:
    If IsNumeric(tempA1) = True Or IsNumeric(tempA2) = True Or IsNumeric(tempA3) = True Then
QUESTION:
        answer = Application.InputBox(Range("L7") & vbNewLine & Range("L8") & vbNewLine & Range("L9"))
        If UCase(answer) = "A" Then
            GoTo CALCULATE
        ElseIf UCase(answer) = "B" Then
            GoTo INPUT_VALUE
        Else
            GoTo QUESTION 'hoac goto Thoat 'khi dung` Cancel
        End If
    Else
        GoTo Stop2
    End If


CALCULATE:
    If tempA3 = False Then
        ws.Cells(6, 3).Value = 1 + 2 * tempA1 + 3 * tempA2
    ElseIf temA2 = False Then
        ws.Cells(6, 3).Value = 1 + 2 * tempA1
    Else
        ws.Cells(6, 3).Value = 1 + 2 * tempA1 + 3 * tempA2 + 4 * tempA3
    End If
    
Stop2:
    MsgBox ("TestInputBox xong")
    Set ws = Nothing
    Exit Sub
    
Thoat:
ws.Range("C2:C6").ClearContents
Set ws = Nothing
End Sub

vấn đề 3 thì mình chưa hiểu lắm --> chưa thể giúp bạn được.

góp ý thêm: tại sao bạn ko làm trên 1 Userform ---> có thể bao quát hết các thông tin ---> dễ xử lý hơn nữa. :-=

Link: https://www.mediafire.com/?uwvbcjrmq5gywre
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn bạn đã trả lời rất nhanh,

vẫn biết VBA là công cụ hữu dụng nhưng chưa có điều kiện học bài bản, chỉ học lỏm nên nhìn vào trợ giúp của bạn thấy bản thân tớ không thể không học bài bản ngay được.

Có lẽ tớ viết lại yêu cầu từ đầu rồi bạn giúp tớ coding có khi còn hiệu quả hơn

Tớ có hàm số:

Y = 1 + 2*a1 + 3*a2 + 4*a3 + 5*a4 + 6*a5 + 7*a6


yêu cầu chương trình:

Nhập lần lượt các giá trị a để tính ra giá trị Y theo công thức trên

Trong lúc nhập, giả sử đến a3 mà muốn tính luôn Y thì nhập vào hộp thoại của a4 1 ký tự nào đó, X chẳng hạn. Chương trình sẽ hỏi có chắc là muốn tính Y từ các giá trị đã nhập không? Nếu có thì nhập C để chương trình tính Y luôn, còn không thì nhập K để tiếp tục nhập a4

Khi tính toán xong, kết quả hiển thị luôn tại sheet đó gồm Y và các giá trị a đã nhập.

Muốn export các giá trị hiển thị kia ra 1 file khác thì kích vào 1 nút lệnh nào đó chẳng hạn chương trình mới export.

Bạn cho xin code của bạn hoàn toàn nhé,

Ông viết sao cho đơn giản kiểu như file trước để tôi hiểu được và có thể thêm, bớt các biến a hoặc sửa công thức được nhé.

Cố gắng giúp tôi trong tối nay nhé
 
Upvote 0
Cảm ơn bạn đã trả lời rất nhanh,
Có lẽ tớ viết lại yêu cầu từ đầu rồi bạn giúp tớ coding có khi còn hiệu quả hơn

Tớ có hàm số:
Y = 1 + 2*a1 + 3*a2 + 4*a3 + 5*a4 + 6*a5 + 7*a6

yêu cầu chương trình:

Nhập lần lượt các giá trị a để tính ra giá trị Y theo công thức trên

Trong lúc nhập, giả sử đến a3 mà muốn tính luôn Y thì nhập vào hộp thoại của a4 1 ký tự nào đó, X chẳng hạn. Chương trình sẽ hỏi có chắc là muốn tính Y từ các giá trị đã nhập không? Nếu có thì nhập C để chương trình tính Y luôn, còn không thì nhập K để tiếp tục nhập a4

Khi tính toán xong, kết quả hiển thị luôn tại sheet đó gồm Y và các giá trị a đã nhập.

Muốn export các giá trị hiển thị kia ra 1 file khác thì kích vào 1 nút lệnh nào đó chẳng hạn chương trình mới export.
...

chương trình bạn đang làm bắt buộc dùng InputBox hả, hay chỉ cần ra tính toán với kết quả Y thôi --=0
 
Upvote 0
Vâng, tôi mới biết có inputbox, bạn có cách nào khác thì chỉ giúp, miễn là tiện dụng nhất cho người dùng.

Hoặc không nhập ký tự X thì có thể gõ 1 phím nào đó, ý bạn có phải vậy không?

Thông cảm cho các câu hỏi ngô nghê vì tôi trình còi mà
 
Lần chỉnh sửa cuối:
Upvote 0
Vâng, tôi mới biết có inputbox, bạn có cách nào khác thì chỉ giúp, miễn là tiện dụng nhất cho người dùng.

Hoặc không nhập ký tự X thì có thể gõ 1 phím nào đó, ý bạn có phải vậy không?

Thông cảm cho các câu hỏi ngô nghê vì tôi trình còi mà

Khi viết chương trình của bạn mà dùng InputBox ---> rất bất tiện. Mình chuyển sang nhập trên Userform.

bạn mở file, open Form và nhập liệu thử coi. :-=

Link: https://www.mediafire.com/?0slnhcnjba3btbi
 
Lần chỉnh sửa cuối:
Upvote 0
Tks bạn, nhưng khi mình muốn thay đổi hàm, thay đổi biến a1, a2,... thì vào đâu để sửa?
 
Upvote 0
Tks bạn, nhưng khi mình muốn thay đổi hàm, thay đổi biến a1, a2,... thì vào đâu để sửa?

bạn vào trong Userform1 tại Private Sub tinhketqua()

và sửa ở đoạn cuối:
Mã:
...
tbx_ketqua = Format(1 + 2 * A1 + 3 * A2 + 4 * A3 + 5 * A4 + 6 * A5 + 7 * A6, "#,##0")
 
Upvote 0
Cái này mình mới biết, hay hơn hẳn, nếu muốn thêm biến thì cần thêm các câu lệnh nào hả bạn?
 
Upvote 0
Bài này làm form là dùng dao mổ trâu để cắt cổ gà.

Đúng nhất là dùng inputbox. Nhưng thay vì input mỗi hệ số 1 lần thì người ta input luôn một lần, các số cách nhau bằng dấu cộng (+)

ví dụ nhập a1=123, a2=456, a3=789, a4=21 thì gõ 123+456+789+21

Code tách chuỗi, thấy ra mảng 4 chuỗi thì tự động biết là dừng ở a4

Lý do dùng "+" để cách là vì dấu này nằm ngay trên bàn phím số, gõ rất lẹ (có nghĩa là dùng +-*/ đều được)
 
Upvote 0
Cái này mình mới biết, hay hơn hẳn, nếu muốn thêm biến thì cần thêm các câu lệnh nào hả bạn?

nếu biến đó là 1 textbox (giống như các textbox1, 2,...,6) thì bạn cần phải khai báo thêm code cho textbox vừa tạo tại các vị trí:

Private Sub tinhketqua()
Private Sub CommandButton1_Click()
Private Sub TextBox(mới)_Change()

'- - - - -
bạn down lại file tại #8, mình vừa mới thêm phần Export ketqua.
 
Lần chỉnh sửa cuối:
Upvote 0
Bài này làm form là dùng dao mổ trâu để cắt cổ gà.
Đúng nhất là dùng inputbox. Nhưng thay vì input mỗi hệ số 1 lần thì người ta input luôn một lần, các số cách nhau bằng dấu cộng (+)
ví dụ nhập a1=123, a2=456, a3=789, a4=21 thì gõ 123+456+789+21
Code tách chuỗi, thấy ra mảng 4 chuỗi thì tự động biết là dừng ở a4
Lý do dùng "+" để cách là vì dấu này nằm ngay trên bàn phím số, gõ rất lẹ (có nghĩa là dùng +-*/ đều được)

- mình nghĩ bài toán của bác nthxe ko đơn giản là +,-,*,/ --=0.

- nếu dùng InputBox gộp chung như bác nói, vậy có thể kiểm tra từng biến bên trong là số hay là chữ ko? (trường hợp người dùng nhập số lẽ "." hoặc "," đó)
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn ơi, tớ có đổi lại vị trí trả kết quả từ G14:G20 sang B7:B13 cho dễ nhìn, tất cả các chỗ có G14:G20 đều đã đổi hết, sao export vẫn theo địa chỉ cũ nhỉ? Còn phải sửa chỗ nào nữa hả bạn?
 
Upvote 0
Thử làm 1 cách khác tính tổng trên textboxes bằng Class.
 

File đính kèm

Upvote 0
Bạn ơi, tớ có đổi lại vị trí trả kết quả từ G14:G20 sang B7:B13 cho dễ nhìn, tất cả các chỗ có G14:G20 đều đã đổi hết, sao export vẫn theo địa chỉ cũ nhỉ? Còn phải sửa chỗ nào nữa hả bạn?

là do sheet ketqua lấy dữ liệu từ vùng có name = ArrKetqua, bạn vào sửa lại địa chỉ name là được.

code đó nằm ở đoạn:
Mã:
Private Sub CommandButton2_Click()
    Range("ArrKetqua").Copy
    Sheets("ketqua").Select
    Range("A1").Select
    ActiveSheet.Paste
    
    Sheets("ketqua").Copy
End Sub

'- - - -
To: hoamattroicoi
code của bác viết rất gọn + cao cấp, mình cũng được học nhiều cái mới, rất cảm ơn bạn! --=0
 
Lần chỉnh sửa cuối:
Upvote 0
- mình nghĩ bài toán của bác nthxe ko đơn giản là +,-,*,/
C:\Users\00063658\AppData\Local\Temp\msohtmlclip1\01\clip_image001.gif
.

- nếu dùng InputBox gộp chung như bác nói, vậy có thể kiểm tra từng biến bên trong là số hay là chữ ko? (trường hợp người dùng nhập số lẽ "." hoặc "," đó)

Bài toán chính của chủ thớt nó đơn giản. Nó chỉ là nhập một mảng (0-n) số. Chỉ vì chủ thớt diễn giải nó ra thành rắc rối. Những chi tiết nhập ký tự lằng nhằng là do chủ thớt không biết làm cách nào để chấm dứt sớm: có tất cả n số mà muốn dừng ở k < n thì làm thế nào?

Nếu cần nhâp số lẻ cũng chẳng chết ai. Nếu không muốn nhập dấu chấm thì dùng dấu phẩy, nguời viết code nào không biêt đổi cho đúng kiểu hệ thống thì đừng viết code nữa cho uổng công.

Cách input này không phải của tôi tự chế ra.

Mấy chục năm trước, IBM đã chế ra bàn phím số nằm ở bên phải bàn phím chữ chính là để phục vụ việc input hàng loạt số.
 
Upvote 0

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

Back
Top Bottom