Chuyên đề giải đáp những thắc mắc về code VBA (3 người xem)

Liên hệ QC

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

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:
Bạn có từng nói mình là dân chuyên C++ phải không?
Nếu bạn dạy C++, bạn chỉ có thể dạy sơ qua STL làm việc như thế nào, và một vài lớp/mấu (class/template) căn bản thông dụng của nó thôi. Chứ nếu bạn dạy cho hêt cả thư viện STL thì khoá học của bạn chắc 5 năm mới dứt.
 
Upvote 0
Bạn có từng nói mình là dân chuyên C++ phải không?
Nếu bạn dạy C++, bạn chỉ có thể dạy sơ qua STL làm việc như thế nào, và một vài lớp/mấu (class/template) căn bản thông dụng của nó thôi. Chứ nếu bạn dạy cho hêt cả thư viện STL thì khoá học của bạn chắc 5 năm mới dứt.
anh nghía dùm em đường link này bài 349. anh xem giải thích giúp em nguyên nhân gì đâu mà nó không ra dữ liệu đủ trên 1 cột. cảm ơn anh nhiều
http://www.giaiphapexcel.com/forum/showthread.php?75143-Bài-tập-về-ADO-căn-bản/page35
 
Upvote 0
Chào các bạn,

Có bạn nào xài office 2003 test giúp tôi đoạn code copy sheet -> save as thành file .xls bị báo lỗi
Tôi dùng đoạn code sau mục đích để copy và save as 1 sheet thành file excel khác đuôi .xls. Chạy code trên excel 2007 trở lên thì bình thường. Qua máy win xp - office 2003 chạy thì nó báo lỗi, không thể chạy được. Không hiểu tại sao...

Cảm ơn các bạn!
Mã:
Sub TestCopy()
    Sheet1.Copy
    ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & Sheet1.Name & Sheet2.Name & Sheet3.Name & ".xls", FileFormat:=56
    ActiveWorkbook.Close
End Sub
Hiện tôi cũng không xài Excel 2003 nhưng tôi nghĩ vấn đề nằm ở chỗ FileFormat:=56, bạn thử xóa nó đi xem sao.
 
Upvote 0
Chào các bạn,

Có bạn nào xài office 2003 test giúp tôi đoạn code copy sheet -> save as thành file .xls bị báo lỗi
Tôi dùng đoạn code sau mục đích để copy và save as 1 sheet thành file excel khác đuôi .xls. Chạy code trên excel 2007 trở lên thì bình thường. Qua máy win xp - office 2003 chạy thì nó báo lỗi, không thể chạy được. Không hiểu tại sao...

Cảm ơn các bạn!
Mã:
Sub TestCopy()
    Sheet1.Copy
    ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & Sheet1.Name & Sheet2.Name & Sheet3.Name & ".xls", FileFormat:=56
    ActiveWorkbook.Close
End Sub
Máy mình Xp +Office 2010 chay tốt .....nhưng thấy mấy cái Name kỳ kỳ.......
 
Upvote 0
Chào các bạn,

Có bạn nào xài office 2003 test giúp tôi đoạn code copy sheet -> save as thành file .xls bị báo lỗi
Tôi dùng đoạn code sau mục đích để copy và save as 1 sheet thành file excel khác đuôi .xls. Chạy code trên excel 2007 trở lên thì bình thường. Qua máy win xp - office 2003 chạy thì nó báo lỗi, không thể chạy được. Không hiểu tại sao...

Cảm ơn các bạn!
Mã:
Sub TestCopy()
    Sheet1.Copy
    ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & Sheet1.Name & Sheet2.Name & Sheet3.Name & ".xls", FileFormat:=56
    ActiveWorkbook.Close
End Sub
Tham khảo thêm nè
XlFileFormat = xlExce l8 <=> File Extension = "xls" : Value = 56
XlFileFormat = xlOpenXMLWorkbook <=> File Extension = "xlsx" : Value = 51
XlFileFormat = xlExcel 12 <=> File Extension = "xlsb" : Value = 50
XlFileFormat = xlOpenXMLWorkbookMacroEnabled <=> File Extension = "xlsm" : Value = 52
 
Upvote 0
Thầy ơi! nhờ Thầy "soi sáng" em viết thành công "ép" người ta phải nhập số tờ (hoặc bấm Cancel) rồi @$@!^%, đúng là "Không thầy đố mày làm nên", em cám ơn thấy rất rất nhiều.

