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:
Em gửi file cho dễ hình dung nhé
Tại sheets("Hạch toán") khi cập nhật ô [B5] thì giá sẽ được cập nhật tại vùng [B11:D13]
Em đã test ok trên vài máy tính, nhưng khi đem sang một máy tính đang cần dùng file này thì code ko chạy

Em nghĩ là máy tính người này đang thiếu một thiết lập nào đó

Anh/chị test thử code có chạy ko nhé. Nếu code chạy, xin chỉ giúp em cách để máy bạn em có thể chạy được code

xin cám ơn
 
Lần chỉnh sửa cuối:
Upvote 0
Em đã phát hiện ra là tại máy bạn em "BỊ HIỆN TƯỢNG" sau
- tại sheet2.[B5], Sau khi chọn giá trị từ ô B5 (các máy khác là code sẽ chạy luôn với sự kiện worksheet_change
- Riêng tại máy bạn em lại phải thêm một chặng nữa (F2) vào ô B5 & Enter

sau khi F2 & enter thì code trên mới chạy

Em xin hỏi đây là hiện tượng gì, có cách nào khắc phục không?

Em xin cám ơn
 
Upvote 0
Em đã phát hiện ra là tại máy bạn em "BỊ HIỆN TƯỢNG" sau
- tại sheet2.[B5], Sau khi chọn giá trị từ ô B5 (các máy khác là code sẽ chạy luôn với sự kiện worksheet_change
- Riêng tại máy bạn em lại phải thêm một chặng nữa (F2) vào ô B5 & Enter

sau khi F2 & enter thì code trên mới chạy

Em xin hỏi đây là hiện tượng gì, có cách nào khắc phục không?

Em xin cám ơn
Thì ít ra bạn cũng cho file lên chứ ---> "Chay" thế này thì biết chừng nào mới "tăng dân số" được đây?
 
Upvote 0
To Tường_Vi: Lòng vòng từ chiều tới giờ thì vẫn không thấy file đâu cả, biết đường nào mà lần?!
 
Upvote 0
Em xin phép gửi file ah
 

File đính kèm

  • test.7z
    395.4 KB · Đọc: 43
Upvote 0
đã có 11 một lượt tải, chắc các anh chị thấy code vẫn chạy tốt phải không?

Em vẫn không sao tìm ra được nguyên nhân vì code không chạy (trên máy bạn em) sau khi đã chọn list tại validation (nghĩa là đã có sự kiện worksheet_change)

Code chỉ chạy khi, mình F2 (hoặc nháy đúp) rồi enter

Hic
 
Upvote 0
Xin chỉ giúp cách sử dụng hàm Mid trong VBA

Tôi viết thế này nhưng chưa được, vậy phải viết thế nào mới đúng

PHP:
Sub trich()
i = Mid(Cells(1, 1), ":", Len(Cells(1, 1)))
MsgBox i
End Su
 
Upvote 0
Tôi viết thế này nhưng chưa được, vậy phải viết thế nào mới đúng

PHP:
Sub trich()
i = Mid(Cells(1, 1), ":", Len(Cells(1, 1)))
MsgBox i
End Su

Thế hàm MID trên bảng tính bạn dùng thế nào thì trong VBA cũng dùng như thế
Cú pháp: Mid(Chuổi, vị trí bắt đầu, độ dài)
Ở code trên, vị trí bắt đầu của bạn là ":" sao mà được chứ ---> Nó phải là con số cụ thể
Còn nếu muốn tìm vị trí của dấu ":" thì phải dùng InStr... Ví dụ thế này: InStr(Cells(1,1), ":") (gần giống với hàm FIND trong Excel)
Hoặc nếu muốn tách chuổi từ dấu ":" trở đi thì: Mid(Cells(1, 1), InStr(Cells(1,1), ":"), Len(Cells(1, 1)))
 
Upvote 0
Nhờ sửa giúp code

Em có một code nhập dữ liệu, nay em muốn sau mỗi lần nhập thì form tự động xóa và khi nhập thiếu một cell bắt buộc nào đó thì code thông báo và không cho nhập. Nhờ các bác chỉ bảo, xin cám ơn.

Sub Nhap()
'
'
Sheets("Nhap").Select: Range("B3:B17").Select
Selection.Copy
Sheets("Data").Select
Range("H65535").Select
Selection.End(xlUp).Select
Selection.Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=True
Application.CutCopyMode = False: Sheets("Nhap").Select


End Sub
 
Upvote 0
Em có một code nhập dữ liệu, nay em muốn sau mỗi lần nhập thì form tự động xóa và khi nhập thiếu một cell bắt buộc nào đó thì code thông báo và không cho nhập. Nhờ các bác chỉ bảo, xin cám ơn.

Sub Nhap()
'
'
Sheets("Nhap").Select: Range("B3:B17").Select
Selection.Copy
Sheets("Data").Select
Range("H65535").Select
Selection.End(xlUp).Select
Selection.Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=True
Application.CutCopyMode = False: Sheets("Nhap").Select


End Sub
Sao bạn bạn không đưa file lên để mọi người test?
 
Upvote 0
Vì em nghĩ chỉ thêm dòng lệnh vào code thôi nên tiết kiệm dung lượng chút. Em xin gửi lên ạ.
 

File đính kèm

  • TheoDoiKhoan version1.rar
    203.5 KB · Đọc: 20
Upvote 0
Vì em nghĩ chỉ thêm dòng lệnh vào code thôi nên tiết kiệm dung lượng chút. Em xin gửi lên ạ.
Trong Form nhập của bạn mình thấy chỉ có 3 ô bắt buộc nhập là: D9, D10 và D14. Vậy code có thể là
PHP:
If Sheet1.Range("D9") = "" Or Sheet1.Range("D10") = "" Or Sheet1.Range("D14") = "" Then
    MsgBox "Ban nhap chua du"
   Exit Sub
Else
         Code của bạn......
    Sheet1.Range("D9:D10").ClearContents
    Sheet1.Range("D14").ClearContents
End If
 
Upvote 0
Viehoai ơi viết như thế nào để code không xóa công thức lúc đó chỉ cần viết Sheet1.Range("D9:D14").Clear..."trừ công thức"
 
Upvote 0
Viehoai ơi viết như thế nào để code không xóa công thức lúc đó chỉ cần viết Sheet1.Range("D9:D14").Clear..."trừ công thức"
Những ô nhập là những ô đâu có công thức hả bạn?
(nghĩ cũng lạ, bạn làm được file hoành tráng thế mà hỏi câu không đâu vào đâu nhỉ?)
 
Lần chỉnh sửa cuối:
Upvote 0
Những công thức để hỗ trợ người nhập mà. Tất cả những cell màu xanh đều có công thức mà, trừ D9, D10, D14 thôi.
 
Upvote 0
Cảm ơn Viehoai nhé vì mình thấy có code xóa được như vậy mà ví dụ:
Sub Nhap()
'
'
'
Dim historyWks As Worksheet
Dim inputWks As Worksheet

Dim nextRow As Long
Dim oCol As Long

Dim myRng As Range
Dim myCopy As String
Dim myCell As Range

myCopy = "D6:D14" 'Nguon Du Lieu

Set inputWks = Worksheets("Nhap")
Set historyWks = Worksheets("DaTa")
With historyWks
nextRow = .Cells(.Rows.Count, "A").End(xlUp).Offset(1, 0).Row
End With
With inputWks
Set myRng = .Range(myCopy)
If Sheet1.Range("D9") = "" Or Sheet1.Range("D10") = "" Or Sheet1.Range("D14") = "" Then
MsgBox
"Ban nhap chua du"

Exit Sub
End If
End With
oCol = 1
For Each myCell In myRng.Cells
historyWks.Cells(nextRow, oCol).Value = myCell.Value
oCol = oCol + 1
Next myCell
With inputWks
On Error Resume Next
With .Range(myCopy).Cells.SpecialCells(xlCellTypeConstants)
.ClearContents
Application.GoTo .Cells(1)
End With
On Error GoTo 0
End With
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn Viehoai nhé vì mình thấy có code xóa được như vậy mà ví dụ:
Sub Nhap()
'
'
'
Dim historyWks As Worksheet
Dim inputWks As Worksheet

Dim nextRow As Long
Dim oCol As Long

Dim myRng As Range
Dim myCopy As String
Dim myCell As Range

myCopy = "D6:D14" 'Nguon Du Lieu

Set inputWks = Worksheets("Nhap")
Set historyWks = Worksheets("DaTa")
With historyWks
nextRow = .Cells(.Rows.Count, "A").End(xlUp).Offset(1, 0).Row
End With
With inputWks
Set myRng = .Range(myCopy)
If Sheet1.Range("D9") = "" Or Sheet1.Range("D10") = "" Or Sheet1.Range("D14") = "" Then
MsgBox
"Ban nhap chua du"

Exit Sub
End If
End With
oCol = 1
For Each myCell In myRng.Cells
historyWks.Cells(nextRow, oCol).Value = myCell.Value
oCol = oCol + 1
Next myCell
With inputWks
On Error Resume Next
With .Range(myCopy).Cells.SpecialCells(xlCellTypeConstants)
.ClearContents
Application.GoTo .Cells(1)
End With
On Error GoTo 0
End With
End Sub
Vì khối lượng cell xóa it nên không dùng theo kiểu vậy thôi. Nếu thích thì dùng
PHP:
Sheet1.Range("D9:D14").Cells.SpecialCells(xlCellTypeConstants).ClearContents
 
Upvote 0
Nhờ sửa sai Code Copy

Tôi thực hiện lệnh Copy nhưng không biết sai ở đâu, nhờ các bác chỉ dùm
PHP:
Sub Copy()
Sheets("Sheet1").UsedRange.Copy
Sheets("Sheet2").UsedRange.Paste
End Sub
 
Upvote 0
Tôi thực hiện lệnh Copy nhưng không biết sai ở đâu, nhờ các bác chỉ dùm
PHP:
Sub Copy()
Sheets("Sheet1").UsedRange.Copy
Sheets("Sheet2").UsedRange.Paste
End Sub
Với đối tượng Range, không có phương thức Paste mà chỉ có phương thức PasteSpecial. Bạn sửa lại thành PasteSpecial và chọn tùy chọn thích hợp là được. Tuy nhiên không nên chọn UsedRange ở sheet2 mà chỉ nên chọn 1 ô nào đó thôi để tránh paste thừa, thiếu.
2 câu lệnh trên có thể thay bởi câu lệnh: Sheets("Sheet1").UsedRange.Copy Sheets("Sheet2").[A1]
 
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