Chuyên mục xử lý, gỡ rối code VBA (2 người xem)

Liên hệ QC

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

Status
Không mở trả lời sau này.

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,955
Nhờ anh chị giúp!
Em có 02 combobox trong sheet FORMNHAPLIEU, trong đó 1 combobox ở ô $B$5 và 1 ở ô $B$8.
Hiện em muốn combobox ở ô B5 có chức năng giống ở ô B8 với linkrange sheet CONGTHUC! A3:B
linkedcell tại B5: Tendonvi, B13: madonvi
Cám ơn nhiều ạ!
 

File đính kèm

Upvote 0
Mình dùng lệnh "ActiveSheet.PrintPreview" thì nó ra cái form như thế này Reality.JPG
Có lệnh nào để cho nó hiện ra form "Print" giống như ở trong tab "File" không Wanted.JPG
Mình dùng Excel 2000.
 
Upvote 0
Gợi ý thêm một khả năng mới.

Giả sử có 2 textbox, và chúng đều rỗng, khi click phát textbox1 đỏ choét, sau đó người dùng nhập liệu textbox1. Click phát nữa thì cả hai textbox cùng đỏ choet ( do textbox2 lúc này vẫn rỗng). Có nên chăng ta phải khôi phục màu của các textbox trước khi tô màu cho cái textbox rỗng đầu tiền?
Cái đó mình tạo 1 form nhỏ để lấy hướng test và nhờ các a/c giúp đỡ. Còn sau mình áp dụng vào của mình thì đã dùng sự kiện để bỏ cái đỏ choét đó rùi ý, k nó ngứa mắt chết luôn :D
 
Upvote 0
Upvote 0
Mình có đoạn codec sau nhưng không biết sai như thế nào, nhờ mọi người xem giúp với.

Sub Rectangle2_Click()
Dim Dayso()
Dim Max As Integer
Dim iR As Integer
iR = Sheet1.Range("A" & Rows.Count).End(xlUp).Row
ReDim Dayso(iR)
For i = 1 To iR
Dayso(i) = Sheet1.Range("A" & i).Value
Next i
Max = 0
For j = 1 To UBound(Dayso, 1)
If Dayso(j) > Max Then
Sheet1.Range("B" & j) = Dayso(j)
Max = Sheet1.Range("B" & j).Value
Sheet1.Range("B" & j).ClearContents
End If
Next j
Sheet1.Range("B1") = Max
End Sub
 
Upvote 0
Mình có đoạn codec sau nhưng không biết sai như thế nào, nhờ mọi người xem giúp với.

Sub Rectangle2_Click()
Dim Dayso()
Dim Max As Integer
Dim iR As Integer
iR = Sheet1.Range("A" & Rows.Count).End(xlUp).Row
ReDim Dayso(iR)
For i = 1 To iR
Dayso(i) = Sheet1.Range("A" & i).Value
Next i
Max = 0
For j = 1 To UBound(Dayso, 1)
If Dayso(j) > Max Then
Sheet1.Range("B" & j) = Dayso(j)
Max = Sheet1.Range("B" & j).Value
Sheet1.Range("B" & j).ClearContents
End If
Next j
Sheet1.Range("B1") = Max
End Sub
Cái này hình như đang tìm số lớn nhất thì phải. Thay vì bạn đưa Code thì đính kèm file và yêu cầu thì dễ hình dung hơn là đọc và dich Code trên :p
 
Upvote 0
Mình gửi file lên mong mọi người góp ý giúp. Cảm ơn
Thế thì viết như thế này cho gọn hơn
PHP:
Sub Rectangle2_Click()
    Dim sArr(), I As Long, Max As Long
With Sheet1
    sArr = .Range("A1", .Range("A" & Rows.Count).End(3)).Value
    Max = 0
    For I = 1 To UBound(sArr)
        If sArr(I, 1) > Max Then Max = sArr(I, 1)
    Next I
    .Range("B1") = Max
End With
End Sub
 
Upvote 0
Mình có đoạn codec sau nhưng không biết sai như thế nào, nhờ mọi người xem giúp với.

Sub Rectangle2_Click()
Dim Dayso()
Dim Max As Integer
Dim iR As Integer
iR = Sheet1.Range("A" & Rows.Count).End(xlUp).Row
ReDim Dayso(iR)
For i = 1 To iR
Dayso(i) = Sheet1.Range("A" & i).Value
Next i
Max = 0
For j = 1 To UBound(Dayso, 1)
If Dayso(j) > Max Then
Sheet1.Range("B" & j) = Dayso(j)
Max = Sheet1.Range("B" & j).Value
Sheet1.Range("B" & j).ClearContents
End If
Next j
Sheet1.Range("B1") = Max
End Sub
Tôi viết lại như sau
PHP:
Sub Rectangle2_Click()
Dim Dayso()
Dim Max As Integer
Dim iR As Integer
iR = Sheet1.Range("A" & Rows.Count).End(xlUp).Row
ReDim Dayso(iR)
For i = 1 To iR
    Dayso(i) = Sheet1.Range("A" & i).Value
    Next i