Code thế này

Mã:
Dim SoTo, Text1 As String, Text2 As String, Text3 As String
      Const default = 1
  Text1 = "Ha4y nha65p so61 to72 nha65p xong click OK ma85c d9inh la2 1 to72"
  SoTo = Application.InputBox(UniConvert(Text1, "VNI"), "THÔNG BÁO", default)
  If SoTo = "False" Then
    Sheets(23).Select
    Exit Sub
  ElseIf SoTo = "" Then
    Text2 = "Ba5n chu7a nha65p so61 to72 hãy nha65p la5i"
    Text3 = "Hay nhap so to"
    MessageBox Application.hwnd, StrPtr(UniConvert(Text2, "VNI")), StrPtr("THÔNG BÁO"), vbOKOnly
Do Until SoTo <> ""
     SoTo = Application.InputBox(UniConvert(Text3, "VNI"), "THÔNG BÁO")
     If SoTo = "False" Then Exit Sub
Loop
     'Làm gì nữa tùy bạn
    Else
    'Làm gì nữa tùy bạn
End If
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Checkbox=True thì gán số liệu từ sheet này sang sheet kia

Em có thử viết code
Nếu Checkbox = True thì gán các số liệu từ Sheet Form Sang Sheet Data, nhưng em thấy code chạy xong thì nó không gán số liệu qua. Em không biết code em sai ở đâu, nhờ các anh chị hướng dẫn giúp, em cảm ơn
Mã:
Sub Text()
    Dim eR As Long
    Dim Rng3 As Range
    On Error Resume Next
    '******************* tim dong cuoi cua Sheet Data
    Set Rng3 = ActiveSheet.UsedRange
    eR = Sheets("Data").Columns("A:AB").Find("*", Rng3(1, 1), , , xlByRows, xlPrevious).Row + 1


    MsgBox eR
    '********************


    If CheckBox1 = True Then
        With S002
            .Cells(eR, 1).Value = S001.[E2]
            .Cells(eR, 2).Value = S001.[G2]
        End With
    End If
End Sub
Cho em hỏi thêm nếu thay AB thành B trong
Mã:
eR = Sheets("Data").Columns("A:[COLOR=#0000ff][B]AB[/B][/COLOR]").Find("*", Rng3(1, 1), , , xlByRows, xlPrevious).Row + 1
thì MgsBox eR thông báo là o ???? đúng ra là 10
 

File đính kèm

Upvote 0
cho em chen ngang với
Mã:
Sub msgboxx()
test = MsgBox("ba" & ChrW(803) & "n v" & ChrW(432) & ChrW(768) & "a cha" & ChrW(803) & "y code", 1, "Thông ba" & ChrW(769) & "o")
End Sub
tại sao xuất hộp thoại lại ra chữ tùm lum hết vậy ạ.
 
Upvote 0
Em có thử viết code
Nếu Checkbox = True thì gán các số liệu từ Sheet Form Sang Sheet Data, nhưng em thấy code chạy xong thì nó không gán số liệu qua. Em không biết code em sai ở đâu, nhờ các anh chị hướng dẫn giúp, em cảm ơn
Mã:
Sub Text()
    Dim eR As Long
    Dim Rng3 As Range
    On Error Resume Next
    '******************* tim dong cuoi cua Sheet Data
    Set Rng3 = ActiveSheet.UsedRange
    eR = Sheets("Data").Columns("A:AB").Find("*", Rng3(1, 1), , , xlByRows, xlPrevious).Row + 1


    MsgBox eR
    '********************


    If CheckBox1 = True Then
        With S002
            .Cells(eR, 1).Value = S001.[E2]
            .Cells(eR, 2).Value = S001.[G2]
        End With
    End If
End Sub
Cho em hỏi thêm nếu thay AB thành B trong
Mã:
eR = Sheets("Data").Columns("A:[COLOR=#0000ff][B]AB[/B][/COLOR]").Find("*", Rng3(1, 1), , , xlByRows, xlPrevious).Row + 1
thì MgsBox eR thông báo là o ???? đúng ra là 10
Bạn thử dùng code này xem sao:

