Chuyên đề giải đáp những thắc mắc về code VBA

Liên hệ QC

maytinhvp01

Thành viên thường trực
Tham gia
27/7/13
Bài viết
390
Được thích
179
Mình muốn nhờ giải thich câu lệnh " If Ran.Cells(d, c) > max Then max = Ran.Cells(d, c) "
trong ví du:
Public Function LonNhat(Ran As Range)
Dim max As Double, v As Integer, d As Integer, c As Integer
max = Ran.Cells(1, 1)
For d = 1 To Ran.Rows.Count
For c = 1 To Ran.Columns.Count
If Ran.Cells(d, c) > max Then max = Ran.Cells(d, c)
Next c
Next d
v = Tim(max, Ran)
LonNhat = max
End Function
-------------------------------------------------------
[INFO1]Thông báo:
Vì topic này:
http://www.giaiphapexcel.com/forum/...ải-thích-các-code-đề-nghị-các-bạn-gửi-vào-đây
đã quá dài nên BQT đóng lại.
Nay tôi mở topic mới với cùng chủ đề: GIẢI THÍCH NHỮNG THẮC MẮC VỀ CODE
Các bạn nếu có nhu cầu giải thích code, vui lòng post tại đây nhé
NDU96081631

[/INFO1]
 
Chỉnh sửa lần cuối bởi điều hành viên:
Câu lệnh thay thế cho toán tử so sánh trong VBA

Chao mọi người. Em có vấn đề này cần được sự trợ giúp ạ.Em có đoạn Code sau:
Mã:
Sub hoi()
  bl As Boolean
  bl = 3 < 4
  MsgBox bl
End Sub


Tuy nhiên giờ em mốn viết khác đi như sau:

Mã:
Sub hoi()
  Dim ss As String, bl As Boolean
  ss = "<"
