Excel VBA:将工作簿、工作表对象传递到子例程时出现问题

Excel VBA:将工作簿、工作表对象传递到子例程时出现问题,excel,vba,object,parameters,Excel,Vba,Object,Parameters,我有一个主例程,它创建一个新工作簿,并根据单独输入工作簿/工作表中的数据动态关联新工作表 摘录主要例行程序: Sub MainRoutine() Dim NmOutBook As String NmOutBook = "Client1Output_" & Format(CStr(Now), "yyyy_mm_dd_hh_mm") Dim PosSourceBk, TrnSourceBk, OutputBk As Workbook Set PosSourc

我有一个主例程,它创建一个新工作簿,并根据单独输入工作簿/工作表中的数据动态关联新工作表

摘录主要例行程序:

Sub MainRoutine()
    Dim NmOutBook As String
    NmOutBook = "Client1Output_" & Format(CStr(Now), "yyyy_mm_dd_hh_mm")

    Dim PosSourceBk, TrnSourceBk, OutputBk As Workbook
    Set PosSourceBk = Workbooks.Open("U:\Documents\Implementations\Client1\Client1Positions.xlsx")
    Set TrnSourceBk = Workbooks.Open("U:\Documents\Implementations\Client1\TradeHistory_0301.xlsx")
    Dim TrnSrcSht, TrnOutSht, PriorTrnOutSht, PosOutSht As Worksheet
    Set TrnSrcSht = TrnSourceBk.ActiveSheet

    'Create workbook to store output sheets
    Set OutputBk = Workbooks.Add

结果是单元格A1:M1被更新,但位于错误的工作簿/工作表中

我试着一个接一个地传递对象引用;当我这样做时,会更新一个不同但仍然错误的工作簿/工作表

我肯定错过了一些明显的东西,但不知道可能是什么


感谢您的帮助。谢谢。

这是因为在With段中,您没有使用点。指定该wb/ws中的更改

在任何With段内,使用点将命令绑定到With段。Ej:

With ThisWorkbook.Sheets("Sheet5")
    Range("A5").Value = "String Test" 'This changes the Cell A5 of the ActiveSheet
    .Range("A5").Value = "Test 2" 'This Changes the Value of Sheet5, part of the With Segment
End With
只需添加点/句点

Sub AddXactSheetHeaders(ByVal wb, ByVal ws)
    With wb
        With ws
            .Range("A1").Value = "TradeDate"
            .Range("B1").Value = "SettleDate"
            .Range("C1").Value = "Tran ID"
            .Range("D1").Value = "Tranx Type"
            .Range("E1").Value = "Security Type"
            .Range("F1").Value = "Security ID"
            .Range("G1").Value = "SymbolDescription"
            .Range("H1").Value = "Local Amount"
            .Range("I1").Value = "Book Amount"
            .Range("J1").Value = "MOIC Label"
            .Range("K1").Value = "Quantity"
            .Range("L1").Value = "Price"
            .Range("M1").Value = "CurrencyCode"
        End With
    End With
End Sub
使用ByRef通过指针传递工作簿/工作表对象,而不是复制它们,然后将它们用作辅助对象子中的父引用。要使用。。。以结尾,使用前缀句点

Sub AddXactSheetHeaders(Byref wb as workbook, ByRef ws as worksheet)

  With wb
   With ws
     .Range("A1").Value = "TradeDate"
     .Range("B1").Value = "SettleDate"
     .Range("C1").Value = "Tran ID"
     .Range("D1").Value = "Tranx Type"
     .Range("E1").Value = "Security Type"
     .Range("F1").Value = "Security ID"
     .Range("G1").Value = "SymbolDescription"
     .Range("H1").Value = "Local Amount"
     .Range("I1").Value = "Book Amount"
     .Range("J1").Value = "MOIC Label"
     .Range("K1").Value = "Quantity"
     .Range("L1").Value = "Price"
     .Range("M1").Value = "CurrencyCode"
   End With
  End With 

End Sub
事实上,wb引用是完全不必要的,而且在语法上是错误的。ws工作表知道其父工作簿是什么

Sub AddXactSheetHeaders(ByRef ws as worksheet)

  With ws
     .Range("A1").Value = "TradeDate"
     .Range("B1").Value = "SettleDate"
     .Range("C1").Value = "Tran ID"
     .Range("D1").Value = "Tranx Type"
     .Range("E1").Value = "Security Type"
     .Range("F1").Value = "Security ID"
     .Range("G1").Value = "SymbolDescription"
     .Range("H1").Value = "Local Amount"
     .Range("I1").Value = "Book Amount"
     .Range("J1").Value = "MOIC Label"
     .Range("K1").Value = "Quantity"
     .Range("L1").Value = "Price"
     .Range("M1").Value = "CurrencyCode"
  End With 

End Sub

感谢用户11198948和里卡多A。一个点让一切变得不同!
Sub AddXactSheetHeaders(Byref wb as workbook, ByRef ws as worksheet)

  With wb
   With ws
     .Range("A1").Value = "TradeDate"
     .Range("B1").Value = "SettleDate"
     .Range("C1").Value = "Tran ID"
     .Range("D1").Value = "Tranx Type"
     .Range("E1").Value = "Security Type"
     .Range("F1").Value = "Security ID"
     .Range("G1").Value = "SymbolDescription"
     .Range("H1").Value = "Local Amount"
     .Range("I1").Value = "Book Amount"
     .Range("J1").Value = "MOIC Label"
     .Range("K1").Value = "Quantity"
     .Range("L1").Value = "Price"
     .Range("M1").Value = "CurrencyCode"
   End With
  End With 

End Sub
Sub AddXactSheetHeaders(ByRef ws as worksheet)

  With ws
     .Range("A1").Value = "TradeDate"
     .Range("B1").Value = "SettleDate"
     .Range("C1").Value = "Tran ID"
     .Range("D1").Value = "Tranx Type"
     .Range("E1").Value = "Security Type"
     .Range("F1").Value = "Security ID"
     .Range("G1").Value = "SymbolDescription"
     .Range("H1").Value = "Local Amount"
     .Range("I1").Value = "Book Amount"
     .Range("J1").Value = "MOIC Label"
     .Range("K1").Value = "Quantity"
     .Range("L1").Value = "Price"
     .Range("M1").Value = "CurrencyCode"
  End With 

End Sub