這是一個主題(據我所知)沒有觸及CPearson's resource site(這對於那些希望在宏中使用宏Excel以編程方式將代碼插入新工作表/工作簿或現有工作表/工作簿)。Excel VBA - 以編程方式將代碼插入工作表中的特定子宏代碼模塊
我目前有Sheet1包含一系列四到五個獨立的子宏,它們執行的功能目前不會相互影響。我編寫了一個宏,當用戶按下按鈕激活時,會創建一個新的工作表並在該工作表上插入幾行代碼(此任務已完成且功能正常)。
我的目標是在此過程中添加一行,以便一旦執行了上述操作,「code of line xyz#1」將被添加到此CodeModule中的特定過程中,即:「Sub MacroMain )」。
我目前能夠使用以下,其中「AddCode」是一個文本字符串(幾乎)達到這樣的結果:
ActiveWorkbook.VBProject.VBComponents(Sheets("Sheet1").CodeName).CodeModule.AddFromString AddCode
但是這種解決方案的問題是,它只是增加了新線代碼到Sheet1的CodeModule的最上部分,而不是特定的子宏Sub MacroMain。試圖在上面的行中引用SubMacroMain不幸會產生「預期的函數或變量」錯誤。我認爲這是我的用戶格式錯誤。
我想知道是否應該使用上面列出的代碼行來遵循特定的語法,以便將此過程中插入的代碼放入Sheet1的CodeModule中的特定宏中。
謝謝。
在情況2中,與其自己編寫所有內容來構建強大的搜索工具來查找所需的行,爲什麼不使用'Module.Find'? (https://msdn.microsoft.com/en-us/library/office/ff195471.aspx) – Mikegrann
哦,這是一個無限更好的解決方案!我對使用VBProject對象不是很熟悉,並且很驚訝我找不到「Find」函數或類似的東西。我會更新我的答案 - 謝謝! –
@Mikegrann因爲'Module.Find'工作的純文本 - 盲目字符串搜索是完全危險的。使用VBIDE API檢索特定過程的起始行是定位過程的唯一安全方法,但實際上不能用正式語法解析代碼。 'Module.Find'無法告訴過程或關鍵字的變量:即使設置了「僅整個字」標誌,它也會最終中斷。我知道,在過去的兩年裏,我花了更多的時間編程解析VBA代碼。 –