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