'Max = 0     'Luu y 1
Max = Dayso(1)
'For j = 1 To UBound(Dayso, 1)
For j = 2 To UBound(Dayso, 1)
    If Dayso(j) > Max Then
'        Sheet1.Range("B" & j) = Dayso(j)  'Lệnh này thừa
'        Max = Sheet1.Range("B" & j).Value
        Max = Dayso(j)
 '       Sheet1.Range("B" & j).ClearContents    'Lệnh này thừa
        End If
    Next j
Sheet1.Range("B1") = Max
End Sub

và nó cho max của dãy số trong cột A. Chú ý
Luu y 1 Phải thay
Max = 0 bằng Max = Dayso(1,1) để tránh khi dãy số toàn số âm[/PHP]

Có thể kg cần biến Dayso và chỉ cần 1 vòng For
 
Upvote 0
Thế thì viết như thế này cho gọn hơn


Điểm mấu chốt là biến max để là long hoặc integer rất dễ gây lỗi bị chàn, vì chúng chỉ chứa được giá trị khoảng 2 tỷ, chưa kể sẽ có hiện tượng ép kiểu do vậy kết quả sẽ bị làm tròn. Vả lại cũng phải khởi tạo cho biến max hợp lý.

Mã:
Sub Rectangle20_Click()
    Dim sArr, vTemp As Variant, dblMax As Double
    
    

    sArr = Sheet1.Range("A1", Sheet1.Range("A" & Rows.Count).End(3)).Value
    If Not IsArray(sArr) Then
        dblMax = sArr
        'de phong truong hop chi co mot o.
    Else
        dblMax = sArr(1, 1)
        For Each vTemp In sArr
            If vTemp > dblMax Then
                dblMax = vTemp
            End If
        Next
    End If
 
    Sheet1.Range("B1") = dblMax



End Sub

Cứ dùng cái hàm Max trong excel hóa lại đơn giản.
 
Upvote 0
Sub Rectangle2_Click()
Dim sArr(), I As Long, Max As Long
With Sheet1
sArr
= .Range("A1", .Range("A" & Rows.Count).End(3)).Value
Max
= 0
For I = 1 To UBound(sArr)
If
sArr(I, 1) > Max Then Max = sArr(I, 1)
Next I
.Range("B1") = Max
End With
End Sub
Uổi, mà làm sao để có cái code màu xanh này thế chị?
 
Upvote 0
Vãi, em vốn ghét thằng variant mà cuối cùng phải bắt buộc dùng nó. Chỉ có cái hàm Max thôi mà viết sai lên sai xuống, test linh tinh dữ liệu bị quăng error vô mặt.
Code này em thấy tạm chấp nhận được thôi, bà con có code # hay hơn góp ý.
Trên các cell cột A, bà con nhập thỏa mái, càng linh tinh càng tốt, rỗng, số, số bự bà cố, chuỗi, chuỗi và số, biểu thức...

Mã:
Option Explicit

Sub Rectangle2_Click()
    Dim vArr() As Variant
    Dim vMax As Variant, vTemp As Variant
    Dim lR As Long, I As Long
 
    ' Truong hop cot A khong co du lieu hay chi cell A1 co du lieu rong, text, number hay linh tinh
    vMax = Val([A1])
    lR = Sheet1.Range("A" & Rows.Count).End(xlUp).Row
  
    If (lR > 1) Then
        ' Có dữ liệu từ A2 trở đi
        vArr = Sheet1.Range("A1:A" & lR).Value ' If lR = 1 thì lệnh này nó quăng error vô mặt em cái đùng
        For I = 2 To UBound(vArr)       ' Bo qua cell A1
            vTemp = Val(vArr(I, 1))     ' Truong hop cell A[I] la du lieu rong, text, number hay linh tinh, không dùng Val thì bị quăng error cái đùng lần nữa :')
            If vTemp > vMax Then
                vMax = vTemp
            End If
        Next I
    End If
 
    Sheet1.Range("B1") = vMax
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Hàm Val là hàm nguy hiểm bỏ bố
A1 = "1,000.0"
A2 = "2.000,0"
A3 = "1.000,0"
A4 = "2,000.0"
Thiệt ra là thằng nào lớn hơn thằng nào?
 
Upvote 0
Status
Không mở trả lời sau này.
Web KT

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

Back
Top Bottom