PDA

View Full Version : lấy địa chỉ của cell trong bảng tình excel từ code Vba



sonphuong
13-05-08, 10:37 AM
Làm sao để lấy thông tin về "địa chỉ" của chính cell chứa Function tự tạo từ Vba hoặc cell được Function tham chiếu tới (không sữ dụng ActiveCell)
----------------------------------------------
ví dụ :
trong Vba chúng ta đã tạo một Function có tên ID như sau :
Public Function ID (x As String) As String
.........
.........
End Function
---------------------------------------------
trong excel tại ô "A1" ta nhập "=ID(A2)",
yêu cầu kết quả trả về là "A1" hoặc "A2" cũng được. nhưng không được sử dụng hàm ActiveCell vì nếu sữ dụng hàm này thì khi chúng ta copy => paste (nhiều cell cùng một lúc) thì kết quả trả về chỉ là địa chì của cell hiện hành (ActiveCell).
---------------------------------------------
xem ví vụ về ActiveCell :

Public Function ID_Cell(ByRef x As String) As String
ID_Cell = "Row = " & Application.ActiveCell.row & "Column = " & Application.ActiveCell.Column
End Function
---------------------------------------------
ở đây nếu tại ô "A1" ta nhập "=ID_Cell(A2)" rồi chọn (bôi đẹn) từ ô A1 đến ô A2 xong sử dụng tổ hợp phím Ctrl_D. kết quả trả về của hảm ở tất cả các ô chỉ là :"Row = 1Column = 1"
Như vậy là khôg chính xác rồi phải không các bạn?

rất mong ai biết cách giải quết vất đề trên chỉ mình với.
cảm ơn nhiều..

minhlev
13-05-08, 10:50 AM
Bạn xem code sau có đúng yêu cầu của bạn không nhé.

Public Function ID_Cell(ByRef x As String) As String
ID_Cell = "Row = " & Application.Range(x).Row & "Column = " & Application.Range(x).Column
End Function

tigertiger
13-05-08, 11:00 AM
trong excel tại ô "A1" ta nhập "=ID(A2)",
yêu cầu kết quả trả về là "A1" hoặc "A2" cũng được. nhưng không được sử dụng hàm ActiveCell vì nếu sữ dụng hàm này thì khi chúng ta copy => paste (nhiều cell cùng một lúc) thì kết quả trả về chỉ là địa chì của cell hiện hành (ActiveCell).

Đơn giản thế này thui


Public Function ID(x As Range) As String
ID = x.Address
End Function


=> nếu có công thức =ID(A2) -> trả về $A$2

nếu thích bỏ dấu $ bạn tự làm nhé

sonphuong
13-05-08, 11:09 AM
Bạn xem code sau có đúng yêu cầu của bạn không nhé.

Public Function ID_Cell(ByRef x As String) As String
ID_Cell = "Row = " & Application.Range(x).Row & "Column = " & Application.Range(x).Column
End Function
bạn chưa có "khái niệm" chính xác về code Vba rồi.
Bạn đã sai hai chổ :
- thứ nhất : ở đây "x" là biến chứa giá trị tại cell mà hàm ID_Cell tham chiếu tới.
- thứ hai :
Cấu trúc của Range là : Range(cell1,cell2). đại loại Range sẽ tham chiếu tới một mảng trong bản tính excell hiện hành mà.
---------------------------------------------------------------------------
nhưng dù sao cũng cảm ơn sự qua tâm của bạn.

tigertiger
13-05-08, 11:41 AM
Tin nhắn song phương gửi cho tôi

Public Function ID(x As Range) As String
ID = x.Address
End Function
---------------------------
còn có cách nào để mình vẫn lấy được địa chỉ cell nhưng bên cạnh đó vẫn lấy được giá trị chứa trong ô hàm Vba tham chiếu tới không. mnình th ủ khai báo hai biến tham chiếu như sau nhưng Vba không hiểu,
Public Function ID(x As string, IDAs Range) As String
ID = ID.Address
............' vì "X" mình c òn dùng vào việc lấy giá trị tại ô tham chiếu tới mà
End Function


Lấy cả giá trị và địa chỉ dây



Public Function ID(x As Range) As String
Dim stAdd As String
Dim Value