Mã:
Sub Test()
    If S001.CheckBox1 Then
        Dim eR As Long
        With S002
            '******************* tim dong cuoi cua Sheet Data
            eR = .Range("A65536").End(xlUp).Row + 1
            '********************
            MsgBox eR
            '********************
            .Cells(eR, 1).Value = S001.Range("E2")
            .Cells(eR, 2).Value = S001.Range("G2")
        End With
    End If
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn thử dùng code này xem sao:

Mã:
Sub Test()
    If S001.CheckBox1 Then
        Dim eR As Long
        With S002
            '******************* tim dong cuoi cua Sheet Data
            eR = .Range("A65536").End(xlUp).Row + 1
            '********************
            MsgBox eR
            '********************
            .Cells(eR, 1).Value = S001.Range("E2")
            .Cells(eR, 2).Value = S001.Range("G2")
        End With
    End If
End Sub
Chuyển qua xác định eR kiểu của anh nó chạy còn làm như của em code kg chạy -> không hiểu tại sao
Có cách nào xác định eR giống như bài trên (#276) của em khg, vì em đang dùng chung cho 1 bảng tính. Em cảm ơn
 
Upvote 0
cho em chen ngang với
Mã:
Sub msgboxx()
test = MsgBox("ba" & ChrW(803) & "n v" & ChrW(432) & ChrW(768) & "a cha" & ChrW(803) & "y code", 1, "Thông ba" & ChrW(769) & "o")
End Sub
tại sao xuất hộp thoại lại ra chữ tùm lum hết vậy ạ.
Bạn phải có một hàm để điều khiển MsgBox chuyển nội dung thành tiếng Việt mới được!
 
Upvote 0
Chuyển qua xác định eR kiểu của anh nó chạy còn làm như của em code kg chạy -> không hiểu tại sao
Có cách nào xác định eR giống như bài trên (#276) của em khg, vì em đang dùng chung cho 1 bảng tính. Em cảm ơn
Vậy làm thế này đi:

Mã:
        Set Rng3 = S002.UsedRange
        eR = S002.Columns("A:B").Find("*", Rng3(1, 1), , , xlByRows, xlPrevious).Row + 1
 
Upvote 0
vậy làm thế nào ạ. cái đso là em dùng hàm unitovba để chuyển từ unicode qua vba rồi.
Bạn có chuyển nó cũng vậy thôi, vì đó không phải là hàm tạo UniMsgBox.

Bạn cũng có thể không dùng hàm gì cả, chỉ cần làm như sau thì nó vẫn hiển thị MsgBox tiếng Việt, vả lại rất mượt mà:

Mã:
Sub Test()
    Dim TestMsgBox As Long
    Dim MsgTitle As String, MsgText As String
    
    MsgTitle = "Thông Báo"
    MsgText = "Ba" & ChrW(803) & "n v" & ChrW(432) & ChrW(768) & "a cha" & ChrW(803) & "y code"


    TestMsgBox = Application.Assistant.DoAlert( _
                                                MsgTitle, _
                                                MsgText, _
                                                msoAlertButtonOK, _
                                                msoAlertIconInfo, _
                                                msoAlertDefaultFirst, _
                                                msoAlertCancelDefault, _
                                                False)
End Sub
 
Upvote 0
Mình cũng có Tham khảo được hàm API Việt hóa 100% có dấu Và chỉnh sửa lại một tí mới chạy được úp lên cho các Bạn Tham khảo
PHP:
Function HookProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long    Dim hStatic1 As Long, hStatic2 As Long, hButton As Long, hFont As Long    HookProc = CallNextHookEx(hDlgHook, nCode, wParam, lParam)    If nCode = HCBT_ACTIVATE Then        hFont = CreateFont(13, 0, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, FONT_FACE)        ''''''''''''''''''''''        hStatic1 = FindWindowEx(wParam, 0&, "Static", vbNullString)        hStatic2 = FindWindowEx(wParam, hStatic1, "Static", vbNullString)        If hStatic2 = 0 Then hStatic2 = hStatic1        SendMessage hStatic2, WM_SETFONT, hFont, ByVal 1&        Rem Dong        hButton = FindWindowEx(wParam, 0&, "Button", "OK")        SendMessage hButton, WM_SETFONT, hFont, 0        SetWindowTextW hButton, StrPtr(ChrW(272) & ChrW(243) & "ng")        Rem Co        hButton = FindWindowEx(wParam, 0&, "Button", "&Yes")        SendMessage hButton, WM_SETFONT, hFont, 0        SetWindowTextW hButton, StrPtr("C" & ChrW(243))        Rem Khong        hButton = FindWindowEx(wParam, 0&, "Button", "&No")        SendMessage hButton, WM_SETFONT, hFont, 0        SetWindowTextW hButton, StrPtr("Kh" & ChrW(244) & "ng")        Rem Thu lai        hButton = FindWindowEx(wParam, 0&, "Button", "&Retry")        SendMessage hButton, WM_SETFONT, hFont, 0        SetWindowTextW hButton, StrPtr("Th" & ChrW(&H1EED) & " L" & ChrW(&H1EA1) & "i")        Rem Thoat        hButton = FindWindowEx(wParam, 0&, "Button", "Cancel")        SendMessage hButton, WM_SETFONT, hFont, 0        SetWindowTextW hButton, StrPtr("Tho" & ChrW(225) & "t")        ''''''''''''''''''''''        UnhookWindowsHookEx hDlgHook    End IfEnd Function
đầy dủ trong File
 

File đính kèm

Upvote 0
Thầy ơi! nhờ Thầy "soi sáng" em viết thành công "ép" người ta phải nhập số tờ (hoặc bấm Cancel) rồi @$@!^%, đúng là "Không thầy đố mày làm nên", em cám ơn thấy rất rất nhiều.

Code thế này

Mã:
Dim SoTo, Text1 As String, Text2 As String, Text3 As String
      Const default = 1
  Text1 = "Ha4y nha65p so61 to72 nha65p xong click OK ma85c d9inh la2 1 to72"
  SoTo = Application.InputBox(UniConvert(Text1, "VNI"), "THÔNG BÁO", default)
  If SoTo = "False" Then
    Sheets(23).Select
    Exit Sub
  ElseIf SoTo = "" Then
    Text2 = "Ba5n chu7a nha65p so61 to72 hãy nha65p la5i"
    Text3 = "Hay nhap so to"
    MessageBox Application.hwnd, StrPtr(UniConvert(Text2, "VNI")), StrPtr("THÔNG BÁO"), vbOKOnly
Do Until SoTo <> ""
     SoTo = Application.InputBox(UniConvert(Text3, "VNI"), "THÔNG BÁO")
     If SoTo = "False" Then Exit Sub
Loop
     'Làm gì nữa tùy bạn
    Else
    'Làm gì nữa tùy bạn
End If
End Sub

Vầy gọn hơn:
Mã:
  Dim SoTo, Text1 As String, Text2 As String, default
  default = 1
  Text1 = "Ha4y nha65p so61 to72 nha65p xong click OK ma85c d9inh la2 1 to72"
  Text2 = "Ba5n chu7a nha65p so61 to72 hãy nha65p la5i"
  Do While SoTo = ""
    SoTo = Application.InputBox(UniConvert(Text1, "VNI"), "THÔNG BÁO", default)
    If SoTo = "" Then MessageBox Application.hwnd, StrPtr(UniConvert(Text2, "VNI")), StrPtr("THÔNG BÁO"), vbOKOnly
  Loop
  If SoTo = "False" Then
    Sheets(23).Select
    Exit Sub
  Else
    ''Làm gì tuy ý
  End If
 
Upvote 0
Vầy gọn hơn:
Mã:
  Dim SoTo, Text1 As String, Text2 As String, default
  default = 1
  Text1 = "Ha4y nha65p so61 to72 nha65p xong click OK ma85c d9inh la2 1 to72"
  Text2 = "Ba5n chu7a nha65p so61 to72 hãy nha65p la5i"
  Do While SoTo = ""
    SoTo = Application.InputBox(UniConvert(Text1, "VNI"), "THÔNG BÁO", default)
    If SoTo = "" Then MessageBox Application.hwnd, StrPtr(UniConvert(Text2, "VNI")), StrPtr("THÔNG BÁO"), vbOKOnly
  Loop
  If SoTo = "False" Then
    Sheets(23).Select
    Exit Sub
  Else
    ''Làm gì tuy ý
  End If

Quả đúng Thầy vẫn là "Thầy" em vẫn là "Ếch ngồi đáy giếng", code vừa ngắn vừa hay chạy cũng gọn nhẹ hơn. Em xin cám ơn Thầy rất nhiều ạ.
 
Upvote 0
Web KT

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

Back
Top Bottom