VBE-新代码未附加到目标工作簿

问题描述

我正在编写一个宏,它将多个表单合并为一个宏,然后以编程方式向新的合并文件添加“ BeforeRightClick”方法

除了将代码添加到新工作簿中而不是将代码添加到新工作簿中之外,该代码大部分都有效,它会创建幻影副本并将代码添加到其中。这个鬼文件似乎在任何地方都不存在。

Issue example screenshot

我尝试强迫它首先激活工作簿,并且将其附加为方法,将方法直接拼接为主要方法。似乎什么都没有。

注释:

  • 我用于这些工作簿的文件格式是XLSB
  • 我用来做这个的来源是here:
  • 勾选了“ Microsoft Visual Basic for Applications Extensibility 5.3库”。

相关代码部分:


    With New_WB
        Set xPro = .VBProject
        Set xCom = xPro.VBComponents(New_WB.Sheets("Reorder Level Form").CodeName)
        Set xMod = xCom.codemodule
    
        With xMod
            xLine = .CreateEventProc("BeforeRightClick","Worksheet")
            xLine = xLine + 1
            .InsertLines xLine,"  a = Cells(ActiveCell.Row,22).Value"
            xLine = xLine + 1
            .InsertLines xLine,"  i = 1"
            xLine = xLine + 1
            .InsertLines xLine,"  For Each c In Selection"
            xLine = xLine + 1
            .InsertLines xLine,"      If Cells(c.Row,22).Offset(0,-21).Value <> """" Then"
            xLine = xLine + 1
            .InsertLines xLine,"      With Cells(c.Row,22)"
            xLine = xLine + 1
            .InsertLines xLine,"           Select Case a"
            xLine = xLine + 1
            .InsertLines xLine,"           Case False"
            xLine = xLine + 1
            .InsertLines xLine,"               .Value = True"
            xLine = xLine + 1
            .InsertLines xLine,"           Case Else"
            xLine = xLine + 1
            .InsertLines xLine,"              .Value = False"
            xLine = xLine + 1
            .InsertLines xLine,"           End Select"
            xLine = xLine + 1
            .InsertLines xLine,"      End With"
            xLine = xLine + 1
            .InsertLines xLine,"      End If"
            xLine = xLine + 1
            .InsertLines xLine,"  If i >= 1000 Then Exit Sub"
            xLine = xLine + 1
            .InsertLines xLine,"  i = i + 1"
            xLine = xLine + 1
            .InsertLines xLine,"  Next c"
            xLine = xLine + 1
            .InsertLines xLine,"  Cancel = True"
        End With
        With .Sheets("Reorder Level Form")
            .Columns("B:B").Delete Shift:=xlToLeft
            .Columns("D:F").ColumnWidth = 8
            .Columns("I:I").ColumnWidth = 6
            .Columns("K:K").ColumnWidth = 13
            .Columns("L:M").ColumnWidth = 9
            .Columns("N:P").ColumnWidth = 17
            .Columns("P:Q").ColumnWidth = 10
            .Columns("R:V").ColumnWidth = 12
            
            With .Rows("1:1")
                .HorizontalAlignment = xlCenter
                .VerticalAlignment = xlCenter
                .WrapText = True
                .Orientation = 0
                .Addindent = False
                .IndentLevel = 0
                .ShrinkToFit = False
                .ReadingOrder = xlContext
                .MergeCells = False
                .RowHeight = 45
            End With
        End With
    End With

完整方法


    Sub Compiler()
    Dim Header() As Variant
    Dim Data() As Variant
    Dim ws As Worksheet
    Dim rngOutput As Range
    Dim xPro As VBIDE.VBProject
    Dim xCom As VBIDE.VBComponent
    Dim xMod As VBIDE.codemodule
    Dim xLine As Long
    Dim strFilename As String
    
    strFilename = ThisWorkbook.Sheets("Settings").Range("B1").Value & "\Stock Level Converter\Stock Level Change Extract " & Format(Now,"dd-mm-yy hhmm") & ".xlsb"
    
    totWB = 0
    totWB = Count_WB
    n = 0
    Hd_Row = Head_Row
    
    Set New_WB = Workbooks.Add
    New_WB.SaveAs strFilename,FileFormat:=50
    
    dirWB = Dir(ThisWorkbook.Sheets("Settings").Range("B1").Value & "\Stock Level Converter\Import Files\")
    
    '--------------------------------------------------
    
    While dirWB <> ""
     
    'Opens current file for import and saves it as a back up
        Set External_WB = Workbooks.Open(ThisWorkbook.Sheets("Settings").Range("B1").Value & "\Stock Level Converter\Import Files\" & dirWB)
        ChkAutoSv
        strBackup = ThisWorkbook.Sheets("Settings").Range("B1").Value & "\Stock Level Converter\Import Back Ups\" & Format(Now,"yyyymmddhhmmss")
        External_WB.SaveAs strBackup,xlExcel12
    Deletes old copy
        Kill ThisWorkbook.Sheets("Settings").Range("B1").Value & "\Stock Level Converter\Import Files\" & dirWB
        frmMenu.lblStatus.Value = "Task: " & dirWB
        frmMenu.Repaint
        'DoEvents
        
        For Each External_WS In Worksheets
            If External_WS.Name = "Reorder Level Form" Then
            'If External_WS.Visible = xlSheetVisible Then"
    
                lst_Col = 27 'Last_Col 'the last used column in the current import file
                
                With External_WS
                    .Activate
                    If .Range("B1").Value <> "CONC" Then
                        .Columns("B:B").Insert Shift:=xlToLeft
                    End If
                    .Columns(27).EntireColumn.Insert Shift:=xlRight
                    .Cells(Hd_Row,27).Value = "Store No."
                    .Cells.EntireColumn.Hidden = False
                    .Cells.EntireRow.Hidden = False
                    .Cells.UnMerge
                    For i = Hd_Row + 1 To Last_Row(1)
                        Cells(i,27).Value = .Cells(2,3).Value
                    Next i
                    'Assigns data in header row to array
                    Header = .Range(Cells(Hd_Row,1),Cells(Hd_Row,27)).Value2
                    'Assigns data to array
                    Data = .Range(Cells(Hd_Row + 1,Cells(Last_Row(1),27)).Value2
                
                End With
                
                'Checks sheet exists in new file
                If WorksheetExists(External_WS.Name) = False Then
                    'Worksheet does not exist in New File
                    'Create new sheet and name it.
                    New_WB.Sheets.Add.Name = External_WS.Name
                    'Paste header array to cell(1,1)
                    Set rngOutput = New_WB.Sheets(External_WS.Name).Range("A1")
                    rngOutput.Resize(UBound(Header,UBound(Header,2)) _
                    = Header
                End If
                'Paste Data to column A of last used row + 1
                r = Last_Row(2) + 1
                
                Set rngOutput = New_WB.Sheets(External_WS.Name).Cells(r,1)
                
    
                rngOutput.Resize(UBound(Data,UBound(Data,2)) _
                = Data
                    
            End If
    
        Next External_WS
        
        With External_WB
            .Close SaveChanges:=False
        End With
    
        'DoEvents
        dirWB = Dir()
    Wend
        
    With New_WB
        Set xPro = .VBProject
        Set xCom = xPro.VBComponents(New_WB.Sheets("Reorder Level Form").CodeName)
        Set xMod = xCom.codemodule
    
        With xMod
            xLine = .CreateEventProc("BeforeRightClick","  Cancel = True"
        End With
        With .Sheets("Reorder Level Form")
            .Columns("B:B").Delete Shift:=xlToLeft
            .Columns("D:F").ColumnWidth = 8
            .Columns("I:I").ColumnWidth = 6
            .Columns("K:K").ColumnWidth = 13
            .Columns("L:M").ColumnWidth = 9
            .Columns("N:P").ColumnWidth = 17
            .Columns("P:Q").ColumnWidth = 10
            .Columns("R:V").ColumnWidth = 12
            
            With .Rows("1:1")
                .HorizontalAlignment = xlCenter
                .VerticalAlignment = xlCenter
                .WrapText = True
                .Orientation = 0
                .Addindent = False
                .IndentLevel = 0
                .ShrinkToFit = False
                .ReadingOrder = xlContext
                .MergeCells = False
                .RowHeight = 45
            End With
        End With
    End With
    
    New_WB.Save
    New_WB.Close,True
    
    ThisWorkbook.VBProject.VBE.MainWindow.Visible = False
    End Sub

谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...