Hỏi về khai báo biến của VBA và nhờ giải thích đoạn mã

Liên hệ QC

anhtuan1066

Thành viên gạo cội
Tham gia
10/3/07
Bài viết
5,802
Được thích
6,905
Lần trước bạn Camry có hỏi rằng:
Mã:
[B]Bạn giúp mình với[/B] 
Mình muốn hỏi thêm một tý về file vòng lặp của bạn được không?
Ngoài việc liệt kê từng tháng một, nếu mình muốn thêm chức năng liệt kê toàn bộ cả năm thì làm thế nào?
Và những mã hàng đã báo cáo rồi mình không muốn thể hiện nữa thì có được không?
Giúp mình nhé.
Các bạn xem file đính kèm tôi đã sữa cho bạn ấy...
Trong file này có đoạn code:
PHP:
Sub TRICH()
........
For i = 9 To Er
   THANG = Range("Sheet2!K8").Value
   iTHANG = Month(Sheet1.Cells(i, 1).Value)
   MH = Range("Sheet2!L8").Value
   iMH = Sheet1.Cells(i, 2).Value
   If (THANG = 13 Or iTHANG = THANG) And iMH = MH Then
      Range("Sheet2!A" & k & ":E" & k).Value = Range("Sheet1!A" & i & ":E" & i).Value2
........
Code chạy ko có vấn đề nhưng nếu tôi sữa lại:
PHP:
Sub TRICH()
........
For i = 9 To Er
   THANG = Range("Sheet2!K8").Value
   iTHANG = Month(Sheet1.Cells(i, 1).Value)
   MH = Range("Sheet2!L8").Value
   iMH = Sheet1.Cells(i, 2).Value
   iDONG1 = Range("Sheet1A"&i&":E"&i).Value2
   iDONG2 = Range("Sheet2!A" & k & ":E" & k).Value
   If (THANG = 13 Or iTHANG = THANG) And iMH = MH Then
       iDONG2 = iDONG1
........
thì nó lại ko chạy...
Cho hỏi là lý do tại sao?
Còn nữa... cho tôi hỏi việc khai báo biến như trong file đã ổn chưa? Vì tôi thấy nó.. ngang ngang thế nào ấy...
Mong dc góp ý!
ANH TUẤN
</DIV>
 

File đính kèm

  • VonglapFOR_Trichdulieu_02.zip
    27.2 KB · Đọc: 100
Lần chỉnh sửa cuối:
anhtuan1066 đã viết:
Sub TRICH()
........
For i = 9 To Er
THANG = Range("Sheet2!K8").Value
iTHANG = Month(Sheet1.Cells(i, 1).Value)
MH = Range("Sheet2!L8").Value
iMH = Sheet1.Cells(i, 2).Value
iDONG1 = Range("Sheet1A"&i&":E"&i).Value2
iDONG2 = Range("Sheet2!A" & k & ":E" & k).Value
If (THANG = 13 Or iTHANG = THANG) And iMH = MH Then
iDONG2 = iDONG1
...

thì nó lại ko chạy...

Cho hỏi là lý do tại sao?
Còn nữa... cho tôi hỏi việc khai báo biến như trong file đã ổn chưa? Vì tôi thấy nó.. ngang ngang thế nào ấy...
</DIV>

1. Anh xem dòng tô đỏ bị thiếu dấu ! sau Sheet1.
2. Cách khai báo biến như thế cũng ổn, có đổi là đổi tên của các biến sao cho dễ liên tưởng hơn.

Thanh Phong
 
Upvote 0
To: anhtuan1066,
_Tôi nghĩ tại sao lại là khai báo vừa la Num, vừa là Text ! Anh có bị lộn không?
_ Hình như bị sai:
Mã:
[COLOR=#000000][COLOR=#0000bb]iDONG1 [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]Range[/COLOR][COLOR=#007700]([/COLOR][COLOR=#dd0000]"Sheet1A"[/COLOR][COLOR=#007700]&[/COLOR][COLOR=#0000bb]i[/COLOR][COLOR=#007700]&[/COLOR][COLOR=#dd0000]":E"[/COLOR][COLOR=#007700]&[/COLOR][COLOR=#0000bb]i[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000bb]Value2[/COLOR][/COLOR]

_ Để hiểu thêm về Range -> mảng như thế nào, chắc anh nên xem
http://www.giaiphapexcel.com/forum/showthread.php?t=5146

VBAVN

To: anhtuan1066,
anhtuan1066 đã viết:
Oh... đó là do tôi gõ trên diển đàn bị sai thôi
Anh nên cẩn thận, nếu không vừa mất thì giờ của anh và của người muốn trả lời giúp anh. Đây là điều không nên, mà tôi thấy ở cái GPE này thì quá nhiều cái vụ này .


anhtuan1066 đã viết:
Sữa lại nó vẩn ko chạy, dù chẳng báo lổi gì
Tại sao thế nhỉ? Tôi nghĩ cái căn bản nhất của một VBA Coder Debug để tìm ra lỗi. Trong trường hợp của anh là F8 (kiểm lỗi từng câu lệnh).

VBAVN
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Với bạn vbavn: Như tôi đã nói thêm rằng tôi gõ tiêu đề bị nhầm... Đang nhờ Mod sữa lại đây!
Với ttphong2007: Tôi gữi file đang bị sai lên đây! Phong xem giúp với
ANH TUẤN
 

File đính kèm

  • VonglapFOR_Trichdulieu_03.zip
    26.2 KB · Đọc: 39
Upvote 0
anhtuan1066 đã viết:
Với bạn vbavn: Như tôi đã nói thêm rằng tôi gõ tiêu đề bị nhầm... Đang nhờ Mod sữa lại đây!
Với ttphong2007: Tôi gữi file đang bị sai lên đây! Phong xem giúp với
ANH TUẤN

Anh xem file đính kèm nhé!

Thanh Phong
 

File đính kèm

  • VonglapFOR_Trichdulieu_03.zip
    29.1 KB · Đọc: 47
Upvote 0
Ôi chao ôi... chỉ thiếu mổi chử SET mà gây hậu quã nghiêm trọng thế uh?
Cho hỏi: tôi đặt tên cho 1 cell thì ko cần chử SET, còn cho 1 vùng tại sao lại cần? Đó là bắt buộc hay sao?
ANH TUẤN
 
Upvote 0
anhtuan1066 đã viết:
Ôi chao ôi... chỉ thiếu mổi chử SET mà gây hậu quã nghiêm trọng thế uh?
Cho hỏi: tôi đặt tên cho 1 cell thì ko cần chử SET, còn cho 1 vùng tại sao lại cần? Đó là bắt buộc hay sao?
ANH TUẤN

1. Không phải chỉ thiếu SET không đâu, anh xem lại nhé!

2. Trả lời câu hỏi: khi gán biến với 1 cell thì biến sẽ chứa giá trị của cell đó và không cần khai báo thêm SET. Nếu muốn gán biến cho 1 đối tượng (ở đây là Range) thì cần dùng thêm SET.

Ghi chú thêm:
Generally, when you use Set to assign an object reference to a variable, no copy of the object is created for that variable. Instead, a reference to the object is created. More than one object variable can refer to the same object. Because such variables are references to the object rather than copies of the object, any change in the object is reflected in all variables that refer to it. However, when you use the New keyword in the Set statement, you are actually creating an instance of the object.

Thanh Phong
 
Upvote 0
Web KT
Back
Top Bottom