• Thứ Ba, 23/12/2003 09:53 (GMT+7)

    Câu hỏi :
    Tôi sử dụng Windows 98SE; Office 2000 Excel. 1. Tôi thường hay format trong một cell như sau: Ùm=3x500V AC; 50/60Hz; Ìm=1,6A; Ic= 10Ìm Để định dạng chữ Uđm ̉Uđm, tôi định dạng bằng cách bôi đen ký tự “đm”- Chọn Format - Cells - Fonts - Subscript. Tiếp theo để định dạng Ic ̉Ic, tôi lại tiếp tục làm như trên. Có cách nào lặp lại (Redo) hành động vừa rồi như chức năng của phím F4 trong Office không? 2. Trong Excel, dùng cách nào để lấy được giá trị của biến để xác định chính xác vị trí của các ký tự trong một cell (mục đích là để tạo một macro định dạng các ký tự trong một dãy cell đều có n ký tự từ vị trí thứ i đến i+n-1 của một cell là Font tiếng Nga chẳng hạn!). 3. Trong Excel, có cách nào để tìm một chuỗi trong một worksheet (gồm nhiều sheet) đã mở chỉ bằng một động tác (ví dụ Ctrl+F chẳng hạn). Khi tìm được sẽ active sheet có chứa chuỗi cần tìm. Thông thường tôi vẫn phải dùng Ctrl+F cho worksheet active, sau đó dùng Shift+F4 cho các sheet tiếp theo.

    Trả lời :

    1. Nhiệm vụ chính của Excel là quản lý bảng tính gồm nhiều phần tử gọi là cell, do đó đối tượng Selection của Excel miêu tả tối thiểu 1 cell đang được chọn (thường là 1 vùng chọn chứa nhiều cell). Như vậy, ở mức độ lập trình trong Excel, ta không có cách nào truy xuất được vùng văn bản nhỏ đang được chọn trong 1 cell hay 1 textbox, do đó ta không thể viết 1 macro tự động thực hiện format vùng văn bản nhỏ này. Tuy nhiên, bạn có thể giảm nhẹ công việc format của mình (từ 4 động tác còn 3 động tác) bằng cách tạo 1 icon “Format Cells” trong toolbar bằng cách vào menu View.Toolbars.Customize, chọn trang Commands, chọn mục Format, dùng mouse ‘drag’ phần tử “Cell...” trong danh sách “Commands” lên vị trí thích hợp trong toolbar.

    2. Như đã nói ở trên, Excel không cung cấp phương tiện để macro nhận biết vùng chọn là 1 chuỗi văn bản nhỏ trong 1 cell hay 1 textbox, mặc dù bên trong Excel nhận biết được điều này. Nếu đã biết chắc vùng văn bản cần format lại trong các cell đều bắt đầu từ vị trí cụ thể và có độ dài cụ thể (thí dụ, vùng cần format tiếng Nga dài 2 ký tự và bắt đầu từ ký tự thứ 7), bạn có thể viết macro thực hiện format tự động vùng văn bản này như sau:

     

    Sub Macro_Format()

       For Each cell In Selection

      With cell.Characters(Start:=7, Length:=2).Font

       .Name = “Times New Roman”

       .FontStyle = “Regular”

       .Size = 12

       .Strikethrough = False

       .Superscript = False

       .Subscript = False

       .OutlineFont = False

       .Shadow = False

       .Underline = xlUnderlineStyleNone

       .ColorIndex = xlAutomatic

    End With

        Next

    End Sub

     

    3. Bạn có thể viết 1 macro để tìm 1 chuỗi văn bản tự động trên tất cả các ‘Sheets’ rồi gán cho macro 1 hot-key hay 1 icon trên toolbar để có thể dùng nó dễ dàng. Sau đây là source code của macro tìm 1 chuỗi tự động trên tất cả các Sheets:

     

    Sub SearchAll()

    ‘ Thiết lập chuỗi cần tìm (nên tạo 1

    ‘ dialogbox nhập liệu)

    searchstr = “Trac luan”

    ‘ duyệt từng Sheets

    For Each ws In Application.ActiveWorkbook.Sheets

        ‘ chọn sheet

        ws.Activate

        ‘ đưa vùng chọn về cell đầu tiên

        Range(“A1”).Select

        ‘ tìm chuỗi trong sheet

        Set RangeObj = Cells.Find(What:=searchstr, After:=ActiveCell, LookIn:=xlFormulas,

     _LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,

      _MatchCase:=False)

       ‘ Nếu tìm được thì dừng vòng For

       If Not (RangeObj Is Nothing) Then Exit For

    Next

    If Not (RangeObj Is Nothing) Then

        ‘ Chọn cell tìm được

        RangeObj.Select 

    Else

       ‘ báo sai

       MsgBox “String Not Found”         

    End If

    End Sub

     

    Chuyên mục: Ứng dụng văn phòng