Board logo

標題: [轉貼] [分享]產生另一個程序之程式碼 [打印本頁]

作者: Hsieh    時間: 2011-1-7 00:04     標題: [分享]產生另一個程序之程式碼

呆呆
高中生

離線

文章: 279


     [分享]產生另一個程序之程式碼
« 於: 2006-07-13, 02:26:16 »      

--------------------------------------------------------------------------------
或許有人對於程式中寫出另一程序有興趣
以下為範例



Sub AddCode()
 
 Dim myModule As VBComponent
 Dim myCode As String
 Dim totalLines As Long
 

Set myModule = ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_StdModule)

myModule.Name = "myModule"

myCode = "sub Sumation" & vbLf & _
  "dim i as integer" & vbLf & _
  "dim sum as integer" & vbLf & _
  "for i = 1 to 10" & vbLf & _
  "sum = sum + i" & vbLf & _
  "next i" & vbLf & _
  "msgbox sum" & vbLf & _
  "end sub"
  
  With myModule.CodeModule
   totalLines = .CountOfLines + 1
   .InsertLines totalLines, myCode
  
  End With
  

End Sub


以上程式碼執行前請先在工具->巨集->安全性
點選受信任的發行者頁籤 中
將信 任存取 Visual Basic核取方塊打勾
才不會發生錯誤

« 最後編輯時間: 2006-07-13, 02:30:03 由 呆呆 »  向板主檢舉    218.162.214.188 (?)  



oobird
凸槌的木工
論壇維護群

離線

文章: 5270



     Re: [分享]產生另一個程序之程式碼
« 回覆文章 #1 於: 2006-07-13, 21:41:42 »      

--------------------------------------------------------------------------------
謝謝分享!第一句就出現"使用者自訂型態尚末定義"錯誤,請教是何原因?

向板主檢舉    125.230.50.183 (?)  

--------------------------------------------------------------------------------
結廬待慧君


呆呆
高中生

離線

文章: 279


     Re: [分享]產生另一個程序之程式碼
« 回覆文章 #2 於: 2006-07-13, 22:15:03 »      

--------------------------------------------------------------------------------
還沒定義就是沒這個元件,或是物件階層不在可視範圍內
我的是 office 2003 ,不知是否版本差異
因為我的是可執行的
如有其它的朋友有其它的版本歡迎幫忙測試一下

向板主檢舉    61.225.209.233 (?)  



呆呆
高中生

離線

文章: 279


     Re: [分享]產生另一個程序之程式碼
« 回覆文章 #3 於: 2006-07-13, 22:29:13 »      

--------------------------------------------------------------------------------

另外修正一次,看能不能執行
沒有 其它的版本只能用猜的
Sub AddCode()
 
 
 Dim obj As Object
 Dim myCode As String
 Dim totallines As Long
 
 
 Set obj = ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_StdModule)
 
obj.Name = "Mymodule"
 
myCode = "sub Sumation" & vbLf & _
  "dim i as integer" & vbLf & _
  "dim sum as integer" & vbLf & _
  "for i = 1 to 10" & vbLf & _
  "sum = sum + i" & vbLf & _
  "next i" & vbLf & _
  "msgbox sum" & vbLf & _
  "end sub"

  With obj.CodeModule
   totallines = .CountOfLines + 1
   .InsertLines totallines, myCode
  End With
  
End Sub

向板主檢舉    61.225.209.233 (?)  



Hsieh
版主

在線

會員性別:
文章: 5729



     Re: [分享]產生另一個程序之程式碼
« 回覆文章 #4 於: 2006-07-13, 22:38:10 »      

--------------------------------------------------------------------------------
第1個程式碼經測試如oobird版主所說的情形一樣
第2個程式碼經測試,執行至
 Set obj = ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_StdModule)
出現add方法失敗
我也是office2003,為何就不能執行?


向板主檢舉    220.137.73.142 (?)  

--------------------------------------------------------------------------------
回答滿意嗎?
  記得告訴我哦!!


呆呆
高中生

離線

文章: 279


     Re: [分享]產生另一個程序之程式碼
« 回覆文章 #5 於: 2006-07-13, 23:22:15 »      

--------------------------------------------------------------------------------
以上程式碼執行前請先在工具->巨集->安全性
點選受信任的發行者頁籤 中
將信 任存取 Visual Basic核取方塊打勾
才不會發生錯誤

我在發表文章時就說了啊
要先做上面的動作 先核取 信任存取 visual basic方塊打勾

另外一點忘了說明(不好意思了)
請引用
Microsoft Visual Basic For Applicartions Extensibility 5.3

« 最後編輯時間: 2006-07-14, 00:25:18 由 呆呆 »  向板主檢舉    61.225.209.233 (?)  



oobird
凸槌的木工
論壇維護群

離線

文章: 5270



     Re: [分享]產生另一個程序之程式碼
« 回覆文章 #6 於: 2006-07-14, 08:27:32 »      

--------------------------------------------------------------------------------
不錯,建立了一個新的模組,寫 入了 Sub Sumation()程式。
最後一段 : With obj.CodeModule
   totallines = .CountOfLines + 1
   .InsertLines totallines, myCode
是說什麼?我這裡最後一句通不過。 

向板主檢舉    59.117.162.79 (?)  

--------------------------------------------------------------------------------
結廬待慧君


呆呆
高中生

離線

文章: 279


     Re: [分享]產生另一個程序之程式碼
« 回覆文章 #7 於: 2006-07-14, 19:06:52 »      