[COLOR=#ff0000][B]  bl = 3 & ss & 4[/B][/COLOR]
  MsgBox bl
End Sub

Nhờ mọi người viết giúp em câu lệnh màu đỏ thế nào để VBA hiểu được ạ
 
Upvote 0
Chao mọi người. Em có vấn đề này cần được sự trợ giúp ạ.Em có đoạn Code sau:
Mã:
Sub hoi()
  bl As Boolean
  bl = 3 < 4
  MsgBox bl
End Sub


Tuy nhiên giờ em mốn viết khác đi như sau:

Mã:
Sub hoi()
  Dim ss As String, bl As Boolean
  ss = "<"
[COLOR=#ff0000][B]  bl = 3 & ss & 4[/B][/COLOR]
  MsgBox bl
End Sub

Nhờ mọi người viết giúp em câu lệnh màu đỏ thế nào để VBA hiểu được ạ
Hãy thử khai báo biến với bl as string xem sao nhé. Mà muốn trả về kết quả là True hay sao?
 
Lần chỉnh sửa cuối:
Upvote 0
Sub hoi()
Dim ss As String, bl As Boolean
ss = ">"
bl = Evaluate(3 & ss & 4)
MsgBox bl
End Sub
 
Upvote 0
Các bạn giúp mình fix lỗi trong đoạn code bên dưới với. Lần đầu chạy thì Chart tự động vẽ được, nhưng sau đó thì ko đươc và báo lỗi " Method or datamember not found", lỗi ở phần ".SetSourceData"
Các bạn giúp mình với nhé:

Sub ChartSheetExample()


Dim ChartSheet2 As Chart


Set ChartSheet2 = Charts.Add


With ChartSheet2
.SetSourceData Source:=Sheets("Sheet2").Range("B1:B11")
.ChartType = xlColumnClustered
.HasTitle = True
.ChartTitle.Text = "Chart Sheet Example"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = Range("A1")
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = Range("B1")

End With
End Sub
 
Upvote 0
nhờ mọi người giúp trường hợp sau:
từ C5:C12 tôi có một số chuổi text như sau:
se,qw,rty,se,ce,aw,#N/A
và có đoạn code sau:
Mã:
Sub taisao()
Dim arr As Variant
arr = [c5:c12].Value

For i = 1 To UBound(arr)
    If arr(i, 1) = "ce" Then MsgBox "ce"
Next

End Sub
nó chạy tới chổ #N/A thì báo lổi
vậy phải làm sao?
cám ơn
 
Upvote 0
nhờ mọi người giúp trường hợp sau:
từ C5:C12 tôi có một số chuổi text như sau:
se,qw,rty,se,ce,aw,#N/A
và có đoạn code sau:
Mã:
Sub taisao()
Dim arr As Variant
arr = [c5:c12].Value

For i = 1 To UBound(arr)
    If arr(i, 1) = "ce" Then MsgBox "ce"
Next

End Sub
nó chạy tới chổ #N/A thì báo lổi
vậy phải làm sao?
cám ơn

sao em bỏ zô máy nhà chạy có tới dòng For i = 1 To UBound(arr)
là lỗi luôn rồi anh ơi , chưa tới được vòng NA . hu hu !$@!!!$@!!
 
Upvote 0
nhờ mọi người giúp trường hợp sau:
từ C5:C12 tôi có một số chuổi text như sau:
se,qw,rty,se,ce,aw,#N/A
và có đoạn code sau:
Mã:
Sub taisao()
Dim arr As Variant
arr = [c5:c12].Value

For i = 1 To UBound(arr)
    If arr(i, 1) = "ce" Then MsgBox "ce"
Next

End Sub
nó chạy tới chổ #N/A thì báo lổi
vậy phải làm sao?
cám ơn
Đưa vào mảng thì nó không chấp nhận dữ liệu lỗi
 
Lần chỉnh sửa cuối:
Upvote 0
Chào cả nhà!
Mình có đoan code tìm kiếm mã quản lý. Nếu tìm thấy mã đó ở dòng nào thì nó sẽ điền đúng dữ liệu bổ sung vào dòng đó tương ứng.
Code của mình không hiểu sao lỗi chỗ nào mà không cập nhật được
Mã:
Private Sub CommandButton1_Click()
    Dim vung As Range, MyR As Range
    Set vung = S2.Range("A5:A65000")
    Set MyR = vung.Find(frmCapNhatKH.TextBox1.Value, , xlValues, xlWhole) ' Tim ma quan ly o cot A
    If frmCapNhatKH.ComboBox1.Value = "" Then
        MsgBox ("Ma quan ly khong duoc de trong!"), vbCritical, "ABC"
        frmCapNhatKH.ComboBox1.SetFocus
    Else
        If MyR Is Nothing Then
            With MyR 'Em khong hieu doan nay loi sao nua?
                'Cap nhat vao cot Q
                .Offset(, 16).Value = frmCapNhatKH.TextBox1.Value 'Bao loi dong nay
                'Cap nhat vao cot R
                .Offset(, 17).Value = frmCapNhatKH.TextBox2.Value
                'Cap nhat vao cot S
                .Offset(, 18).Value = frmCapNhatKH.TextBox3.Value
                'Cap nhat vao cot T
                .Offset(, 19).Value = frmCapNhatKH.TextBox4.Value
            End With
            With frmCapNhatKH
                .ComboBox1.SetFocus
                .ComboBox1.Value = ""
                .TextBox1.Value = ""
                .TextBox2.Value = ""
                .TextBox3.Value = ""
                .TextBox4.Value = ""
            End With
        Else
            MsgBox ("Ma quan ly nay khong ton tai!"), vbCritical, "ABC"
            frmCapNhatKH.ComboBox1.SetFocus
        End If
    End If
    Set MyR = Nothing
    Set vung = Nothing
End Sub
Vậy nhờ mọi người nhìn cho mình xem đoạn code trên bất hợp lý ở chỗ nào??
Cám ơn mọi người nhiều!
 

File đính kèm

  • BaiHoi.xlsm
    41.5 KB · Đọc: 4
Lần chỉnh sửa cuối:
Upvote 0
Theo mình mơ màng hiểu (vì không có file để cụ thể thêm) thì bạn nên sửa, chỉnh 2 nơi:

1./ Trước khi bắt chương trình đi tìm cái gì đó đang có trong frmCapNhatKH.TextBox1.Value, bạn fải xem cái này đang có dữ liệu hay chưa;
Nếu đi tìm "" hay " " là bạn bắt chương trình đi tìm cái vu vơ rồi còn gì?

2./ Câu lệnh này đúng ngữ fáp & chính tả: "If MyR Is Nothing Then "
Nhưng sai về cách ra lệnh;
Cũng giống như bạn ra lệnh cho thằng con:

Mày ra chợ tìm cô bán rau muống bữa trước; Nếu không thấy thì đưa cô ta về đây!
 
Upvote 0
Theo mình mơ màng hiểu (vì không có file để cụ thể thêm) thì bạn nên sửa, chỉnh 2 nơi:

1./ Trước khi bắt chương trình đi tìm cái gì đó đang có trong frmCapNhatKH.TextBox1.Value, bạn fải xem cái này đang có dữ liệu hay chưa;
Nếu đi tìm "" hay " " là bạn bắt chương trình đi tìm cái vu vơ rồi còn gì?

2./ Câu lệnh này đúng ngữ fáp & chính tả: "If MyR Is Nothing Then "
Nhưng sai về cách ra lệnh;
Cũng giống như bạn ra lệnh cho thằng con:

Mày ra chợ tìm cô bán rau muống bữa trước; Nếu không thấy thì đưa cô ta về đây!
Em đã sửa như vầy vẫn không được ạ. Nhờ anh chỉ giao thêm ạ!
Mã:
Private Sub CommandButton1_Click()
    Dim vung As Range, MyR As Range
    If frmCapNhatKH.ComboBox1.Value = "" Then
        MsgBox ("Ma quan ly khong duoc de trong!"), vbCritical, "ABC"
        frmCapNhatKH.ComboBox1.SetFocus
    Else
    Set vung = S2.Range("A5:A65000")
    Set MyR = vung.Find(frmCapNhatKH.TextBox1.Value, , xlValues, xlWhole) ' Tim ma quan ly o cot A
        If MyR Is Nothing Then
            With MyR 'Em khong hieu doan nay loi sao nua?
                'Cap nhat vao cot Q
                .Offset(, 16).Value = frmCapNhatKH.TextBox1.Value 'Bao loi dong nay
                'Cap nhat vao cot R
                .Offset(, 17).Value = frmCapNhatKH.TextBox2.Value
                'Cap nhat vao cot S
                .Offset(, 18).Value = frmCapNhatKH.TextBox3.Value
                'Cap nhat vao cot T
                .Offset(, 19).Value = frmCapNhatKH.TextBox4.Value
            End With
            With frmCapNhatKH
                .ComboBox1.SetFocus
                .ComboBox1.Value = ""
                .TextBox1.Value = ""
                .TextBox2.Value = ""
                .TextBox3.Value = ""
                .TextBox4.Value = ""
            End With
        Else
            MsgBox ("Ma quan ly nay khong ton tai!"), vbCritical, "ABC"
            frmCapNhatKH.ComboBox1.SetFocus
        End If
    End If
    Set MyR = Nothing
    Set vung = Nothing
End Sub
 
Upvote 0
Bạn mới sửa điều (1) thôi!

Còn điều (2) nữa!

Mày ra chợ tìm cô bán rau muống bữa trước; Nếu không thấy thì đưa cô ta về đây!
 
Upvote 0
Không được ạ! Em làm rùi anh ơi.....! Anh thử file của em đính kèm ở #697 thử xem.
Chẳng lẽ hết cách rùi sao ạ!
Ngoài việc sửa chỗ đó ra thì còn phải sửa đối tượng cần tìm ở câu lệnh Set MyR = vung.Find(..., đối tượng cần tìm là ComboBox1 chứ không phải là TextBox1
 
Upvote 0
Đúng là sai rất cơ bản mà không phát hiện ra ạ!
Để tránh sai như vậy, mình thường chú tâm trong việc gán tên cho các đối tượng Control, như

TxtHoTen; TxtNgaySinh, . . . cho các TextBox
CbBDonVi, CbBLop, CbBNganh,. . . cho các ComboBox
& CmdLuu, CmdXoa, . . . . cho các nút lệnh

Với cả các nhãn kèm theo cũng vậy, như LblNSinh, LblDonVi,. . . . .
 
Upvote 0
giải thích đoạn code này dùm em.

Option Explicit


Public Sub GPE()
Dim sArr(), dArr(1 To 1, 1 To 16), I As Long, J As Long, K As Long
sArr = Range("C3:I19").Value
For J = 1 To 5 Step 4
For I = 1 To 17 Step 2
If sArr(I, J) <> Empty Then
K = K + 1
dArr(1, K) = sArr(I, J + 2)
End If
Next I
Next J
For I = 3 To 17 Step 2
Range("E" & I).ClearContents
If I < 8 Then Range("I" & I).ClearContents
Next I
For I = 11 To 19 Step 2
Range("I" & I).ClearContents
Next I
Range("E3").Select
Sheet2.Range("A64").End(xlUp).Offset(1).Resize(, 16) = dArr
End Sub
 
Upvote 0
Web KT
Back
Top Bottom