2009-09-22 19 views
9

Vậy làm cách nào tôi có thể chuyển một giá trị từ một biểu mẫu này sang biểu mẫu khác? Ví dụ: Người dùng chọn một tổ chức từ danh sách và điều này sẽ mở ra một biểu mẫu chuyến đi cho phép người dùng nhập thông tin khác nhau về chuyến đi. Ở một nơi, tôi muốn thêm một biểu mẫu bật lên nhỏ khác nơi họ có thể nhập thông tin liên hệ (chỉ cần tên và điện thoại cho POC) của tổ chức mà họ đang truy cập. Vì vậy, khi biểu mẫu ban đầu mở ra từ màn hình lựa chọn, nó có hai ID chỉ đơn giản là ẩn trong các hộp văn bản (một là tripID, còn cái kia là OrgID), vậy làm cách nào để chuyển chúng đến pop thứ hai nhỏ xíu lên biểu mẫu để thông tin liên hệ có các ID tương đối với nó.MSAccess 2003 - VBA để chuyển một giá trị từ một hình thức này sang một hình thức khác

Cảm ơn.

+0

Đã lâu rồi kể từ khi tôi làm việc với Access, nhưng bạn có thể gọi biểu mẫu khác, đặt các biến cấp mô-đun/cấp biểu mẫu, sau đó đóng biểu mẫu khác không? –

Trả lời

16

Cách tiếp cận tốt nhất trong những trường hợp này không phải là để cố gắng vượt qua một loạt các biến . Đó là quá nhiều mã và không linh hoạt. Ví dụ: nếu bạn cần chuyển hai giá trị, điều gì sẽ xảy ra trong những năm khi yêu cầu đó tăng lên 5 giá trị? Cố gắng duy trì và vượt qua toàn bộ các giá trị là quá nhiều công việc mã hóa.

Hãy nhớ rằng mỗi biểu mẫu trong truy cập ms thực sự là một đối tượng lớp mà bạn có thể thao tác trong mã. Vì vậy, sử dụng cách tiếp cận đối tượng ở đây và bạn thấy bạn không chỉ viết ít mã hơn, mà mã của bạn sẽ sạch hơn, mô đun hơn, không cần các vars toàn cầu và mã bạn viết thường có thể được sử dụng lại giữa các biểu mẫu khác nhau.

Sau đây là cách:

Nói chung khi một hình thức giới thiệu một hình thức khác theo hình thức thứ 2 dưới các hình thức trên mở sự kiện (trên thực tế, bạn thậm chí có thể sử dụng như là muộn nhất là sự kiện on-load), bạn có thể nhận một tham chiếu đến đối tượng mẫu PREVIOUS. Nói cách khác, bạn có thể sử dụng một cách tiếp cận đối tượng ở đây.

Ở cấp dạng mô-đun, cho hình thức Tôi tuyên bố một đối tượng hình thức như:

Option Compare Database 
Option Explicit 
dim frmPrevious  as form 

Sau đó, trong các hình thức trên tải sự kiện, chúng tôi đi:

Set frmPrevious = Screen.ActiveForm 

Bây giờ, bất kỳ mã trong biểu mẫu của chúng tôi, FREELY có thể sử dụng mã, sự kiện, thậm chí các biến thể được khai báo là công khai từ biểu mẫu trước đó trong mã.

Vì vậy, nếu bạn muốn ép ghi đĩa của biểu mẫu trước đó và tải lại dữ liệu.

frmPrevious.Refresh 

Nếu bạn muốn thiết lập các giá trị ID, sau đó đi:

frmPrevious!ID = some value 

Và, lưu ý rằng bạn thậm chí có thể tuyên bố hình thức trước đó như là một biến CÔNG cho hình thức đó, và vì thế nếu bạn có hai hình thức sâu, bạn có thể đi:

frmPrevious.frmPrevious!ID = some value 