--------------------------------------------------------------------------------
最後一行是差入程式碼的意思
其中mycode就是程式碼
而第一個引數至少要是1才行


向板主檢舉    61.225.209.196 (?)  



Hsieh
版主

在線

會員性別:
文章: 5729



     Re: [分享]產生另一個程序之程式碼
« 回覆文章 #8 於: 2006-07-14, 19:19:19 »      

--------------------------------------------------------------------------------
太好了!多謝前輩分享
小弟想請教類似問題
請教前輩vbext_ct_StdModule這參數是加入一般模組
但我想在sheet底下加入程序不知應如何修正
例如
我動態加入一個CommandButton按鈕
要加入 CommandButton1_Click程序應如何達成
謝謝!

向板主檢舉    220.137.73.142 (?)  

--------------------------------------------------------------------------------
回答滿意嗎?
  記得告訴我哦!!


呆呆
高中生

離線

文章: 279


     Re: [分享]產生另一個程序之程式碼
« 回覆文章 #9 於: 2006-07-14, 20:35:26 »      

--------------------------------------------------------------------------------
Sub AddCode()

 Dim MyButton As OLEObject

 Dim SumationCode As String
 Dim totalLines As Long

  Set MyButton = Sheet1.OLEObjects.Add("Forms.CommandButton.1")
 
  With MyButton
   .Left = 10
   .Top = 10
   .Object.Caption = "Sumation"
   .Name = "Sumation"
  End With
 
Set MyModule = ThisWorkbook.VBProject.VBComponents.Item("sheet1")

SumationCode = "private sub Sumation_Click" & vbLf & _
  "dim i as integer" & vbLf & _
  "dim sum as integer" & vbLf & _
  "for i = 1 to 10" & vbLf & _
  "sum = sum + i" & vbLf & _
  "next i" & vbLf & _
  "msgbox sum" & vbLf & _
  "end sub"

  With MyModule.CodeModule
   totalLines = .CountOfLines + 1
   .InsertLines totalLines, SumationCode
  End With

End Sub
Hsieh
版主

在線

會員性別:
文章: 5729



     Re: [分享]產生另一個程序之程式碼
« 回覆文章 #10 於: 2006-07-14, 20:43:07 »      

--------------------------------------------------------------------------------
多謝前輩指導
這問題困擾已久
今日終於得救了
謝謝!

向板主檢舉    220.137.73.142 (?)  

--------------------------------------------------------------------------------
回答滿意嗎?
  記得告訴我哦!!


oobird
凸槌的木工
論壇維護群

離線

文章: 5270



     Re: [分享]產生另一個程序之程式碼
« 回覆文章 #11 於: 2006-07-14, 21:00:45 »      

--------------------------------------------------------------------------------
搞不懂我的為何在Set MyButton = Sheet1.OLEObjects.Add("Forms.CommandButton.1")
這行會"此時無法進入中斷模式"錯誤,而程式碼及按鈕郤都已建立。

向板主檢舉    59.115.74.59 (?)  

--------------------------------------------------------------------------------
結廬待慧君


呆呆
高中生

離線

文章: 279


     Re: [分享]產生另一個程序之程式碼
« 回覆文章 #12 於: 2006-07-14, 21:10:21 »      

--------------------------------------------------------------------------------
老實說,您的問題我也不懂
因為我沒有遇到您的問題

向板主檢舉    61.225.209.196 (?)  



呆呆
高中生

離線

文章: 279


     Re: [分享]產生另一個程序之程式碼
« 回覆文章 #13 於: 2006-07-15, 21:07:43 »      

--------------------------------------------------------------------------------
我想你應該是用逐行編譯才會發生此情況
這個情況我的也是一樣,不過只要不用逐行
編譯就不成問題,都能通且執行完畢
另外一點,我想沒人喜歡在程式碼中加入 另外
一個程式的程式碼,我想比較好的方式就是另外
的程式碼存成一個文字檔這樣才不會光打 & vblf
就累死人了(程式短或許無所謂)
所以我採取了由文字檔讀入的方式比較簡單,這樣
以後只要能執行的程序,直接copy到文字檔就可用了

步驟如下
1.在適當的路徑中增加一個檔案,我是在 c:\sumation.txt
內容如下

程式碼:
private sub Sumation_click
 dim i as integer
 dim sum as integer
 
 for i = 1 to 10
   sum = sum + i
 next i
 msgbox sum

end sub


2,再來就是主程式碼了


程式碼:
Option Explicit

Const FileName As String = "C:\Sumation.txt"


Sub AddCode()

 Dim MyButton As OLEObject
 Dim sh As Worksheet
 Dim ClassModuleCode As VBComponent
 
 Application.DisplayAlerts = False
 On Error Resume Next
 For Each sh In Worksheets
  sh.Delete
 Next sh
 Application.DisplayAlerts = True
 Err.Clear
 
 Set sh = ThisWorkbook.Worksheets.Add
 Set MyButton = sh.OLEObjects.Add("Forms.CommandButton.1")
 
  With MyButton
   .Left = 10
   .Top = 10
   .Object.Caption = "Sumation"
   .Name = "Sumation"
  End With
 
Set ClassModuleCode = ThisWorkbook.VBProject.VBComponents(sh.CodeName)

 ClassModuleCode.CodeModule.AddFromFile FileName
 Set MyButton = Nothing
 Set sh = Nothing
 Set ClassModuleCode = Nothing
 
End Sub



這樣就可由檔案中加入了




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)