Các câu hỏi về mảng trong VBA (Array)

Liên hệ QC

viehoai

Thành viên gắn bó
Tham gia
22/5/09
Bài viết
2,600
Được thích
2,907
Xin các anh chị giúp đỡ Code Gán các giá trị của một Range là các phần tử của Mãng
Ví dụ: Tôi có các giá trị của Range("A1:A10"). Tôi muốn viết code để gán giá trị của các cells từ A1:A10 là các phần tử của Mãng Arr chẳn hạn.
Xin cảm ơn các anh chị
 
...Làm theo hướng của mình thì rắc rối quá, mình nghĩ trong VBA sẽ có build in function / trick giúp chuyện này dễ hơn

Mong mọi người giúp
Cảm ơn
trick là xảo thuật.
rule/procedure/method mới là cách thức. Trong khi đó, kỹ thuật là technique.
Muốn hỏi xảo thuật, kỹ thuật, hay cách thức?
 
Upvote 0
cho em hỏi sao cái này nó không cho ra kết quả đúng của hệ ạ. khi chạy code thì nó hiện thị lỗi. anh chị giúp em với ạ
 

File đính kèm

  • HOI DAP.xlsx
    11.7 KB · Đọc: 10
Upvote 0
Xin chào mọi người
Mình có chút thắc mắc về input cho Textbox trong UserForm
Cho mình hỏi có cách nào set Textbox:
1. Chỉ nhận giá trị số khi đang nhập
2. Tự động điền dấu phẩy cho mỗi ba số được nhập vào

Hai cái trên mình muốn nó theo thời gian thực (real time). Tức nghĩ là:
Giả sử 1: mình nhập "123a" thì khi nhập tới a nó báo error message. Vd "Chỉ nhâp số"
Giả sử 2: mình nhập "123456789" thì khi mình nhập tới số "4", "7" thì trong box tự động điền dấu ","

Nếu làm theo kiểu bị động thì mình làm được. (Bị động tức nhập xong, rồi bấm CommandButton) chạy sub check thì ok rồi. Nhưng làm theo kiểu real-time update này thì mình ko biết làm sao

Anh/chị/em nào cao tay giúp mình một tay với
Cảm ơn
 
Upvote 0
Bạn muốn nhập nó vào mảng hay nhập mảng vào nó?

222580

Ah ý mình là muốn nhập vô vậy nè
Cái 1. Thì mình làm lệnh TextBoxF.Value = Format(TextBoxF.Value, "#,###") có vẻ giải quyết được vấn đề
Còn cái 2. Mình dùng If IsNumeric(TextBoxF.Value) = False Then MsgBox "It must be number" thì kiểu bị phải chọn ok 2 lần ấy
Ví dụ mình nhập "123a" Thì nó hiện ra cái Msgbox bắt nhấn ok hai lần rồi mới cho nhập lại :| Kiểu tới đây mình ko biết là tại sao luôn ấy :|
 
Upvote 0
View attachment 222580

Ah ý mình là muốn nhập vô vậy nè
Cái 1. Thì mình làm lệnh TextBoxF.Value = Format(TextBoxF.Value, "#,###") có vẻ giải quyết được vấn đề
Còn cái 2. Mình dùng If IsNumeric(TextBoxF.Value) = False Then MsgBox "It must be number" thì kiểu bị phải chọn ok 2 lần ấy
Ví dụ mình nhập "123a" Thì nó hiện ra cái Msgbox bắt nhấn ok hai lần rồi mới cho nhập lại :| Kiểu tới đây mình ko biết là tại sao luôn ấy :|
Cho cái kiểm tra số lên trước khi nào mà nó báo không phải dạng số exit sub luôn là được.Nó sẽ không chạy cái format hiểu không ta.
 
Upvote 0
Cho cái kiểm tra số lên trước khi nào mà nó báo không phải dạng số exit sub luôn là được.Nó sẽ không chạy cái format hiểu không ta.
Hình như câu hỏi ở bài #1284 không ăn khớp với vấn đề ở bài #1286. Và cả hai vấn đề đều không thấy chỗ liên quan đến mảng.

Tác giả câu hỏi:
1. Đây là thớt thắc mắc về mảng. Vấn đề của bạn đâu có dính dáng gì đến mảng?
2. Tiếng Việt và tiếng Anh đối với bạn cái nào dễ nói hơn. Nếu viết thuần tiếng Anh, may ra tôi hiểu được.
Which is more natural to you, Vietnamese or English? Perhaps I could understand better if you have your question presented in plain English.
 
Upvote 0
Cho mình hỏi có cách nào set Textbox:
1. Chỉ nhận giá trị số khi đang nhập
...
Hai cái trên mình muốn nó theo thời gian thực (real time). Tức nghĩ là:
Giả sử 1: mình nhập "123a" thì khi nhập tới a nó báo error message. Vd "Chỉ nhâp số"
...

Để chỉ cho phép nhập số không thôi thì bạn dùng sự kiện KeyPress.
Ví dụ:


Mã:
Private Sub txtTextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii >= 48 And KeyAscii <= 57 Then
    'OK - dang nhap so
