Những câu hỏi về code, xin giải thích các code, đề nghị các bạn gửi vào đây

Liên hệ QC
Status
Không mở trả lời sau này.

ST-Lu!

Love Wingchun
Tham gia
19/8/08
Bài viết
730
Được thích
546
Nghề nghiệp
Xích lô một thời
Kể từ hôm nay, tất cả những câu hỏi nhờ giải thích dùm một đoạn code, hay là hỏi những vấn đề linh tinh gì liên quan đến cách viết code, đề nghị các bạn gửi chung vào đây.

Những đề tài mới với tiêu đề: "Nhờ giải thích dùm đoạn code", mà không nói rõ là code gì, code dùng để làm gì, sẽ bị xóa.

BQT

----------------------------------------------------------------------------------------------------------------


Em xin được hỏi 2 đoạn code sau có tương đương nhau ?

Cells(Cells.Rows.Count, 1).End(xlUp).Row có tương đương với [A65000].End(xlup).row

Cám ơn các anh chỉ giáo
 
Chỉnh sửa lần cuối bởi điều hành viên:
Fần dữ liệu cột 'A' sẽ có vấn đề fát sinh cần xử tiếp.

--=0 !$@!! }}}}} ||||| -+*/ -\\/.

Cái đó dễ mà bác, công thức là do chủ topic tạo thì chủ topic có cách xử lý thôi.

Nói thêm:

Bạn ấy cần phải viết công thức cho A4 như ở dưới rồi kéo xuống sẽ không xảy ra lỗi này nữa:

Công thức cho A4:
PHP:
=IF(B4="","",MAX($A$3:A3)+1)
 
Lần chỉnh sửa cuối:
Upvote 0
Cho em hỏi một vấn đề, mỗi lần dùng lệnh macro thì không Undo được. Có cách nào có thể khắc phục được hạn chế trên không nha.
 
Upvote 0
Cho em hỏi một vấn đề, mỗi lần dùng lệnh macro thì không Undo được. Có cách nào có thể khắc phục được hạn chế trên không nha.
Chỉ có 1 cách: Đóng và không lưu file
Làm thì phải cẩn thận chứ bạn! Sai ráng chịu thôi
 
