標題:
[轉貼]
[分享]產生另一個程序之程式碼
[打印本頁]
作者:
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/)