stAdd = x.Address
Value = x.Value
' cac CODE khac xu ly stAdd va Value
'.......................
'.......................

ID = stAdd & " - " & Value
End Function




ID = stAdd & " - " & Value ' chỉ là ví dụ tigertiger thử cho hàm thui nhé

thế nhé

minhlev
13-05-08, 11:51 AM
bạn chưa có "khái niệm" chính xác về code Vba rồi.
Bạn đã sai hai chổ :
- thứ nhất : ở đây "x" là biến chứa giá trị tại cell mà hàm ID_Cell tham chiếu tới.
- thứ hai :
Cấu trúc của Range là : Range(cell1,cell2). đại loại Range sẽ tham chiếu tới một mảng trong bản tính excell hiện hành mà.
---------------------------------------------------------------------------
nhưng dù sao cũng cảm ơn sự qua tâm của bạn.
Đúng là tôi mới tập tành về VBA nên khi đọc thì cũng không hiểu rõ lắm mong muốn của bạn. Cụ thể là bạn muốn viết hàm như thế nào. Cái tôi viết là dựa trên cơ sở cái sẵn có của bạn thôi.

Làm sao để lấy thông tin về "địa chỉ" của chính cell chứa Function tự tạo từ Vba hoặc cell được Function tham chiếu tới (không sữ dụng ActiveCell)
....
---------------------------------------------
xem ví vụ về ActiveCell :

Public Function ID_Cell(ByRef x As String) As String
ID_Cell = "Row = " & Application.ActiveCell.row & "Column = " & Application.ActiveCell.Column
End Function
---------------------------------------------
....

rất mong ai biết cách giải quết vất đề trên chỉ mình với.
cảm ơn nhiều..
Nếu như vậy thì cái khai báo biến x As String của bạn là để làm gì? Có bị thừa không? Nếu dùng công thức tôi viết, bạn gõ địa chỉ ô vào trong ngoặc kép. VD: =ID_Cell("A1").
Còn không thì bạn thử xem bài của bác tigertiger xem.

voda
13-05-08, 11:54 AM
Nguyên văn bởi minhlev
Public Function ID_Cell(ByRef x As String) As String
ID_Cell = "Row = " & Application.Range(x).Row & "Column = " & Application.Range(x).Column
End Function

Theo mình đoạn code trên chỉ sơ ý chỗ khai báo mà thôi. Chỉnh lại như sau là chạy tốt:


Public Function ID_cell(ByRef x As Range) As String
ID_cell = "Row=" & x.Row & " Column=" & x.Column
End Function

sonphuong
13-05-08, 12:16 PM
cảm ơn bác tigertiger (http://www.giaiphapexcel.com/forum/member.php?u=4598) http://www.giaiphapexcel.com/forum/images/styles/Smart/statusicon/user_online.gif
6th Excel Member
http://www.giaiphapexcel.com/forum/gold.gifhttp://www.giaiphapexcel.com/forum/gold.gifhttp://www.giaiphapexcel.com/forum/gold.gifhttp://www.giaiphapexcel.com/forum/gold.gifhttp://www.giaiphapexcel.com/forum/gold.gifhttp://www.giaiphapexcel.com/forum/gold.gif
nhiều nha

anhtuan1066
13-05-08, 12:32 PM
Đúng là tôi mới tập tành về VBA .......
Bái phục ghê...
Đại ca mà nói là MỚI TẬP TÀNH.. chắc mọi người.. TRỐN luôn quá!

tigertiger
13-05-08, 12:41 PM
Nguyên văn bởi minhlev http://www.giaiphapexcel.com/forum/images/styles/Smart/buttons/viewpost.gif (http://www.giaiphapexcel.com/forum/showthread.php?p=70051#post70051)
Đúng là tôi mới tập tành về VBA .......

chính xác là Mới xuống NÚI

hai2hai
13-05-08, 01:18 PM
Public Function ID_cell(ByRef x As Range) As String
ID_cell = "Row=" & x.Row & " Column=" & x.Column
End Function

Sao lại dùng ByRef x trong trường hợp này?
ByRef chỉ sử dụng khi trả về giá trị. Có lẽ mọi người quên khi nào thì dùng ByRef, khi nào thì dùng ByVal rồi nhỉ :)