Else
    KeyAscii = 0
End If
End Sub
 
Upvote 0
Để chỉ cho phép nhập số không thôi thì bạn dùng sự kiện KeyPress.
Ví dụ:
Mã:
Private Sub txtTextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii >= 48 And KeyAscii <= 57 Then
    'OK - dang nhap so
Else
    KeyAscii = 0
End If
End Sub
Để nhập số có phần thập phân và số âm thì làm như nào anh.
Ví dụ nhập số -2.6 (âm hai phẩy sáu).
 
Upvote 0
Để nhập số có phần thập phân và số âm thì làm như nào anh.
Ví dụ nhập số -2.6 (âm hai phẩy sáu).

:) Thêm mã ASCII 45,46 vô. Đổi qua dùng Select Case.

Mã:
Private Sub txtTextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case 48 to 57
    'OK - dang nhap so
Case 45,46
    ' dau -,.
Case Else
    KeyAscii = 0
End Select
End Sub
 
Upvote 0
:) Thêm mã ASCII 45,46 vô. Đổi qua dùng Select Case.

Mã:
Private Sub txtTextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case 48 to 57
    'OK - dang nhap so
Case 45,46
    ' dau -,.
Case Else
    KeyAscii = 0
End Select
End Sub
Có cách nào để mình chỉ nhập được một dấu trừ, một dấu chấm không anh.

222586
 
Upvote 0
Có cách nào để mình chỉ nhập được một dấu trừ, một dấu chấm không anh.

View attachment 222586

Tại gõ nhanh nhanh đi công việc chứ đúng ra còn bẫy lỗi trên nữa. Dùng Instr() để bắt lỗi vị trí dấu - và dấu chấm. Haha...gặp thánh soi... ^,

Mã:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Select Case KeyAscii
    Case 48 To 57
    Case 45
        If InStr(1, TextBox1.Text, "-") > 0 Or Me.TextBox1.SelStart > 0 Then
            KeyAscii = 0
        End If
    Case 46
        If InStr(1, Me.TextBox1.Text, ".") > 0 Then
            KeyAscii = 0
        End If
    Case Else
        KeyAscii = 0
    End Select
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Còn như này thì chỉnh sao anh. Hê hê.

View attachment 222588

Lần này chắc hết lỗi rồi. :)

Mã:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Select Case KeyAscii
    Case 48 To 57
    Case 45
        If InStr(1, TextBox1.Text, "-") > 0 Or TextBox1.SelStart > 0 Then
            KeyAscii = 0
        End If
    Case 46
        If Me.TextBox1.SelStart = 0 Then KeyAscii = 0
        If InStr(1, TextBox1.Text, "-") = 1 And TextBox1.SelStart = 1 Then KeyAscii = 0
        If InStr(1, TextBox1.Text, ".") > 0 Then KeyAscii = 0
    Case Else
        KeyAscii = 0
    End Select
End Sub
 
Upvote 0
Có cách nào để mình chỉ nhập được một dấu trừ, một dấu chấm không anh.
...
Chuyển đổi đơn vị mắc mớ gì phải nhận số âm.

Ngoài ra:
Người ta còn muốn chuyển dạng #,### nữa.
Nếu chỉ nhập 1 lần thì không sao. Nhưng nếu nhập, xong quay lại chỉnh thêm thì bắt buộc phải xét các trường hợp #,##,##,# vân vân
(cách dễ nhất là xoá hết các dấu phẩy, xét xong rồi thêm vào trở lại)

Chả biết tại sao chuyển đổi đơn vị mà cũng phải xét realtime [sic] cho nó mệt.
 
Upvote 0
Chuyển đổi đơn vị mắc mớ gì phải nhận số âm.
Mấy bài em hỏi không liên quan tới bài #1286 đâu anh. :)
Bài đã được tự động gộp:

Lần này chắc hết lỗi rồi. :)
Khi chưa có số nào mà mình ấn dấm chấm mà tự điền số 0 thì hay hơn. Như trên máy tính đó anh (với những số 0.123 thì rất ít khi em gõ số 0, mà gõ luôn dấu chấm).
 
Upvote 0
Khi chưa có số nào mà mình ấn dấm chấm mà tự điền số 0 thì hay hơn. Như trên máy tính đó anh (với những số 0.123 thì rất ít khi em gõ số 0, mà gõ luôn dấu chấm).

Tôi có nghĩ vụ này nhưng ý là muốn để cho sự kiện khác của Textbox xử lý (Exit, AfterUpdate...), bao gồm các xử lý định dạng khác luôn.
 
Upvote 0
Chào mọi người
Giả sử mình muốn tạo một loạt biến với tên gọi là X01, X02, X03, etc. thì trong VBA cách làm này phải thế nào vậy mọi người.
Thật ra làm thủ công kiểu tạo 1,000 biến X001, X002, X003 thì :D thì mình có thể dùng string nối lại trong Excel rồi copy paste qua VBA. Mà kiểu này thì mình thấy giống chống cháy thôi :D

Cảm ơn mọi người
 
Upvote 0
Web KT
Back
Top Bottom