2015-11-02 89 views
4

的ThisWorkbook模块中使用Excel 2010如何识别使用VBA

我需要将代码添加到的ThisWorkbook模块已更名为远程Excel文件,假设为“DashboardWorkbook”。我不知道这个新名字,除了之外,我需要以编程方式标识此模块,以便向Sub Workbook_Open()添加更多代码。

我打开这个偏僻的文件,然后我通过它的所有组件:

Private Sub AddProcedureToWorkbook(wb As Workbook) 
    Dim VBProj As VBIDE.VBProject 
    Dim oComp As VBIDE.VBComponent 
    Dim oCodeMod As VBIDE.CodeModule 

    Set VBProj = wb.VBProject 
    For Each oComp In VBProj.VBComponents 
    If *[check here if oComp was formerly ThisWorkbook but now renamed]* Then 
     Set oCodeMod = oComp.CodeModule 
     'add new code here 
     ...etc, etc 
    End If 
    Next 

End Sub 

在Excel界面,的ThisWorkbook都有不同的图标,这似乎是一个不同类型的模块但我无法弄清楚什么具体属性阅读以便识别它?

要的东西就更多了,有时分Workbook_Open()不存在复杂的,所以我需要把它在正确的地方添加...

谢谢

MR

回答

5

床单和书籍可以直接从代码由他们CodeName(不同于显示名称又名只是Name)进行访问。
这也是他们的VBComponent名称。

Private Sub AddProcedureToWorkbook(wb As Workbook) 
    Dim VBProj As VBIDE.VBProject 
    Dim oComp As VBIDE.VBComponent 
    Dim oCodeMod As VBIDE.CodeModule 

    Set VBProj = wb.VBProject 
    Set oComp = VBProj.VBComponents(wb.CodeName) 
    Set oCodeMod = oComp.CodeModule 

    oCodeMod.AddFromString "sub Hi()" & vbNewLine & "msgbox ""Hi.""" & vbNewLine & "end sub" 
End Sub 
+0

比搜索好多了! –

+0

太棒了,它的工作原理!谢谢GSerg! –

3

VBProj.VBComponents商品有Properties集合。 Workbook对象的一组属性不同于其他(表单,模块等)。

选择工作簿的一个独特属性并搜索组件集合。

试试这个

Private Function FindThisWorkbook(wb As Workbook) As VBIDE.VBComponent 
    Dim VBProj As VBIDE.VBProject 
    Dim oComp As VBIDE.VBComponent 
    Dim oP As Property 

    Set VBProj = wb.VBProject 
    For Each oComp In VBProj.VBComponents 
     Set oP = Nothing 
     On Error Resume Next 
     Set oP = oComp.Properties("ActiveSheet") 
     On Error GoTo 0 
     If Not oP Is Nothing Then 
      ' Found it 
      Set FindThisWorkbook = oComp 
      Exit Function 
     End If 
    Next 

End Function 
+0

谢谢你的建议,这是确定的ThisWorkbook的另一种方式,我可以通过在一个循环(oComp.Properties(I),请将.Name)的所有属性的名称浏览和查找,例如,如果“ActiveSheet”为你建议或者“工作表”就是其中之一。这将唯一标识ThisWorkbook模块。 –