【发布时间】:2018-12-27 05:08:38
【问题描述】:
我想使用 r1c1 公式从当前工作簿 (cbook) 中查找 AF 列中的值,并将其与之前工作簿 (pbook) 中的值进行比较。我使用 r1c1 是因为它更快,但对其他方法持开放态度。
我想复制 AG、AH、AI 和 AJ 列中的值。我已经进行了研究以创建正确的代码,但是在范围和地址(Srng.Address)以及将工作表的名称添加到变量中时遇到了困难。
Srng 是前一个工作簿的路径和文件名,但 .Address 给出了变量所在的单元格。 (我有一个变量工作簿(InstVariable),单元格在 C28 中,但我需要字符串值)。我尝试了许多不成功的尝试来定义 Srang,它是具有先前工作簿的工作表名称的路径。工作表应该是当前工作簿的名称。
下面是我的部分代码。任何帮助表示赞赏!
'Current List Template
Dim cbook As Workbook
Set cbook = ActiveWorkbook
'Prior List Template
Dim pbook As Workbook
'Workbook
' Set pbook = Workbooks.Open(JRDCPriorNoBrk)
cbook.Activate
'********************
'Turns off screen updates (no flashes)
'********************
With Application
'.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
'Make sure user is on JobReq & DataChg INST tab to run macro
Sheets("JobReq & DataChg INST").Activate
'unshare the workbook to run macro
'ActiveWorkbook.SaveAs ActiveWorkbook.FullName, accessmode:=xlExclusive
Application.DisplayAlerts = False
' ActiveWorkbook.ExclusiveAccess
For Each xworksheet In ActiveWorkbook.Worksheets
xworksheet.Activate
If ActiveSheet.Name = "Original" Or ActiveSheet.Name = "JobReq & DataChg INST" Then GoTo NotThisSheet
'unprotects sheets so user can run macro
ActiveSheet.Unprotect
'ActiveSheet.Range("AG2").Select
Dim Srng As Range
Dim LastRow As Long
'Set Srng = Worksheets("Coniguration").Range("_Configuration")
'Set Srng = ActiveSheet.Range("AF2:AJ18")
'pbook.Worksheet (cbook.ActiveSheet.Name)
'LastRowp = .Cells(.Rows.Count, "AF").End(xlUp).Row
'Set Srng = pbook.Worksheet(ActiveSheet.Name)
'Set Srng = PathJRDCPrior.ActiveSheet.Range("AF2:AJ" & LastRowp)
With ActiveSheet
'With pbook.Worksheets(cbook.ActiveSheet.Name)
'With Worksheets(" & PathJRDCPrior & ")
'current worksheet last row
LastRow = .Cells(.Rows.Count, "AF").End(xlUp).Row
'prior worksheet last row
'MsgBox (cbook.ActiveSheet.Name)
With pbook.Worksheets(cbook.ActiveSheet.Name)
'pbook.Worksheets (cbook.ActiveSheet.Name)
LastRowp = .Cells(.Rows.Count, "AF").End(xlUp).Row
SSheet = cbook.ActiveSheet.Name
Set SPath = PathJRDCPrior
'Set Srng = PathJRDCPrior.ActiveSheet.Range("AF2:AJ" & LastRowp)
'Srng = pbook.Worksheets(cbook.ActiveSheet.Name).Range("AF2:AJ" & LastRowp)
Set Srng = Worksheets(SSheet).Range("AF2:AJ" & LastRowp)
End With
' MsgBox (Srng)
With cbook.ActiveSheet.Range("AG2:AG" & LastRow)
With cbook.ActiveSheet.Range("AG2:AG" & LastRow)
**.FormulaR1C1 = "=VLOOKUP(RC32," & Srng.Address(, , xlR1C1, True) & ", 2, 0)"**
.Value = .Value
End With
With cbook.ActiveSheet.Range("AH2:AH" & LastRow)
.FormulaR1C1 = "=VLOOKUP(RC32," & Srng.Address(, , xlR1C1, True) & ", 3, 0)"
.Value = .Value
End With
With cbook.ActiveSheet.Range("AI2:AI" & LastRow)
.FormulaR1C1 = "=VLOOKUP(RC32," & Srng.Address(, , xlR1C1, True) & ", 4, 0)"
.Value = .Value
End With
With cbook.ActiveSheet.Range("AJ2:AJ" & LastRow)
.FormulaR1C1 = "=VLOOKUP(RC32," & Srng.Address(, , xlR1C1, True) & ", 5, 0)"
.Value = .Value
End With
End With
NotThisSheet:
Next xworksheet
'share workbook
ActiveWorkbook.SaveAs ActiveWorkbook.FullName, accessmode:=xlShared
Application.DisplayAlerts = True
MsgBox ("Copying from the prior list is complete.")
End Sub
【问题讨论】:
-
我使用 r1c1 是因为它更快更快?什么?
-
您真的需要使用
Option Explicit并正确声明所有变量 - 很难知道SSheet是拼写错误还是变量。另外,尽量避免使用太多 cmets - cmets 应该提高可读性,而不是阻碍它。