2008-09-24 21 views
1

我正在研究一個VB6應用程序,我想發送一個Type作爲參考,並以另一種形式存儲它。這可能嗎?是否可以在VB6/VBA中發送和存儲類型引用?

發送它是沒有問題的,我只是用ByRef關鍵字:

public Sub SetStopToEdit(ByRef currentStop As StopType) 

但是,當我嘗試使用設置存儲currentStop接收模塊我得到的「所需的對象」錯誤在運行程序時:

Private stopToEdit As StopTypeModule.StopType 
' ... Lots of code 
Set stopToEdit = currentStop 

StopType被定義爲在模塊如下(不是類模塊):

Public Type StopType 
    MachineName As String 
    StartDate As Date 
    StartTime As String 
    Duration As Double 
End Type 

是否可以存儲發送的參考文獻,還是必須將StopType轉換爲類?

雖然只設置一個局部變量的作品:

stopToEdit = currentStop 

stopToEdit以後改變了變化不是發送到SetStopToEdit變量可見。

回答

2

你需要重構它到一個類。

1

什麼是StopType?它是如何定義的?是鍵入VB6記錄的東西?如果是的話(如果可能的話),你應該重新定義它作爲一個類 - 只使用它們,否則你會遇到集合的問題。

嘗試丟棄Set關鍵字 - 字符串,整數和數字,但是如果我沒有記錯,還記錄,不設置,他們是,但畢竟是在assignement隱:

stopToEdit = currentStop 

編輯:如果你想改變傳入的(ByRef)記錄,爲元素拷貝做一個手動元素,而不是重新分配整個事物 - 這應該做的伎倆。

與此同時:不要! ByRef(不幸的是在VB中默認)不是很酷(用我的兒子的意思)。嘗試設計你的功能,使他們不會改變傳入的參數 - 這是你有一個返回值...

+0

我已經改變了原來的問題,並解答了一些問題。 :-) – Jonas 2008-09-24 12:20:42

0

這裏的困惑在於,StopType不是像對象那樣的引用,但其行爲更像是一種內置類型,例如LONG。當你這樣做:

stopToEdit = currentStop

你只服用currentStop的副本。如果隨後更改stopToEdit,你需要將它複製回:

currentStop = stopToEdit

這樣,該值將被傳遞迴了分局。

相關問題