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:
PHP:
Public Function DK() As Boolean
  If (TxtA <= 0 Or TxtB > 100) Or (TxtB <= 0 Or TxtB > 100) Or (TxtC <= 0 Or TxtC > 100) Then 
    MsgBox "Mot trong cac gia tri chi nam trong khoang 0-100", vbApplicationModal
    TxtA = 0: TxtB = 0: TxtC = 0
    Dieukien = False
Else
    Dieukien = True
End If
End Function


PHP:
Private Sub CmbTH_Click()
If DK() = False Then
    Exit Sub
End if
.........


Trong đây
TxtA,TxtB,TxtC là tên textbox.


Nhờ anh, chị kiểm tra giúp xem trong đoạn code trên bị lỗi gì, mà khi em nhập dữ liệu vào txtA, dù không nằm trong khoảng rằng buộc từ 0--->100 Cũng xuất hiện Msgbox báo lỗi.

Vậy chính xác là bạn muốn gì? "Nằm trong khoảng thì báo lỗi" hay "KHÔNG nằm trong khoảng thì báo lỗi"?
Vì code ở trên là "KHÔNG nằm trong khoảng thì báo lỗi". Vậy khi bạn nhập trong TxtA giá trị "không nằm trong khoảng rằng buộc từ 0--->100" thì nó báo lỗi là đúng rồi còn gì?
Câu hỏi của bạn không chính xác. Phải là: "Tại sao hàm DK luôn trả về FALSE cho dù nhập giá trị trong hay ngoài khoảng 0 -100?"
Bạn thử nghĩ xem, nếu bạn nhập giá trị "đúng" thì làm gì có MsgBox "nhẩy" ra mà bạn dùng từ "Cũng xuất hiện Msgbox báo lỗi"? MsgBox không luôn luôn nhẩy ra nhưng hàm DK luôn luôn trả về FALSE vì bạn có Dieukien = FALSE (TRUE), Hàm của bạn tên là DK cơ mà, chứ có tên là Dieukien đâu.
Sửa lại (txtA <= 0 Or txtB > 100) thành (txtA <= 0 Or txtA > 100)
và
Dieukien = False(TRUE) thành DK = False(TRUE) nhé
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn dùng code này thử xem:
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
Dim MyData As DataObject
Set MyData = New DataObject
MyData.SetText ActiveCell.Value
MyData.PutInClipboard
End Sub
Bạn ơi mình đã thử code này rồi nhưng không được. Bạn kiểm tra lại giúp mình với
 
Upvote 0
Cho em hỏi Code của em sửa thế nào cho đúng

Em viết code sau (ý em là ô A5 của Sheet 2 = ô A1 của Sheet đang đứng)

PHP:
Sub tinh()
Sh As String
Sh = "='" & AtiveSheet.Name & "'!"
Sheet2.[A5] = Sh & "A1"
End Sub
thì code trên phải sửa thế nào ah?
 
Upvote 0
Em viết code sau (ý em là ô A5 của Sheet 2 = ô A1 của Sheet đang đứng)

