Chuyên đề giải đáp những thắc mắc về code VBA (2 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:
Mã:
Sub abc(SH As Worksheet)
'.......................
'''''code
''''''''''
End Sub


Sub main()
Call abc(Sheet1) ' sheet1 là tên sheet trong cua so VBA
Call abc(Sheet2) ' sheet2 là tên sheet trong cua so VBA
Call abc(Sheet3) ' sheet3 là tên sheet trong cua so VBA
' xin cho hoi co cách nào goi duoc nhu the này khong
Call abc("sheet" & 1) ' chu y la lay ten sheet trong cua so VBA thoi nha
' khong lay ten sheet ben ngoai
End Sub
[B]Call abc("sheet" & 1) ' chu y la lay ten sheet trong cua so VBA thoi nha[/B]
[B]' khong lay ten sheet ben ngoai có được không?[/B]


xin cho hỏi là có cách nào làm được như trên không? xin chân thành cảm ơn

Dùng hàm CallByName
Mã:
Sub Main()
  Call abc(CallByName(ThisWorkbook.Worksheets, "Item", VbGet,[COLOR=#ff0000] "Sheet" & 1[/COLOR]))
End Sub
Chỗ màu đỏ là đối số cho bạn tùy biến
----------------------------------
Bạn tham khảo cặp macro này thử coi:

PHP:
Option Explicit
Sub GPE(Sh As Worksheet)
 MsgBox Sh.Name
End Sub
Mã:
Sub Main()
 Dim ShName As String, J As Byte
 For J = 1 To 3
    GPE Worksheets("sheet" & CStr(J))
 Next J
End Sub
Cái đối số truyền vào người ta muốn là Sheet CodeName chứ hổng phải SheetName đâu sư phụ à
 
Upvote 0
Sao em thử áp dụng vào vấn đề này nó báo lỗi anh
Call Tong_HopNHAP(CallByName(ThisWorkbook.Worksheets, "Item", VbGet, "Sheet" & 1), ARR_D, K)
anh xem dùm em module3 thử sao nha, cảm ơn anh ndu nhiều, file này áp dụng để giảng dạy
 

File đính kèm

Upvote 0
Sao em thử áp dụng vào vấn đề này nó báo lỗi anh
Call Tong_HopNHAP(CallByName(ThisWorkbook.Worksheets, "Item", VbGet, "Sheet" & 1), ARR_D, K)
anh xem dùm em module3 thử sao nha, cảm ơn anh ndu nhiều, file này áp dụng để giảng dạy

Chết! Tôi sai rồi. Đối số của hàm CallByName không phải là CodeName mà là SheetName
Vậy sửa thế này:
Mã:
Sub MAIN02()
  Dim ARR_D(1 To 60000, 1 To 9)
  Dim K As Long
  K = 0
  Sheet40.Range("A6:Z10000").Clear
  [COLOR=#ff0000]Dim wkb As Workbook
  Set wkb = ThisWorkbook[/COLOR]
'For I = 1 To 34 Step 3
    Call Tong_HopNHAP([COLOR=#ff0000]wkb.Worksheets(wkb.VBProject.VBComponents([B]"Sheet" & 1[/B]).Properties("Name").Value)[/COLOR], ARR_D, K)
'Next
'Sheet40.Range("a6").Resize(K, 9) = ARR_D
End Sub
Chỗ màu đỏ là thêm vào và sửa lại
-------------
Vậy bài 311 cũng phải sửa lại:
Mã:
Sub Main()
  [COLOR=#ff0000]Dim wkb As Workbook
  Set wkb = ThisWorkbook[/COLOR]
  Call abc([COLOR=#ff0000]wkb.Worksheets(wkb.VBProject.VBComponents([B]"Sheet" & 1[/B]).Properties("Name").Value)[/COLOR])
End Sub
Xin lỗi vì sơ suất khi thử nghiệm trên file mới mà không để ý SheetName y chang CodeName (nên có nhầm lẫn)
 
Upvote 0
Anh ndu có thể sửa trực tiếp lên file của bài 312 cho mọi người học hỏi nha, cảm ơn anh ndu nhiều
Thử với cái này xem:

Mã:
Function SheetName(ByVal Wb As Workbook, ByVal CodeName As String) As String
    SheetName = Wb.VBProject.VBComponents(CodeName).Properties("Name").Value
End Function


Sub TestIt()
    Dim St As String
    Dim Wb As Workbook
    Dim Ws As Worksheet
    
    Set Wb = ActiveWorkbook


    St = "sheet1"


    MsgBox SheetName(Wb, St)
    
    Set Ws = Wb.Sheets(SheetName(Wb, St))
End Sub
 
Upvote 0

Như đã nói ở đây:
http://www.giaiphapexcel.com/forum/...n-code-vào-một-trang-tính&p=671850#post671850
Liên quan đến việc truy cập vào môi trường VBA ta phải check mục "Trust access to the VBA project object model" trong Excel Options (cái này tưởng bạn đã biết rồi chứ)
 
Upvote 0
Code lọc các giá trị khác nhau

Xin chào tất cả mọi thành viên GPE. Nhờ mọi người xem giúp em đoạn Code sau tại sao chạy không ra đúng kết quả vậy. Đề bài là lọc

ra những người có tên ở cột A nhưng không có tên ở cột B, kết quả sẽ được hiển thị tại cột C. Em xin chân thành cảm ơn !
 

File đính kèm

Upvote 0
trong code bạn viết bị thiếu 1 dòng
Mã:
cou = 0
bạn tìm chỗ nhét nó đi
 
Upvote 0
Xin chào tất cả mọi thành viên GPE. Nhờ mọi người xem giúp em đoạn Code sau tại sao chạy không ra đúng kết quả vậy. Đề bài là lọc

ra những người có tên ở cột A nhưng không có tên ở cột B, kết quả sẽ được hiển thị tại cột C. Em xin chân thành cảm ơn !
Thêm câu lệnh cou = 0 dưới hàng For..next đầu tiên (For i = 2 To 13) thử xem sao nhé
 
Upvote 0
Ok. Được rồi anh nhé. Cho câu lệnh đó vào giữa For i và For j. Nhưng mà cái này em tưởng nếu mình không gán giá trị ban đầu cho nó là

bao nhiêu thì nó tự lấy giá trị bằng 0. Anh doveandrove giải thích cho em với được không.
Khi i=1 thì cou=0+1=1
Vậy khi i=2 thì theo bạn i =? luôn >0 là chắc chắn nên kết quả của bạn có 1 giá trị duy nhất
 
Upvote 0
Khi i=1 thì cou=0+1=1
Vậy khi i=2 thì theo bạn i =? luôn >0 là chắc chắn nên kết quả của bạn có 1 giá trị duy nhất

Đúng rồi ! Cái này em đúng là bị NGU quá mà +-+-+-++-+-+-++-+-+-++-+-+-+ Khi mình Next i đi thì biến cou sẽ lấy giá trị cũ của nó từ vòng lặp trước làm giá trị ban đầu nên biến cou đâu còn bằng 0 nữa. Cảm ơn anh nhiều ạ....--=0--=0--=0
 
Lần chỉnh sửa cuối:
Upvote 0
vì chưa bao giờ làm việc trên file text nên chưa hiểu rõ cách làm việc với nó như thế nào? mong các thành viên giúp đỡ, vấn đề như sau, tôi có rất nhiều file text, bây giờ muốn tổng hợp tất cả các file text đó vào 1 file excel, với mỗi sheet tương ứng là 1 file text, tôi có đính kèm file mẫu, xin được sự giúp đỡ của các bạn, xin chân thành cảm ơn
http://www.mediafire.com/download/qt0bk9ab38xw0jd/CHUYEN_FILE_TEXT_VAO_EXCEL.rar

Lấy dữ liệu từ file text thì được rồi nhưng sao phần tô màu linh tinh vậy? 3 sheet mà tô màu chẳng giống nhau tí nào
 
Upvote 0
Không cần tô màu đâu anh

Cho hết đống code này vào 1 Module nhé:
Mã:
Function SheetExists(ByVal SheetName As String) As Boolean
  On Error Resume Next
  SheetExists = Not Sheets(SheetName) Is Nothing
End Function
Private Sub ImportTextFile(ByVal FilePath As String, ByVal Target As Range)
  With Target.Parent.QueryTables.Add("TEXT;" & FilePath, Target)
    .TextFileTabDelimiter = True
    .Refresh False
  End With
End Sub
Sub Main()
  Dim vFiles, fileItem, wks As Worksheet
  Dim SheetName As String, FilePath As String
  vFiles = Application.GetOpenFilename("Text Files, *.txt", , , , True)
  If IsArray(vFiles) Then
    For Each fileItem In vFiles
      FilePath = CStr(fileItem)
      SheetName = Mid(FilePath, InStrRev(FilePath, "\") + 1)
      SheetName = Left(SheetName, Len(SheetName) - 4)
      If Not SheetExists(SheetName) Then Worksheets.Add(After:=Sheets(Sheets.Count)).Name = SheetName
      Set wks = Worksheets(SheetName)
      wks.UsedRange.Clear
      ImportTextFile FilePath, wks.Range("A1")
    Next
  End If
End Sub
Xong, chay sub Main và xem kết quả
Phần format (tô màu, kẻ khung...) bạn có thể làm bằng tay hoặc bằng code tùy ý
---------------------
Lưu ý: Khi chạy code từ lần thứ 2 trở đi thì nó sẽ xóa dữ liệu cũ, đè lên bằng dữ liệu mới
 

File đính kèm

Upvote 0
E chào các AC trong diễn đàn. Nhờ các AC xem giúp em đoạn code không cho nhấp chuột phải tại 1 Picture, e thử mà k thấy nó hoạt động ạ. E xin cảm ơn !
 

File đính kèm

Upvote 0
Upvote 0
E chào các AC trong diễn đàn. Nhờ các AC xem giúp em đoạn code không cho nhấp chuột phải tại 1 Picture, e thử mà k thấy nó hoạt động ạ. E xin cảm ơn !

Bạn đang dùng code:
Mã:
Sub Worksheet_BeforeRightClick([COLOR=#ff0000]ByVal Target As Range[/COLOR], Cancel As Boolean) 
''......................
End Sub
Chú ý chỗ màu đỏ: Đối số Target thuộc Range. Vậy nên code này chỉ có tác dụng trên Range và đương nhiên chẳng có tác dụng gì với các đối tượng Shape, Picture...
 
Upvote 0
Bạn đang dùng code:
Mã:
Sub Worksheet_BeforeRightClick([COLOR=#ff0000]ByVal Target As Range[/COLOR], Cancel As Boolean) 
''......................
End Sub
Chú ý chỗ màu đỏ: Đối số Target thuộc Range. Vậy nên code này chỉ có tác dụng trên Range và đương nhiên chẳng có tác dụng gì với các đối tượng Shape, Picture...
Vâng e sẽ nghiên cứu thêm về các đối số này, chúc thầy 1 ngày mới tốt lành :)
 
Upvote 0
có nên trả lời cho anh này không ta ? hi hi
cộng dồn số lượng được mà không cộng dồn số lần được là sao ta
dArr(.Item(Tmp), 7) = dArr(.Item(Tmp), 7) + 1
 
Upvote 0
Bác giúp phát đi. (mới bước vào con đường Dic mà, vì thấy nó thật hay, và nhiều cái tiện, nhưng chưa hiểu được các thuộc tính của nó lắm).
Đọc Dic chỉ thấy mỗi cái Dic.Count nên nó cộng cả cục. Hông biết làm sao cộng đồn từng Item ...hichic)(&&@@
nhìn cho kỹ đi nha . banh con mắt lên mà nhìn #335 đi
 
Upvote 0
Web KT

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

Back
Top Bottom