Upvote 0
Bạn thử làm theo cách sau:
Vào VBA (chỗ Marco1 của bạn), thêm đoạn code sau:
Mã:
Sub Delete_rows_Empty()
    'Bạn thay đổi điều kiện lọc trong đoạn code trên (phần chữ màu đỏ - nếu cần)
    ActiveSheet.Range("$A$3:$C$12").AutoFilter Field:=3, Criteria1:=[COLOR=#ff0000]"="
[/COLOR]    Range("A6:C12").Select
    Selection.SpecialCells(xlCellTypeVisible).Select
    Selection.Delete Shift:=xlUp
    ActiveSheet.ShowAllData
    Range("C5").Select
End Sub
Đoạn code của bác nvson có hạn chế là: 1. khi cột cột C4 - C12 không bị rổng thì thực hiện AutoFilter thu hết dử liệu. 2. Dùng lệnh macro này nó xóa luôn nguyên dòng, không xóa dòng trong phạm vi từ A đến C
 
Upvote 0
các bác giúp em đoạn code chữ chạy trên form này khi em đưa vào vba excel thì khi chạy code vào lại excel không chỉnh sửa được
Private Sub UserForm_Activate()
Dim PauseTime
On Error Resume Next
nhan1:
PauseTime = 0.2
Start = Timer
Do While Timer < Start + PauseTime
DoEvents
Loop

l = Len(Chaychutrenformnghiviec.Caption)
Chaychutrenformnghiviec.Caption = Right(Chaychutrenformnghiviec.Caption, l - 1) + Left(Chaychutrenformnghiviec.Caption, 1)

GoTo nhan1

End Sub
 
Upvote 0
các bác giúp em đoạn code chữ chạy trên form này khi em đưa vào vba excel thì khi chạy code vào lại excel không chỉnh sửa được
Private Sub UserForm_Activate()
Dim PauseTime
On Error Resume Next
nhan1:
PauseTime = 0.2
Start = Timer
Do While Timer < Start + PauseTime
DoEvents
Loop

l = Len(Chaychutrenformnghiviec.Caption)
Chaychutrenformnghiviec.Caption = Right(Chaychutrenformnghiviec.Caption, l - 1) + Left(Chaychutrenformnghiviec.Caption, 1)

GoTo nhan1

End Sub

Bạn thử tham khảo bài này tại link dưới đây:
http://www.giaiphapexcel.com/forum/showthread.php?9802-Chữ-chạy-trên-form&p=67809#post67809
 
Upvote 0
Tôi có đoạn code sau. Có mấy chỗ không hiểu (Các dòng in đậm) mong mọi người vào chỉ giúp.

Private Sub cmdAdd_Click()
Dim iRow As Long
Dim ws As Worksheet
Set ws = Worksheets("TONGHOP")

iRow = ws.Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Row

If Trim(Me.txtName.Value) = "" Then
ChangeColors
Me.txtName.SetFocus

MsgBox "VUI LONG DIEN TEN KHACH HANG", vbCritical + vbOKOnly, "TEN KHACH"

Exit Sub

Ở đoạn code trên từ ChangeColors có tác dụng gì? Từ Me có tác dụng gì trong các đoạn code?
 
Lần chỉnh sửa cuối:
Upvote 0
Ở đoạn code trên từ ChangeColors có tác dụng gì?
Bạn xem ở đâu đó có 1 thủ tục mang tên như vậy;

Từ Me có tác dụng gì trong các đoạn code?
(ó nghĩa là cho tôi, của tôi, là bản thân tôi

PHP:
Private Sub cmdAdd_Click()
Dim iRow As Long
Dim ws As Worksheet
'Khai báo như trên ws là 1 biến đối tượng, mà đã fàm là biến đối '
'tượng ta fải dùng từ khóa Set VBA mới hiểu & đòng í'
[B]Set[/B] ws = Worksheets("TONGHOP")
' Rows.Count là số hàng trên trang tính, 2 là cột "b"'
 'Dòng lệnh này có nghĩa là lấy dòng trống ngay dưới dòng có dữ liệu'
'cuối cùng của cột "B" đem gán vố biến iRow'
iRow = [B]ws.Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Row[/B]
'Tạm hiểu là nếu TextBox mang tên txtName của tôi là rỗng thì'
If [B]Trim(Me.txtName.Value) = "" Then[/B]
    [B]ChangeColors[/B]
  Me.txtName.SetFocus
     
  MsgBox "VUI LONG DIEN TEN KHACH HANG", vbCritical + vbOKOnly, "TEN KHACH"
  
  Exit Sub
 
Upvote 0
Code này tôi sẽ rút gọn thành:
PHP:
Private Sub CommandButton1_Click()
  Dim Sh As Worksheet
  For Each Sh In ThisWorkbook.Worksheets
    Sh.PageSetup.LeftHeader = "&8&U" & TextBox1.Text
  Next
End Sub
Dùng đoạn code trên để thâm nhập header làm file mỗi lần nhập khai báo header chạy rất chậm nếu trong file nhiều sheet. Có cách nào để tăng tốc cho đoạn code trên không nha
 
Upvote 0
Dùng đoạn code trên để thâm nhập header làm file mỗi lần nhập khai báo header chạy rất chậm nếu trong file nhiều sheet. Có cách nào để tăng tốc cho đoạn code trên không nha
Chậm hay nhanh là do dữ liệu thôi bạn à
===> Xem lại dữ liệu của mình nhé
 
Upvote 0
Em gửi cả file đính kèm mong các huynh tỷ giúp đỡ:
Em đang làm 1 file giống hướng dẫn của Bác Duyệt mà chưa thành công, file là chọn mã sản phẩm từ 1 bảng dữ liệu có sẵn
Tại sheet 2, cột A em chuột phải thì báo lỗi code

Các huynh tỷ tìm lỗi và sửa cho em với
 

File đính kèm

  • Data.xls
    46 KB · Đọc: 11
Lần chỉnh sửa cuối:
Upvote 0
các anh chị giúp em sửa lại pass ở đoạn code dưới đây với: ví dụ khi gõ pass 123 vào thì để nó thành dấu chấm (...)

Dim OldValue
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
OldValue = Target.Cells(1, 1)
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Not IsEmpty(OldValue) And (OldValue <> Target.Cells(1, 1)) Then
If InputBox("Password:", "Yeu cau nhap Password") <> "123l" Then
Application.Undo
End If
End If
End Sub
 
Upvote 0
các anh chị giúp em sửa lại pass ở đoạn code dưới đây với: ví dụ khi gõ pass 123 vào thì để nó thành dấu chấm (...)

Dim OldValue
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
OldValue = Target.Cells(1, 1)
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Not IsEmpty(OldValue) And (OldValue <> Target.Cells(1, 1)) Then
If InputBox("Password:", "Yeu cau nhap Password") <> "123l" Then
Application.Undo
End If
End If
End Sub
Nội cái chuyện xử lý dấu * trên InputBox thì code của nó còn dài gấp mấy lần code chính của bạn nữa đấy --> Có đáng không?
Vậy bạn nên tìm hướng khác, chẳng hạn thiết kế UserForm với 1 TextBox, nó có hổ trợ vụ biến pass thành dấu *
 
Upvote 0
Nhờ giúp đỡ tạo 1 nút lệnh trên Ribbon

Tôi ở Đắk LăK! Xin cả nhà giúp đỡ tạo 1 nút lệnh trên thanh công cụ
Ribbon nhằm để kiểm tra khi nhập liệu (có File kèm những thông tin liên quan). Xin cảm ơn
 
Lần chỉnh sửa cuối:
Upvote 0
Giải thích VBA

Anh chị nào hiểu đoạn code dưới đây làm ơn giải thích giúp em với ạ!
PHP:
Private Sub Workbook_Open()
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.EnableCancelKey = xlDisabled
    On Error Resume Next
    ThisWorkbook.Activate
    Application.Calculation = xlAutomatic
    Application.ScreenUpdating = False
If Worksheets(" Sheet1").Range("NUM").Value < 7 Then
    Application.DisplayAlerts = False
    ActiveWindow.Visible = False
    ThisWorkbook.Close
    Exit Sub
    End If
    ActiveWindow.Visible = True
    Application.ScreenUpdating = False
    ThisWorkbook.Unprotect Password:=" 12345 "
    With Sheets(" Sheet1")
    .Activate
    .Range("HN32").Calculate
    .Range("HN33").Calculate
    Range("A730").Select
    End With
    If Worksheets(" Sheet1").Range("NA").Value = 0 Then
    Application.ScreenUpdating = False
    With Application
        .Calculation = xlManual
        .ScreenUpdating = False
        .EnableEvents = False
        .DisplayAlerts = False
        .StatusBar = StatusBarMsg
        .EnableCancelKey = xlErrorHandler
    End With
    For Each ThisSheet In ThisWorkbook.Sheets
    ThisSheet.Visible = True
    Next ThisSheet
    Sheets("Sheet").Visible = False
    Sheets(2).Select
    For N = 1 To 74
    ActiveWindow.SelectedSheets.Delete
    Next N
    For N = 1 To 16
    Sheets("Sheet").Copy After:=Sheets(1)
    Next N
    ThisWorkbook.Protect Password:=12345
    Dim Temp$
    Temp = Application.InputBox("'" & ActiveWorkbook.Name & "'" & " is protected. Password:", "Password")
    If Temp = "" Then
    GoTo Finally
    End If
    If Temp = "abcde" Then
    GoTo Finally
    Else
    Dim Msg, Style, Title, Help, Ctxt, Response, MyString
    Msg = ("The password you supplied is not correct. Verify that the CAPSLOCK key is off and be sure to use the correct capitalization.")
    Style = vbOKOnly + vbExclamation + vbDefaultButton1
    Title = "Microsoft Office Excel"
    Help = "DEMO.HLP"
    Ctxt = 1000
    Response = Msgbox(Msg, Style, Title, Help, Ctxt)
    End If
Finally:
    Application.ScreenUpdating = False
    Dim Path$
    Application.DisplayAlerts = False
    i = ActiveWorkbook.Path & "/" & ActiveWorkbook.Name
    ActiveWorkbook.SaveAs Filename:=i, Password:=TxtFLFilter, CreateBackup:=False
    ActiveWorkbook.ProtectSharing
    ActiveWindow.Visible = False
    ThisWorkbook.Close
    GoTo Finally
    Else
    Application.ScreenUpdating = False
    ActiveWindow.TabRatio = 0.92
    ThisWorkbook.Unprotect Password:=12345
    Application.ScreenUpdating = False
    If Worksheets(3).Range("H76").Value < 0.1 Then
    Dim Temp$
    Temp = Application.InputBox("'" & ActiveWorkbook.Name & "'" & " is protected. Password:", "Password")
    If Temp = "" Then
    Exit Sub
    End If
    If Temp = "0000" Then
    For N = 4 To 74
    Sheets(N).Activate
    ActiveSheet.Unprotect Password:=12345
    c = Sheets(3).Range("W60").Value
    r = Sheets(3).Range("X60").Value
    Range(Cells(c, 5), Cells(r, 26)).Locked = False
    Next N
    Else
    Dim Msg, Style, Title, Help, Ctxt, Response, MyString
    Msg = ("The password you supplied is not correct. Verify that the CAPSLOCK key is off and be sure to use the correct capitalization.")
    Style = vbOKOnly + vbExclamation + vbDefaultButton1
    Title = "Microsoft Office Excel"
    Help = "DEMO.HLP"
    Ctxt = 1000
    Response = Msgbox(Msg, Style, Title, Help, Ctxt)
    End If
    End If
    N = 0
    For Each Sheet In Sheets()
    N = N + 1
    Sheets(N).Activate
    Sheets(N).Visible = True
    ActiveSheet.Unprotect Password:=12345
    ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
        False, AllowFormattingCells:=False, AllowFormattingColumns:=True, _
        AllowFormattingRows:=True, AllowSorting:=True, Password:=12345
    ActiveSheet.EnableSelection = xlNoRestrictions
    With ActiveWindow
    .DisplayHeadings = False
    .DisplayOutline = False
    End With
    Next
    Application.ScreenUpdating = False
With Sheets("Sheet87")
    .Activate
    .Unprotect Password:=12345
    Range("IPMT").Copy
    Range("ps").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    .Protect Password:=12345
    Range("A730").Select
    End With
    With ActiveWindow
        .DisplayHorizontalScrollBar = True
        .DisplayVerticalScrollBar = True
        .DisplayWorkbookTabs = True
    End With
    ThisWorkbook.Sheets(" Sheet1").Visible = xlVeryHidden
    ThisWorkbook.Sheets("Sheet87").Visible = xlVeryHidden
    ThisWorkbook.Sheets("Sheet86").Visible = xlVeryHidden
    Sheets("Sheet").Visible = False
    ThisWorkbook.Protect Password:=12345
    End If
    Application.ScreenUpdating = False
With Sheets("Sheet0")
    .Activate
    Range("B1").ClearContents
    End With
    Sheets(3).Select
    Application.CommandBars("File").Controls(5).Visible = False
    Application.CommandBars("File").Controls(6).Visible = False
    Application.CommandBars("View").Controls(4).Visible = False
    Application.CommandBars("Tools").Controls(13).Visible = False
    Application.CommandBars("Tools").Controls(14).Visible = False
    Application.CommandBars("Tools").Controls(15).Visible = False
    Application.CommandBars("Tools").Controls(17).Visible = False
    ActiveWindow.DisplayWorkbookTabs = True
    Application.Calculation = xlAutomatic
    ActiveWindow.WindowState = xlMaximized
    Application.EnableEvents = True
    Application.ScreenUpdating = True
Finally:
    Application.StatusBar = ""
End Sub
 
Upvote 0
híc! chẳng lẽ không có ai hiểu để giúp em sao?...
Anh chị nào hiểu đoạn nào thì giải thích giúp em đoạn đó cũng được mà.
 
Upvote 0
híc! chẳng lẽ không có ai hiểu để giúp em sao?...
Anh chị nào hiểu đoạn nào thì giải thích giúp em đoạn đó cũng được mà.
Bạn phải đưa cả file lên thì mới giải thích được chứ, ai rảnh đâu mà giả lập từng thứ một, chẳng hạn:
- Range("Num") là cái gi?
- Range("NA") là cái gì?
Vả lại, code này chắc chắn sẽ báo lỗi tè lè, chạy được đâu mà giải thích
 
Upvote 0
Bạn phải đưa cả file lên thì mới giải thích được chứ, ai rảnh đâu mà giả lập từng thứ một, chẳng hạn:
- Range("Num") là cái gi?
- Range("NA") là cái gì?
Vả lại, code này chắc chắn sẽ báo lỗi tè lè, chạy được đâu mà giải thích
Mong thầy thứ lỗi! File nay` không thể gửi Diễn đàn chung này được vì nó là tài liệu nội bộ.
Em cũng muốn hỏi thầy
Num lấy từ đâu?
NA lấy từ đâu?
File của em chạy không vấn đề gì cả?
Hix kể ra hỏi thể này sẽ khiến mọi người giận nhưng mà biết làm thế nào được.
 
Lần chỉnh sửa cuối:
Upvote 0
Em cũng muốn hỏi thầy
Num lấy từ đâu?
NA lấy từ đâu?
Không xem file nhưng đoán nó là 1 name (vào Define name xem thử)
--------------------------
File của em chạy không vấn đề gì cả?
.
Code này mà bạn chạy được bình thường kể cũng kỳ... Có rất nhiều dòng khai báo biến trùng nhau, chẳng hạn có 2 dòng Dim Temp$, 2 dòng Dim Msg.. vân vân... nếu chạy chắc chắn sẽ báo lỗi "Duplicate declaration in current scope"
--------------------------
Ngoài ra, nếu không có file thì chẳng biết gì mà giải thích cho bạn
 
Upvote 0
Tôi ở Đắk LăK! Xin cả nhà giúp đỡ tạo 1 nút lệnh trên thanh công cụ
Ribbon nhằm để kiểm tra khi nhập liệu (có File kèm những thông tin liên quan). Xin cảm ơn
Bạn copy đoạn code sau nha, bạn chỉ cần bấm nút kiểm tra thì những mã nào nhập sai nó sẽ thông báo và tô máu vàng ở mã bị lỗi đó.
PHP:
Sub Kiemtra()
Dim i As Integer
For i = 6 To 600
If Cells(i, 10) = "D" Then
prompt = "Ma nay nhap sai"
MsgBox (prompt)
Cells(i, 4).Select
With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535
    End With
End If
Next
End Sub
 

File đính kèm

  • Ma dat_thuc hanh.rar
    611.8 KB · Đọc: 35
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