以 Excel VBA 為例Set R1 = Range("A1")  '----> 成功傳回 Range "物件"    R1 = Range("A1")  '----> 照樣成功傳回 數值================  請問 ==========================若要用 VB6 的 Class 來寫 , 如何辦到上述我實在想不出來例如' == 建立一個 Class 名叫 Test Public Property Get Q() As Variant    Q = Form1.Text1.Text  ' Form1 上的 TextBox 物件End Property' == Private Sub Form_Load()
  
  Dim A As New Test  P = A.Q  ' 成功
  Set Q = A.Q  ' 當然會失敗 , 因為根本不是一個物件 End Sub若改寫成Public Property Get Q() As Variant    Q = Form1.Text1  ' Form1 上的 TextBox 物件End Property' == Private Sub Form_Load()
  
  Dim A As New Test  P = A.Q  ' 當然會失敗, 因為它是物件 , 所以一定要用 Set     Set Q = A.Q  ' 成功End Sub
  就是無法辦到
  P = A.Q  ' 成功
  Set Q = A.Q  ' 照樣成功

解决方案 »

  1.   

    个人的观点:首先,VB6中CLASS中不能完成此类功能的.还有你不能把class和VBA中的Range对象进行类比,明白吗? CLASS是类,Range是实例化后的对象(自己感觉有点NC的回答...).但VB6中也可以完成你说的类似功能的:你可以在一个工程里添加两个窗体: form1 和 form2 在form2中有一个Text1,并且Text1.text="left wow",下面是form2的代码:
    Public Q As VariantPrivate Sub Form_Load()
        Set Q = Text1
    End Sub然后在form1中你可以这样写:
    Dim b As Variant
        
    Load Form2
        
    Set b = Form2.Q
    MsgBox b或
    Dim b As Variant
        
    Load Form2b = Form2.Q
    MsgBox b你运行试试,两段代码都会msgbox出form2的text1.text.
    对...到这里你应该已经明白了,这个就是VB6比较NC的对象默认属性的问题(个人这样感觉.呵呵..)..VBA里也是这个原理的
      

  2.   


    大大 我理解你說的但是你舉的實例是例外因為 Set Q = Text1
        Q = Text1TextBox 本來就不是VB6 寫出來的控件 , 所以它能辦到上述功能============== 後來我想想VB6 的 Class 應該是少設計一樣東西, 所以無法辦到這個功能Public Property Get Q() As Variant
        Q = Form1.Text1.text
    End PropertyPublic Property Let Q(ByVal vNewValue As Variant)
    End PropertyPublic Property Set Q(ByVal vNewValue As Variant)
    End Property注意到一件事"賦值" 可以有 2種 選擇  Property Let Q 或  Property Set Q可是讀值 "卻" 只有 1種 選擇  Property Get Q"如果" 讀值多增加 1種 選擇 叫 Property SetGet Q
    那是不是就可以寫成Public Property SetGet Q() As Variant
        Set Q = Form1.Text1
    End Property那是不是就能辦到上述功能
      

  3.   

    这里找到一篇文章,看看是不是对你有帮助:
    http://99inf.net/SoftwareDev/VB/12097.htm
      

  4.   


    這個用法我知道 , 我有在用==============
    我覺得 VB 辦不到這個功能 , 就是如下Private Sub Form_Load()  Dim A As New Test   Set A = Text ' ----> VB 自己知道要去執行 Property Set Q
      
      A = Text ' ----> VB 自己知道要去執行 Property Let Q  R = A ----->  VB 自己知道要去執行 Property Get Q  Set R = A ----->  VB 要去執行誰 ?? 發現她 "還是" 跑去執行  Property Get Q , 
                        因為 VB "讀值方面" 只有設計 Property Get Q 
                        如果 VB "多" 設計 Property SetGet Q 
                        那麼 Set R = A 是不是 VB 就可以去抓 Property SetGet Q       
                        Property Get Q 負責傳回 "數值"
                        Property SetGet Q 負責傳回 "對象指針"      
                        那問題是不是就解決了
                         End Sub 
      

  5.   

    就好比如果 VB6 今天不提供 Property Set  的功能  那麼  Set A = Text 
     
      A = Text    是不是一樣也無法辦到 Set A = Text 
      

  6.   

    关键在于R1,呵呵property set R1(byval v as variant)
    end propertyproperty let R1(byval v as variant)
    end property
      

  7.   

    可能是类的默认属性吧:
    当一个对象的类有默认属性的时候,赋值操作可以使用这个对象的默认属性.
    比如:
    TextBox 的默认属性是Text属性.
    这样你可以把它当作属性来使:
    dim s as string
    s = Text1
    又可以把它当作对象
    dim t as textbox
    set t = Text1