Vì vậy, chỉ cần khai báo một đối tượng biểu mẫu trong mô-đun mã mẫu M EI (hoặc vì bạn cần sử dụng giá trị trong mã). Ở trên có nghĩa là bất kỳ mã nào có sẵn tham chiếu đến đối tượng biểu mẫu trước đó. Chức năng khai báo là mu trong một hình thức sẽ trở thành một phương pháp hình thức, và có thể được chạy như:

frmPrevious.MyCustomRefresh 

hoặc thậm chí những thứ như một số tùy chọn để buộc các hình thức trước đó để tạo ra và thiết lập một số hóa đơn:

frmPrevous.SetInvoice 

hoặc frmPrevious.SetProjectStatusOn

vì vậy, không chỉ bạn có thể xáo trộn các giá trị và dữ liệu qua lại, nhưng bạn có thể dễ dàng thực hiện các tính năng và chức năng mà bạn xây dựng trong mã đối với hình thức prevous.

Thực tế là một tiêu chuẩn mã hóa, MOST của các biểu mẫu của tôi có một hàm pubic gọi là MyRefresh.

Lưu ý rằng vẻ đẹp của phương pháp này là bạn có thể đọc + sử dụng + đặt giá trị từ biểu mẫu trước đó. Điều này cho phép mã của bạn không chỉ nhận giá trị mà còn đặt giá trị ở dạng trước đó. Vì vậy, phương pháp này là hai chiều. Bạn có thể trộn dữ liệu và giá trị qua lại giữa các biểu mẫu. Lợi thế khác ở đây là bạn KHÔNG bị giới hạn chỉ biến, nhưng có thể sử dụng các trường, giá trị điều khiển (sự kiện, thuộc tính), v.v.

Cách tiếp cận này có nghĩa là nhiều biểu mẫu trước đó nằm trong tầm tay bạn.

Vì vậy, đừng cố gắng vượt qua toàn bộ các biến số. Chuyển một tham chiếu đến biểu mẫu và bạn có một đối tượng sẵn sàng tốt đẹp trong tầm tay của bạn và nó làm cho loại vấn đề mã hóa này trở nên dễ dàng.

+1

cảm ơn rất nhiều! tôi đặc biệt đánh giá cao sự giải thích; giúp tôi học! cảm ơn albert! – Justin

+0

Cách tiếp cận này rất thú vị. Tôi cá nhân sử dụng một cái gì đó khá giống nhau (ít nhất là trong tinh thần) với một đối tượng cụ thể nắm giữ bộ sưu tập của tất cả các cửa sổ mở, và nơi các cửa sổ được khai báo là trường hợp của các hình thức. Điều này cho phép tôi có một chuỗi các phương thức và đặc tính 'cửa sổ' cụ thể ngoài các phương thức và thuộc tính biểu mẫu chuẩn. –

+1

Điều này thật tuyệt, nhưng chỉ một lưu ý. Tôi không nghĩ rằng điều này hoạt động để có được một tham chiếu đến một subform hoạt động. Tham chiếu sẽ luôn ở dạng chính. – HK1

6

Cách thông thường sẽ là để tham khảo các textbox trong hình thức ban đầu từ mẫu popup, như thế này:

Forms!frmInitialForm!tripID 
Forms!frmInitialForm!OrgID 

Tuy nhiên, điều này liên kết chặt chẽ dưới dạng popup để các hình thức ban đầu, do đó nó không thể là được sử dụng ở bất kỳ nơi nào khác trong ứng dụng.

Một cách tiếp cận tốt hơn là sử dụng OpenArgs:

DoCmd.OpenForm "frmPopup", OpenArgs:=Me.tripID & ", " & me.OrgID 

này đặt hai giá trị của bạn thành một chuỗi, mà được chuyển sang hình thức popup. Sau đó bạn có thể phân tách hai giá trị ra khỏi OpenArgs bằng cách sử dụng hàm Split.

Đối với thông tin thêm về truyền thông số sử dụng OpenArgs, xem: http://www.fmsinc.com/free/NewTips/Access/accesstip13.asp

+0

cảm ơn! cảm ơn vì tài nguyên! – Justin

Các vấn đề liên quan