PHP:
Sub tinh()
Sh As String
Sh = "='" & AtiveSheet.Name & "'!"
Sheet2.[A5] = Sh & "A1"
End Sub
thì code trên phải sửa thế nào ah?
Ít nhất là có thể sửa như vầy (chú ý chỗ màu đỏ):
Mã:
Sub tinh()
    [COLOR=#FF0000][B]Dim [/B][/COLOR]Sh As String
    Sh = "='" & A[COLOR=#FF0000][B]c[/B][/COLOR]tiveSheet.Name & "'!"
    Sheet2.[A5] = Sh & "A1"
End Sub
 
Upvote 0
Em chưa hiểu tại sao lại có hai dấu ' làm gì? Em đọc Code mẫu thấy có nhưng không hiểu

Sh = "='" & ActiveSheet.Name & "'!"
 
Upvote 0
Em viết code sau (ý em là ô A5 của Sheet 2 = ô A1 của Sheet đang đứng)

PHP:
Sub tinh()
Sh As String
Sh = "='" & AtiveSheet.Name & "'!"
Sheet2.[A5] = Sh & "A1"
End Sub
thì code trên phải sửa thế nào ah?
Thế sao bạn không ghi vầy cho khỏe

Mã:
Sheet2.Range("A5").Value = ActiveSheet.Range("A1").Value
Cần gỉ phải khai báo biến
Còn vụ dấu nháy này:
Em chưa hiểu tại sao lại có hai dấu ' làm gì? Em đọc Code mẫu thấy có nhưng không hiểu

Sh = "='" & ActiveSheet.Name & "'!"
Là vì phòng trường hợp tên sheet có khoảng trắng hoặc có ký tự số thì nó... phải vậy
Thí nghiệm:
- Sửa tên của ActiveSheet thành Dau Thi Van
- Tại Sheet2, cell A5, tạo công thức liên kết đến A1 của sheet Dau Thi Van
- Xong, xem tại công thức trên thanh Formula, sẽ thấy có dạng thế này ='Dau Thi Van'!A1 <--- Có dấu nháy 2 đầu
Kết luận: Trong mọi trường hợp, cứ thêm 2 dấu nháy đơn cho chắc
 
Lần chỉnh sửa cuối:
Upvote 0
Em chưa hiểu tại sao lại có hai dấu ' làm gì? Em đọc Code mẫu thấy có nhưng không hiểu

Sh = "='" & ActiveSheet.Name & "'!"
Có 2 dấu ' là để phòng trường hợp tên sheet có khoảng trắng hoặc có dấu tiếng Việt.
Bạn thử nghiệm: Tại ô A5 của Sheet2, bạn gõ =Sheet1!A1 (gõ dấu = và chọn ô A1 trên Sheet1). Bây giờ bạn đổi tên Sheet1 thành Giải pháp Excel rồi nhìn lại công thức tại ô A5 lúc nãy xem có gì thay đổi.
 
Upvote 0
Em có 1 file *.xlt trong file này có rất nhiều Sheet nhưng nó chỉ hiển thị 3 sheet, các sheet khác bị ẩn không biết cho nó hiện lên thế nào. Em vốn kiến thức kém, bác nào chỉ giáo cho em với.
File này chỉ tồn tại trên ID của từng máy 7 ngày, nếu không xác nhận thì nó tự xóa em nghĩ code của nó đây:
Private Sub Workbook_Open()
On Error Resume Next
TT1.Visible = xlSheetVeryHidden
TT2.Visible = xlSheetVeryHidden
TT3.Visible = xlSheetVeryHidden
TT4.Visible = xlSheetVeryHidden
TT5.Visible = xlSheetVeryHidden
TT6.Visible = xlSheetVeryHidden
TT7.Visible = xlSheetVeryHidden
S4.Visible = xlSheetVeryHidden
'Tao doi tuong dich vu WMI
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
'Tim cac CPU
Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor")
'Lap hien thi ID cua tung CPU
For Each objItem In colItems
ID_CPU = objItem.ProcessorId
Next
'=====
If S4.Range("C2").Value = "" Then
S4.Range("C2").Value = ID_CPU
S4.Range("C3").Value = 10000
S4.Range("C4").Value = Date * 1
End If
'=====
S4.Range("C5").Value = ID_CPU

If S4.Range("C2").Value <> S4.Range("C5").Value Then
S4.Range("C3").Value = 3
End If
'=====
Songayhanche = S4.Range("C3").Value
Ngaybatdau = S4.Range("C4").Value
'=====
'Bat dau so sanh. Neu qua han thi xoa file *.xlt
Ngayhientai = Date * 1 'Ngay hien tai
Ngaysosanh = Val(Ngaybatdau) + Val(Songayhanche) 'Gioi han su dung
If Ngayhientai >= Ngaysosanh Then
Application.DisplayAlerts = False
ThisWorkbook.ChangeFileAccess xlReadOnly
Kill ThisWorkbook.FullName
ThisWorkbook.Close False
Else
S2.Range("C8").Select
End If


End Sub


Em không hiểu đoạn code này bác nào giải thích giúp em hoặc chỉ cho em cách thay đổi, nói thì dài dòng lắm nếu bác nào ở Hoàng Mai thì cho em lĩnh hội nhé.
Cảm ơn các bác trước.

Email: ngocanhwin@gmail.com
 
Upvote 0
Sao không có bác nào giúp em vậy?

Nếu muốn hiện hết sheet lên, rất dễ, bạn đặt vào module và cho chạy code này:

PHP:
Sub HienSheet()
    Dim sh As Worksheet
    For Each sh In ActiveWorkbook.Worksheets
        sh.Visible = xlSheetVisible
    Next
End Sub
 
Upvote 0
Nếu muốn hiện hết sheet lên, rất dễ, bạn đặt vào module và cho chạy code này:

PHP:
Sub HienSheet()
    Dim sh As Worksheet
    For Each sh In ActiveWorkbook.Worksheets
        sh.Visible = xlSheetVisible
    Next
End Sub

Cảm ơn bác nhưng còn cái đoạn code trên của em thì làm thế nào đê không bị check thời gian nữa vậy? Bác giúp em luôn nhé
 
Upvote 0
Nhờ các anh chị giup đỡ viết đoạn code trong bảng tính Excel có định hạn thời gian sử dụng là 30 ngày. Mục đích là để nếu bảng tính đó bị thất lạc thì trong hạn 30 ngày kể từ khi đặt định hạn hoặc từ khi kích hoạt sẽ tự lỗi(ko sử dụng được) mà không phải đặt mật khẩu khi mở. hay nói cách khác là cho dùng thử. Trân trọng cảm ơn
 
Upvote 0
Nhờ anh em giải thích code trong VBA này giùm với

Nhờ anh em giải thích code trong VBA này giùm với.
Cảm ơn trước nhiều nha.
 

File đính kèm

  • Dubaohoabinh.rar
    97.7 KB · Đọc: 24
Upvote 0
Mã:
[AB12].CurrentRegion.Offset(1).Copy Destination:=Sh.[B9]
Thầy cô & anh chị cho em hỏi:
1/Thông thường thuộc tính Offset có 2 đối số, sao ở trên có 1 đối số
2/ Có thể giải thích cho em đọan code trên.
Em cảm ơn.
 
Upvote 0
1. Đối số thứ 2 (dời theo column) được phép bỏ qua, nghĩa là không dời (tương đương với: Offset(1, 0))
2. Giải thích: Bắt đầu tại ô AB12 của sheet hiện thời, xác định (tự động) vùng liên tục (bao quanh bởi các cột, dòng trống) có chứa ô AB12, sau đó dời xuống 1 dòng để thực hiện lệnh Copy đồng thời Paste dữ liệu vào vị trí ô B9 của sheet Sh.
 
Upvote 0
Cho em hỏi thêm Resize(1) thì tương đương Resize(1,0) ???
Em cảm ơn!
 
Upvote 0
Cho em hỏi thêm Resize(1) thì tương đương Resize(1,0) ???
Em cảm ơn!

Cả 2 đối số của Offset và Resize, đối số nào cũng được phép bỏ qua
- Offset(lR) ---> Dịch chuyển lR dòng, không dịch chuyển cột
- Offset(, lC) ---> Dịch chuyển lC cột, không dịch chuyển dòng
- Resize(lR) ---> Thay đổi số dòng thành lR dòng, không thay đổi số cột
- Resize(, lC) ---> Thay đổi số cột thành lC cột, không thay đổi số dòng
vậy thôi
Mấy cái này đúng ra khỏi cần hỏi, cứ thí nghiệm cái sẽ biết ngay
 
Upvote 0
Chào các bạn! Mình có chút vấn đề về VBA mong các bạn giúp đỡ:
Mình tạo 1 userform, muốn khi mở file excel đó, nó chỉ hiện ra form mà không cho hiện file excel (Tức là chỉ hiện lên form nhập số liệu mà không hiện excel) khi tắt form thì file excel đó cũng tắt. Bổ sung thêm nút quay về excel (thoát từ form về excel)
Người nhập số liệu vào chỉ nhìn thầy Form thôi. Muốn vào xem bảng phải bấm vào nút "quay về excel"

Cảm ơn các bạn!
 
Upvote 0
Chào các bạn! Mình có chút vấn đề về VBA mong các bạn giúp đỡ:
Mình tạo 1 userform, muốn khi mở file excel đó, nó chỉ hiện ra form mà không cho hiện file excel (Tức là chỉ hiện lên form nhập số liệu mà không hiện excel) khi tắt form thì file excel đó cũng tắt. Bổ sung thêm nút quay về excel (thoát từ form về excel)
Người nhập số liệu vào chỉ nhìn thầy Form thôi. Muốn vào xem bảng phải bấm vào nút "quay về excel"

Cảm ơn các bạn!

Bạn muốn ẩn hiện excel ở đằng sau form thì bạn dùng thuộc tính Visible của Application. Tức là sử dụng Application.Visible=True hoặc False nếu muốn hiện/ẩn. Nhưng lưu ý rằng nếu ẩn rồi thì nhớ cho nó hiện lại ở phút cuối (tức là trước lúc thoát hoàn toàn), nếu không thì bạn tắt form nhưng thực sự là Excel vẫn chưa tắt và nó cứ nằm lỳ trong Window của bạn đấy
 
Upvote 0
Lần chỉnh sửa cuối:
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