Hỏi về vị trí của cell hiện hành

Liên hệ QC
voda đã viết:
Cho mình hỏi:
-Vì sao phải đặt thêm name LastR, LastC?
-Đoạn code trên gây lỗi chỗ nào?

  1. Vì đề bài là lưu lại vị trí của ActiveCell khi ta sửa đổi dữ liệu trong vùng Data. Việc lưu này có thể có nhiều cách, tuy nhiên lại không muốn lưu vị trí đó ra 2 Cell nên em nghĩ rằng đưa vào Name là hợp lý. Vì vậy mới có 2 Name trên
  2. Bác hãy theo dõi các bài ở trên.
Thân!
 
feelingyes đã viết:
Không ngờ một câu hỏi tưởng chừng như "bình thường" của em lại làm các anh đau đầu như vậy!
Hic! lấy gì tạ ơn đây!
Bạn chú ý rằng về nguyên tắc thì yêu cầu của bạn hoàn toàn có thể làm dc... Tuy nhiên ở đây mọi người đang vướng ở chổ là khi xác định dc ví trí cell rồi, nếu đặt nó thành 1 name thì lại ko đưa dc vào code... Nếu cứ lấy đại kết quả tại 2 cell thì... xem như bài toán đã giãi quyết xong...
Ở đây đang bàn về tối ưu và thẫm mỹ trong giãi thuật... Rõ ràng bỏ dc 2 cell phụ này sẽ có cảm giác bài toán hay hơn, và giãi thuật có vẽ thẩm mỹ hơn... Đó mới chính là vấn đề!
ANH TUẤN
 
Các anh ơi, bây giờ yêu cầu bài của em là Column hiện hành cũng được, ví dụ lần cuối cùng em xuât là 1/3/2007
Sau đó hide và unhide thì vị trí sẽ nhẩy về cột ngày xuất gần nhất
Các anh giúp em code với
 
nvson đã viết:
LastR, LastC là các Name, thực chất nó cũng là 1 vùng đấy.
Trước đây tôi cũng nghĩ name là một vùng. LastR, LastC đúng là vùng. Nhưng dong, cot cũng là name nhưng lại cho ra giá trị. Công thức =dong. =cot lại cho ra kết quả là số như là một function.

2 lệnh MsgBox Range("LastR").Address Range("LastR").Select đúng vì LastR là vùng
Nhưng MsgBox Range("dong").AddressRange("dong").Select báo lỗi !
Như vậy name dong, cot bản chất nó không phải là vùng Range như LastR, LastC như chúng ta vẫn nghĩ.
Còn nhiều điều về name mà chúng ta chưa biết đến!
 
feelingyes đã viết:
Các anh ơi, bây giờ yêu cầu bài của em là Column hiện hành cũng được, ví dụ lần cuối cùng em xuât là 1/3/2007
Sau đó hide và unhide thì vị trí sẽ nhẩy về cột ngày xuất gần nhất
Các anh giúp em code với
Được sự chỉ dẫn của NVSON nên đã sửa lại mấy dòng Code "chuối" trện

Các bác theo dõi nhé :

PHP:
Sub Unhide_date()
    Dim LastR As Long, LastC As Long
    LastR = Evaluate(Names("LastR").RefersTo)
    LastC = Evaluate(Names("LastC").RefersTo)
    Columns("E:AH").EntireColumn.Hidden = False
    Cells(LastR, LastC).Select
End Sub

Quả là tiện thât.

Cảm ơn NVSON nhiều!! Chưa vợ có khác, còn minh mẫn lắm

Thân!
 

File đính kèm

Mình xin cải tiến thêm 1 chút nữa:
Private Sub Worksheet_Change(ByVal Target As Range)
..........
ActiveWorkbook.Names.Add Name:="LastCR", RefersToR1C1:=Target
...........
End Sub
Sub Unhide_date()
Dim LastAd As String, LastRa As String
.... LastAd = ActiveWorkbook.Names("LastCR").RefersTo
.... LastRa = Mid$(LastAd, 5, 10)
.... Columns("E:AH").EntireColumn.Hidden = False
.... Range(LastRa).Select
End Sub
Để học tập thôi. Các bạn cho ý kiến nhé.
 
feelingyes đã viết:
Các bác xem file sẽ thấy cột ngày nhập cuối cùng (last update) vi dụ là 01/03/2007 do ta nhập ở cột AG (số lượng)
Sau đó Các cột ngày khi ta không dùng sẽ ẩn nó đi.
Nhưng em đang loay hoay tìm cách sao cho khi unhide cột ngày thì vị trí của ô hiện hành sẽ ở đúng vị trí cột ngày 1/3 =>cột AG
Các anh chị chỉ giáo
Cach làm này khác feelingyes 2 điểm:
1. Không dùng name LastR và LastC, nếu ô nhập trong vùng E4:AI30000 thì ghi số dòng vào GA1 và cột vào GA2.
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
r = Target.Row
c = Target.Column
If (r >= 4 And r <= 30000) And (c >= 5 And c <= 35) Then
  Cells(1, 183) = Target.Row
  Cells(2, 183) = Target.Column
End If
End Sub

2. Hai Sub UnHide_Date và Hide_Date không tạo trong sheet "FG" mà tạo trong Module để có thể gán phím tắt. Thao tác ẩn, hiện cột nhanh hơn. Do Sub ở trong Module, nên nó phải kiểm tra sheet active có phải là "FG" không, nếu đúng mới thi hành.

Mã:
Sub UnHide_Date()
'
' UnHide_Date Macro
' Macro recorded 28/11/2007 by LAIVUNG
'
' Keyboard Shortcut: Ctrl+Shift+U
'
If ActiveWorkbook.Name = ThisWorkbook.Name And ActiveSheet.Name = "FG" Then
  Columns("E:AH").EntireColumn.Hidden = False
  Cells(Cells(1, 183), Cells(2, 183)).Select
End If
End Sub

Mã:
Sub Hide_Date()
'
' Hide_Date Macro
' Macro recorded 28/11/2007 by LAIVUNG
'
' Keyboard Shortcut: Ctrl+Shift+H
'
If ActiveWorkbook.Name = ThisWorkbook.Name And ActiveSheet.Name = "FG" Then
  Columns("E:AH").EntireColumn.Hidden = True
  Cells(4, 1).Select
End If
End Sub

Gởi kèm SoMax.zip cho thấy sự khác nhau giữa name vùng và name công thức cho nvson
 

File đính kèm

Lần chỉnh sửa cuối:
anhtuan1066 đã viết:
Oh... rắc rối thế nhỉ? Nhưng rõ ràng thầy đã cho biến đó là rc rồi mà... thế ko cho thẳng rc vào code dc sao?
Dùng biến r và c viết If - End If gọn hơn. Không dùng r, c cũng được nhưng viết dài hơn và nhất là dễ sai.
Dùng biến r, c:
Mã:
r = Target.Row
c = Target.Column
If (r >= 4 And r <= 30000) And (c >= 5 And c <= 35) Then
Cells(1, 183) = r 
Cells(2, 183) = c
End If

Không dùng biến r,c:
Mã:
If (Target.Row >= 4 And Target.Row <= 30000) And (Target.Column >= 5 And Target.Column <= 35) Then
Cells(1, 183) = Target.Row
Cells(2, 183) = Target.Column
End If
 
Web KT

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

Back
Top Bottom