Chỉ định code bắt đầu chạy theo vùng như ý muốn! (1 người xem)

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

hoanglocphat

Thành viên thường trực
Tham gia
27/1/13
Bài viết
260
Được thích
30
Chào các bạn!
Tôi có đọan code xóa vùng như sau
Mã:
Sub XoaVung()
    Dim Vung As Range
    Set Vung = [COLOR=#0000cd][B]Range([B9][/B][/COLOR], [B65536].End(3))
    With Vung
        Union(Vung.Offset(, -1), Vung.Offset(, 1), Vung.Offset(, 8), Vung.Offset(, 15).Resize(, 3)).ClearContents
    End With
End Sub
Code trên sẽ bắt đầu chạy từ Range([B9]
Nếu tôi muốn code bắt đầu chạy từ Range([B1000] thì tôi fải bấm Alt+F11 để sửa Range([B9] thành Range([B1000]
Bây giờ tôi kg muốn vào Alt+F11 sửa trực tiếp trên code, mà tôi muốn nhập một cái gì đó ở cell C3 (ở sheet muốn chạy code) để thay Range([B9] thành Range([B1000] và dĩ nhiên trong đọan code
Mã:
Set Vung = [COLOR=#0000cd][B]Range([B9][/B][/COLOR], [B65536].End(3))
thì sẽ thành đọan code gì đó.

Vì tôi kg biết về code , nên tôi chỉ đưa ý tưởng trên, các bạn có cách nào đơn giản và chính xác thì hướng dẫn giúp
****************
Tương tự
Mã:
Sub LowToUp()
    Dim DL()
    Dim i As Long, j As Long
    On Error Resume Next
    DL = Range("[COLOR=#ff0000][B]F10[/B][/COLOR]:I20000").Value
    For i = 1 To UBound(DL, 1)
        For j = 1 To UBound(DL, 2)
            DL(i, j) = UCase(DL(i, j))
        Next
    Next
    Range("[COLOR=#ff0000][B]F10[/B][/COLOR]:I20000") = DL
End Sub
tôi muốn thay thế F10 thành F300
*************
Hoặc
Mã:
With ActiveSheet
arrSrc = .Range(.[COLOR=#ff0000][B][B9][/B][/COLOR], .[B65536].End(3)).Resize(, 11).Value
End With
Tôi muốn thay B9 thành B500
Cảm ơn các bạn!
 

File đính kèm

Viết mẫu bạn tham khảo rồi chế biến nha
PHP:
Sub abc()
Range(Application.InputBox("Enter"), [A65536].End(3)).Select
End Sub
Cảm ơn bạn, vì mình kg biết về code nên bạn làm giúp vào cho 3 ví dụ trên . Cảm ơn bạn
************
P/s: trước đây tôi có đọc 1 bài gần tương tự, người ta ghi gì vào vào cell C3 (như nói ở trên), sau đó dùng Name, bây giờ thì tìm hòai để áp dụng như kg thấy!
 
Upvote 0
Cảm ơn bạn, vì mình kg biết về code nên bạn làm giúp vào cho 3 ví dụ trên . Cảm ơn bạn
************
P/s: trước đây tôi có đọc 1 bài gần tương tự, người ta ghi gì vào vào cell C3 (như nói ở trên), sau đó dùng Name, bây giờ thì tìm hòai để áp dụng như kg thấy!
Giúp 1 ví dụ thôi nhé
PHP:
Sub LowToUp()
    Dim DL(), StartCell$
    Dim i As Long, j As Long
    StartCell = Application.InputBox("Enter")
    DL = Range(StartCell, "I20000").Value
    For i = 1 To UBound(DL, 1)
        For j = 1 To UBound(DL, 2)
            DL(i, j) = UCase(DL(i, j))
        Next
    Next
    Range(StartCell, "I20000") = DL
End Sub
 
Upvote 0
Giúp 1 ví dụ thôi nhé
PHP:
Sub LowToUp()
    Dim DL(), StartCell$
    Dim i As Long, j As Long
    StartCell = Application.InputBox("Enter")
    DL = Range(StartCell, "I20000").Value
    For i = 1 To UBound(DL, 1)
        For j = 1 To UBound(DL, 2)
            DL(i, j) = UCase(DL(i, j))
        Next
    Next
    Range(StartCell, "I20000") = DL
End Sub

Tôi chạy code trên thì hiện ra bảng Input, tôi dùng chuột click vào cell F23 rồi Enter, nhưng code báo lỗi " Run-time error '1004:
Metho 'Range' of object' - Global failer"
lỗi ở dòng
Mã:
DL = Range(StartCell, "I20000").Value
Bạn giúp giùm lại code trên!Xin cảm ơn
 
Upvote 0
Tôi chạy code trên thì hiện ra bảng Input, tôi dùng chuột click vào cell F23 rồi Enter, nhưng code báo lỗi " Run-time error '1004:
Metho 'Range' of object' - Global failer"
lỗi ở dòng
Mã:
DL = Range(StartCell, "I20000").Value
Bạn giúp giùm lại code trên!Xin cảm ơn
Phải gõ tay vào cơ.....
 
Upvote 0
Phải gõ tay vào cơ.....
Cảm ơn bạn code đã chạy tốt
Bạn cho tôi hỏi thêm, tôi thấy bạn có ghi tên biến là StartCell$
nhưng khi áp vào chỉ còn StartCell, vậy dấu $ có ý nghĩa gì vậy? xin cảm ơn
--------
P/s: Nếu các bạn có cách nào khác nữa thì xin vui lòng hướng dẫn!
 
Upvote 0
Cảm ơn bạn code đã chạy tốt
Bạn cho tôi hỏi thêm, tôi thấy bạn có ghi tên biến là StartCell$
nhưng khi áp vào chỉ còn StartCell, vậy dấu $ có ý nghĩa gì vậy? xin cảm ơn
--------
P/s: Nếu các bạn có cách nào khác nữa thì xin vui lòng hướng dẫn!

Thức ra bạn muốn áp dụng là StartCell$ cũng được.

Giải thích:

Ngày xưa, trong ngôn ngữ Basic cổ điển, các biến có loại cố định và có những dấu hiệu tượng trưng, điển hình là dấu $ dùng cho tất cả các biến loại string. Và tất cả các tên biến string phải được kết thúc bằng dấu $. Nguyên tắc là nhìn vào biến, người ta biết ngay nó là loại gì.
Và theo luật này thì nếu bạn khai báo: Dim a$, i% thì bạn sẽ có 1 biến string và 1 biến integer.

Về sau này, do chiều hướng LT Hướng Đối Tượng, các ngôn ngữ có khuynh hướng bỏ đi ràng buộc trên. Điển hình là chính VBA không còn ràng buộc nữa. Chính thức ra, một khi bạn khai báo
Dim S as String, hay Dim S$
Thì kể từ đó, trong phạm vi tầm vực biến, bạn muốn dùng S hay S$ đều được hiểu là S
 
Upvote 0
Rất cảm ơn bạn VietMini nhiều, ít ra như bạn tôi cảm thấy vui nhiều vì người ta không biết mới hỏi mà đã mất công xem và trả lời thì như VietMini mới đúng là bậc hiền nhân chứ trả lời ("không biết ráng chịu" thì nói làm gì cho mất lòng tốt đi)
 
Upvote 0
Giúp 1 ví dụ thôi nhé
PHP:
Sub LowToUp()
    Dim DL(), StartCell$
    Dim i As Long, j As Long
    StartCell = Application.InputBox("Enter")
    DL = Range(StartCell, "I20000").Value
    For i = 1 To UBound(DL, 1)
        For j = 1 To UBound(DL, 2)
            DL(i, j) = UCase(DL(i, j))
        Next
    Next
    Range(StartCell, "I20000") = DL
End Sub
code trên của bạn tôi sửa thành
Mã:
Sub LowToUp()
    Dim DL(), StartCell$
    Dim i As Long, j As Long
    StartCell = Application.InputBox("Chi duoc chon tu 10 tro len!")
    [COLOR=#ff0000][B]If StartCell < 10 Then
        MsgBox "so nho hon 10"
        
    Else[/B][/COLOR]
        DL = Range("F" & StartCell, "I20000").Value
        For i = 1 To UBound(DL, 1)
            For j = 1 To UBound(DL, 2)
                DL(i, j) = UCase(DL(i, j))
            Next
        Next
        Range("F" & StartCell, "I20000") = DL
   [B][COLOR=#ff0000] End If[/COLOR][/B]
End Sub
như vậy khi bảng Inphutbox hiện ra ta chỉ đánh chỉ số dòng là được.
Vì yêu cầu phải nhập chỉ số dòng từ 10 trở lên thì mới cho chạy code, nếu nhập dưới số 10 thì fải yêu cầu nhập lại (và chỉ khi thực hiện đúng thì mới thực hiện chạy code, còn chưa đúng thì vẫn yêu cầu nhập lại)
Tôi có thêm các dòng code màu đỏ ở trên,
Nhưng khi nhập dưới 10 thì có MsgBox thông báo rồi sau đó nó ngưng khg chạy code !!!
Các bạn vui lòng sửa giúp code
Cho hỏi thêm khi bảng InputBox hiện ra, nếu ta chọn Cancel hay dấu "x" thì code báo lỗi, cho hỏi cách khắc phục
Xin cảm ơn các bạn!
 

File đính kèm

Upvote 0
code trên của bạn tôi sửa thành
Mã:
Sub LowToUp()
    Dim DL(), StartCell$
    Dim i As Long, j As Long
    StartCell = Application.InputBox("Chi duoc chon tu 10 tro len!")
    [COLOR=#ff0000][B]If StartCell < 10 Then
        MsgBox "so nho hon 10"
        
    Else[/B][/COLOR]
        DL = Range("F" & StartCell, "I20000").Value
        For i = 1 To UBound(DL, 1)
            For j = 1 To UBound(DL, 2)
                DL(i, j) = UCase(DL(i, j))
            Next
        Next
        Range("F" & StartCell, "I20000") = DL
   [B][COLOR=#ff0000] End If[/COLOR][/B]
End Sub
như vậy khi bảng Inphutbox hiện ra ta chỉ đánh chỉ số dòng là được.
Vì yêu cầu phải nhập chỉ số dòng từ 10 trở lên thì mới cho chạy code, nếu nhập dưới số 10 thì fải yêu cầu nhập lại (và chỉ khi thực hiện đúng thì mới thực hiện chạy code, còn chưa đúng thì vẫn yêu cầu nhập lại)
Tôi có thêm các dòng code màu đỏ ở trên,
Nhưng khi nhập dưới 10 thì có MsgBox thông báo rồi sau đó nó ngưng khg chạy code !!!
Các bạn vui lòng sửa giúp code
Cho hỏi thêm khi bảng InputBox hiện ra, nếu ta chọn Cancel hay dấu "x" thì code báo lỗi, cho hỏi cách khắc phục
Xin cảm ơn các bạn!
Thử vầy đi coi sao
PHP:
Sub LowToUp()
    Dim DL(), StartCell$
    Dim i As Long, j As Long
    StartCell = Application.InputBox("Chi duoc chon tu 10 tro len!")
    If StartCell = False Then Exit Sub
    If CLng(StartCell) < 10 Then
        MsgBox "so nho hon 10"
    Else
        DL = Range("F" & StartCell, [I65536].End(3)).Value
        For i = 1 To UBound(DL, 1)
            For j = 1 To UBound(DL, 2)
                DL(i, j) = UCase(DL(i, j))
            Next
        Next
        Range("F" & StartCell, [I65536].End(3)) = DL
    End If
End Sub
 
Upvote 0
Và tôi sửa code như sau, trước mắt thấy chạy Ok, nhưng kg biết có câu lệnh nào kg fù hợp kg? nhờ các bạn kiểm tra giúp, xin cám ơn
Mã:
Sub LowToUp_QH3()
    Dim DL(), StartCell$
    Dim i As Long, j As Long
    Do
    StartCell = Application.InputBox("Chi duoc chon tu 10 tro len!", , 10)
    If StartCell = False Then Exit Sub
    Loop Until CLng(StartCell) > 9
        
        DL = Range("F" & StartCell, [I65536].End(3)).Value
        For i = 1 To UBound(DL, 1)
            For j = 1 To UBound(DL, 2)
                DL(i, j) = UCase(DL(i, j))
            Next
        Next
        Range("F" & StartCell, [I65536].End(3)) = DL
    
End Sub
 
Upvote 0
Và tôi sửa code như sau, trước mắt thấy chạy Ok, nhưng kg biết có câu lệnh nào kg fù hợp kg? nhờ các bạn kiểm tra giúp, xin cám ơn
Mã:
Sub LowToUp_QH3()
    Dim DL(), StartCell$
    Dim i As Long, j As Long
    Do
    StartCell = Application.InputBox("Chi duoc chon tu 10 tro len!", , 10)
    If StartCell = False Then Exit Sub
    Loop Until CLng(StartCell) > 9
        
        DL = Range("F" & StartCell, [I65536].End(3)).Value
        For i = 1 To UBound(DL, 1)
            For j = 1 To UBound(DL, 2)
                DL(i, j) = UCase(DL(i, j))
            Next
        Next
        Range("F" & StartCell, [I65536].End(3)) = DL
    
End Sub

Theo mình thì mỗi 1 dòng code đều mang 1 ý nghĩa gì đó. Mình không hiểu được vòng Do Loop của bạn để làm gì. Nhưng code có thể sửa lại thế này
PHP:
Sub LowToUp()
   Dim DL(), StartCell, i&, j&
   StartCell = Application.InputBox("Chi duoc chon tu 10 tro len!")
   If StartCell = False Or CLng(StartCell) < 10 Then Exit Sub
   DL = Range("F" & StartCell, [I65536].End(3)).Value
   For i = 1 To UBound(DL, 1)
       For j = 1 To UBound(DL, 2)
           DL(i, j) = UCase(DL(i, j))
       Next
   Next
   Range("F" & StartCell, [I65536].End(3)) = DL
End Sub
 
Upvote 0
Theo mình thì mỗi 1 dòng code đều mang 1 ý nghĩa gì đó. Mình không hiểu được vòng Do Loop của bạn để làm gì.
À mục đích của mình là, nếu người nhập liệu nhập khg đúng theo điều kiện thì vẫn hiện ra bảng Input cho đến khi nào họ nhập đúng thì thôi, nếu họ kg thích thì bấm cancel
 
Upvote 0
Mã:
Do
    StartCell = Application.InputBox("Chi duoc chon tu 10 tro len!")
    If StartCell = False Then Exit Sub
    If CLng(StartCell) >= 10 Then Exit Do
    MsgBox "so " & StartCell & " nho hon 10"
Loop
DL = Range("F" & StartCell, [I65536].End(3)).Value
For i = 1 To UBound(DL, 1)
...

Tôi chỉ mách cho cách buôc phải nhập lại số. Việc bắt lỗi nếu nhập không phải số là chuyện khác.
 
Upvote 0
À mục đích của mình là, nếu người nhập liệu nhập khg đúng theo điều kiện thì vẫn hiện ra bảng Input cho đến khi nào họ nhập đúng thì thôi, nếu họ kg thích thì bấm cancel
Gởi bạn thêm 1 cách ngoài cách dùng Do Loop
PHP:
Sub LowToUp()
   Dim DL(), StartCell, i&, j&
NhapLai:
   StartCell = Application.InputBox("Chi duoc chon tu 10 tro len!")
   If StartCell < 10 Then GoTo NhapLai
   If StartCell = False Or StartCell = "" Then Exit Sub
   .............................
End Sub
 
Upvote 0

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

Back
Top Bottom