昱得資訊工作室
麻辣學園
歡迎光臨, 訪客. 請先 登入註冊一個帳號.
您忘了 啟用您的帳號嗎?
2008-07-25, 02:26:32
首頁 說明 登入 註冊 贊助論壇 想當作者?
新聞: 會員注意!!麻辣家族討論區[通用版規],請詳閱!!


+  麻辣家族討論區
|-+  MS Office 系列
| |-+  EXCEL
| | |-+  Excel程式區 (版主: hsieh)
| | | |-+  關於動態新增UserForm的問題…
0 會員 以及 1 訪客 正在閱讀本篇主題. « 上一篇主題 下一篇主題 »
頁: [1] 向下 列印
作者 主題: 關於動態新增UserForm的問題…  (閱讀 523 次)
C.F
中學生
*
離線 離線

文章: 95


關於動態新增UserForm的問題…
« 於: 2006-05-08, 12:57:00 »

我是參考網路的作法…
Private Sub C7User_SigLinkage_Click()
    Dim wantTable(1) As String
    
    wantTable(0) = "REGEN_A1_CRC7USER"
    wantTable(1) = "DISP_DISPSPLNKREM"
    Call Module11.AddForm_01("DISP_C7user_Splnkrem", wantTable)
End Sub
我將UserForm的動態新增放在一個Module內方便不同的Sub 呼叫…如下:
Sub AddForm_01(FormName As String, getTable As Variant)
  
  Dim myForm1
  Dim myMultiPage1 As msforms.MultiPage
  Dim myLabel1 As msforms.Label
  Dim myListBox1 As msforms.ListBox
  Dim myCheckBox1 As msforms.CheckBox
  Dim i%
  
  Application.VBE.MainWindow.Visible = False
  '動態新增UserForm
  Set myForm1 = ActiveWorkbook.VBProject.VBComponents.Add(3)
  '設置該Form的名稱、高度、寬度、位置等
  With myForm1
    .Properties("Caption") = FormName
    .Properties("Name") = FormName
    .Properties("Width") = 459
    .Properties("Height") = 343
    .Properties("Left") = 160
    .Properties("Top") = 150
  End With
  '動態新增MultiPage控件
  Set myMultiPage1 = _
      myForm1.Designer.Controls.Add("forms.MultiPage.1")
  '設置該MultiPage的名稱、高度、寬度、位置等
  With myMultiPage1
     .Left = 5
     .Width = 445
     .Height = 270
  End With
  
  '動態新增Label控件
  Set myLabel1 = _
      myForm1.Designer.Controls.Add("forms.Label.1")
  '設置該Label的名稱、高度、寬度、位置等
  With myLabel1
     .Font.Name = "Gungsuh"
     .Caption = "Table_List"
     .Width = 96
     .Height = 18
     .Left = 210
     .Top = 48
     .AutoSize = True
  End With
  '動態新增ListBox控件
  Set myListBox1 = _
      myMultiPage1.Pages(0).Controls.Add("forms.ListBox.1")
  '設置該ListBox的名稱、高度、寬度、位置等
  With myListBox1
     .Width = 194
     .Height = 100
     .Left = 210
     .Top = 66
  End With
  
  For i = 0 To UBound(getTable)
    '動態新增CheckBox控件
     Set myCheckBox1 = _
       myMultiPage1.Pages(0).Controls.Add("forms.CheckBox.1")
     '設置該CheckBox的名稱、高度、寬度、位置等
     With myCheckBox1
       .Name = getTable(i)
       .Caption = getTable(i)
       .Font.Name = "Dotum"
       .Font.Size = 10
       .AutoSize = True
       .Width = 140
       .Height = 17.5
       .Left = 24
       .Top = 6 + i * 20
     End With
  
  Next i
  '顯示窗體
  VBA.UserForms.Add(myForm1.Name).Show
  '關閉後移除窗體
  ActiveWorkbook.VBProject.VBComponents.Remove VBComponent:=myForm1
  
  Set myListBox1 = Nothing
  Set myLabel1 = Nothing
  Set myForm1 = Nothing
End Sub

可是我發現我若不關閉Excel執行第一次會成功但第二次就會失敗…後來我發現若是我在第二次執行前將這個Form的Name改成與第一次執行不相同的話就會成功…也就是指FormName這個變數…
我該如何個呢…?
已記錄
oobird
凸槌的木工
論壇維護群
*
離線 離線

文章: 4287


Re: 關於動態新增UserForm的問題…
« 回覆文章 #1 於: 2006-05-10, 22:14:02 »

在EXCEL中所有的控件只要建立了,刪除後下一次再建立相同的控件其名稱必是往上加1,所以.Properties("Caption") = FormName.Properties("Name") = FormName應該給他一個固定的名稱,不要用它給的名稱。
已記錄

結廬待慧君;為使大家少猜題,請在附件中詳細說明 要求 和 效果,解決問題效率高。
C.F
中學生
*
離線 離線

文章: 95


Re: 關於動態新增UserForm的問題…
« 回覆文章 #2 於: 2006-05-15, 15:05:29 »

With myForm1
    .Properties("Caption") = FormName
    .Properties("Name") = FormName
    .Properties("Width") = 459
    .Properties("Height") = 343
    .Properties("Left") = 160
    .Properties("Top") = 150
End With
所以我是給FormName…這是一個變數啊…
我指定給一個名稱
已記錄
zldccmx
小學生
*
離線 離線

文章: 2


Re: 關於動態新增UserForm的問題…
« 回覆文章 #3 於: 2008-05-11, 01:23:38 »

 Application.VBE.MainWindow.Visible = False
  '動態新增UserForm

'加入一句代码; Add One Code In Here
   ThisWorkBook.Save

  Set myForm1 = ActiveWorkbook.VBProject.VBComponents.Add(3)
  '設置該Form的名稱、高度、寬度、位置等
  With myForm1
    .Properties("Caption") = FormName
    .Properties("Name") = FormName
    .Properties("Width") = 459
    .Properties("Height") = 343
    .Properties("Left") = 160
    .Properties("Top") = 150
  End With
已記錄
頁: [1] 向上 列印 
« 上一篇主題 下一篇主題 »
跳到:  


本頁花了 0.12 秒, 以及 20 次的資料庫查詢.