返回列表 上一主題 發帖

[發問] (謝謝恩師們,7/4完成) 關於自訂表單TextBox輸入關鍵字出現資料(附範例)

回復 10# GBKEE


    未命名2.jpg

TOP

本帖最後由 av8d 於 2012-6-27 10:24 編輯

好像就是卡到UserForm1的地方

TOP

回復 12# av8d
附檔看看

TOP

回復 13# GBKEE


    大大~可以了~我看到許多大大都會使用Option Explicit
Option Explicit的意義是在程式模組中強迫每個在程式模組裏的變數都必須明確完整的宣告和定義其名稱,範圍與型別.
Option Explicit 陳述式必須出現在模組中所有程序之前(即最頂端)
當 Option Explicit 在模組中使用時,所有的變數必須以 Dim, Private、Public、ReDim 或 Static 陳述式來明確宣告。
在模組中如果使用Option Explicit ,在程式中如未宣告變數的名稱,則在編譯階段時,會發生錯誤。
如果沒有使用 Option Explicit 陳述式,則所有未宣告的變數都是 Variant 型態,除非預設的型態另以 Deftype 陳述式所指定過。
Option Explicit 可避免打錯變數名稱或在有效範圍內設定兩個相同的變數名稱。


最主要是不是避免打錯變數名稱~但是這樣每次都必須用Dim, Private、Public、ReDim 或 Static 陳述式來明確宣告。
意思是不是說
如果我隨意設定
a=textbox1
for i =1 to 3
a=a+1
next i

這樣是否會出現錯誤~
我發現我之前所做的都沒用Option Explicit~現在要來一個一個除錯會不會還來的急嗎?

TOP

回復 14# av8d
Option Explicit  主要是可避免打錯變數名稱 ,使得程式運行中,找不出錯誤在哪裡
Textbox  是表單內控制項的關鍵字, 要避免始用 .

TOP

回復 8# GBKEE


    版主大大您好:

謝謝您的說明
小弟已理解name
在此的用意
Sub aa()
   
    Dim mSht As Worksheet
    Dim mRng As Range, E As Range
    Set mSht = Worksheets(1)
    With mSht
        Set mRng = .Range("a1:c5")
            mRng.Name = "NewName"
            [newname].Select
        For Each E In [newname]
            MsgBox E.Address
        Next
        
    End With
End Sub


感恩大大!

TOP

本帖最後由 av8d 於 2012-7-4 14:10 編輯

回復 6# register313

Private Sub UserForm_Initialize()

    Dim d As Object, A

    Set d = CreateObject("Scripting.Dictionary")

    With ActiveSheet

        For Each A In .Range("d2", .[d2].End(xlDown))

          d(A.Value) = ""

        Next A

        ComboBox1.List = Application.Transpose(d.keys)

        d.RemoveAll

        For Each A In .Range("e2", .[e2].End(xlDown))

          d(A.Value) = ""

        Next A

        ComboBox2.List = Application.Transpose(d.keys)

    End With

End Sub
---------------------------------------------------------------------
ComboBox1 = D欄
ComboBox2 = E欄

若D1=早餐  D2=午餐  D3=早餐
若E1=豬肉  E2=雞肉  E3=牛肉

當ComboBox1選到早餐的時候,ComboBox2是否能只顯示豬肉和牛肉,因為雞肉是午餐的所以過濾該筆。

TOP

本帖最後由 GBKEE 於 2012-6-28 17:48 編輯

回復 17# av8d
  1. Option Explicit
  2. Dim d As Object
  3. Private Sub UserForm_Initialize()
  4.     Dim A As Range
  5.     Set d = CreateObject("Scripting.Dictionary")
  6.     With ActiveSheet
  7.         For Each A In .Range("d2", .[d2].End(xlDown))
  8.           d(A.Value) = IIf(d(A.Value) = "", A.Offset(, 1).Value, d(A.Value) & "," & A.Offset(, 1))
  9.         Next
  10.         ComboBox1.List = d.KEYS
  11.     End With
  12. End Sub
  13. Private Sub ComboBox1_Change()
  14.     If ComboBox1.ListIndex > -1 Then
  15.         ComboBox2.List = Split(d(ComboBox1.Value), ",")
  16.         ComboBox2.Value = ComboBox2.List(0)
  17.     End If
  18. End Sub
複製代碼

TOP

本帖最後由 av8d 於 2012-6-28 21:06 編輯

回復 18# GBKEE


問題解決~謝謝!

TOP

回復 19# av8d
Dim d As Object 這程式碼 你放在哪裡   
如果如下宣告兩次
  1. Dim d As Object  '1 模組 的頂端 宣告變數  為此模組的私用變數  此模組中程序皆可用的變數
  2. Private Sub UserForm_Initialize()
  3.     Dim d As Object    '2 在程序中 宣告變數    '*** 這裡不要宣告了
  4.    Set d = CreateObject("Scripting.Dictionary")  
  5. '這d 是   UserForm_Initialize 程序的  並不是 模組頂端的d
複製代碼

TOP

        靜思自在 : 改變自己是自救,影響別人是救人。
返回列表 上一主題