【发布时间】:2018-01-14 03:26:13
【问题描述】:
我正在使用 VBA 尝试查看一个工作簿中单元格中的值是否与另一个工作簿中的命名范围匹配,如果它们匹配,则从这些命名范围中的另一列复制粘贴值。我知道他们会匹配。目的只是将值复制到其指定的命名范围中。
问题出在这一行:
If rng = ws2.Range("NamedRange") Then
下面是我的代码:
Sub Button4_Click()
Dim strFileName As String
Dim wb1 As Workbook
Dim ws1 As Worksheet
Dim wb2 As Workbook
Dim ws2 As Worksheet
Dim cell As Range
Dim rng As Range
Dim RangeName As String
Dim CellName As String
''Set wb2 = ActiveWorkbook
''Set ws2 = wb2.Sheet("Output")
''ws2.Range("D1:D12").Copy
''Set wb1 = ActiveWorkbook
strFileName = CreateObject("WScript.Shell").specialfolders("Desktop") & "\BAC GVP - Template_Update_121917.xlsm"
If Dir(strFileName) <> vbNullString Then
Set wb1 = Workbooks.Open(strFileName)
Else
MsgBox "Sorry, the file does not exist on your Desktop at this time, please drop a copy to your Desktop from server!"
End If
''Set wb2 = ThisWorkbook
''Set ws2 = wb2.Sheets("Output")
''Set ws1 = wb1.Sheets("RVP Local GAAP")
''ws2.Range("D4:D12").Copy
''ws1.Range("G13:G21").PasteSpecial xlPasteValues
''RangeName = "myData"
''CellName = "G11:G83"
''Set cell = Worksheets("RVP Local GAAP").Range(CellName)
''ThisWorkbook.Names.Add Name:=RangeName, RefersTo:=cell
''RangeName = "NamedRange"
''CellName = "C4:C12"
Set wb2 = ThisWorkbook
Set ws2 = wb2.Sheets("Output")
Set ws1 = wb1.Sheets("RVP Local GAAP")
For Each rng In ws1.Range("CurrentTaxPerLocalGAAPProvision")
If rng = ws2.Range("NamedRange") Then
ws2.Range("ReportBalance").Copy
ws1.Range("CurrentTaxPerLocalGAAPProvision").PasteSpecial xlPasteValues
MsgBox "Values Copied Successfully"
End If
Next rng
MsgBox "Both Ranges do not have the same data"
End Sub
见下图 - 单元格 G29 被称为“GVP_Donations_CurrentTaxPerLocalGAAPProvision”...所以对于这个例子,我希望 $4,313 出现在单元格 G29 中
CurrentTaxPerLocalGAAPPprovision:
范围(“名称范围”):
【问题讨论】:
-
名为
NamedRange的命名范围的地址是什么?是单细胞还是多细胞? (如果有多个单元格,则不能将单个值与数组进行比较。) -
命名范围有不同的名称,因此多个单元格具有不同的命名范围。例如)单元格 A - 命名范围“A” 单元格 b 命名范围 =“B”。然后我有一个包含值 A、B 等的表,我想检查表中的这些值是否与命名范围的名称匹配(如果有意义的话)。表中的值也是我将其命名为“NamedRange”的整列
-
'我将整个列命名为“NamedRange”' - 在这种情况下,
rng = ws2.Range("NamedRange")将不起作用 - VBA 不支持将标量与向量进行比较。你想在那个声明中做什么?您是要查看整个列是否与rng.Value具有相同的值,还是要查看rng.Value是否存在于列中的某个位置? -
我正在尝试比较名为 ("NamedRange") 的命名范围中的单元格值是否用作名为 (CurrentTaxPerLocalGAAPProvision) 的 rng 中的多个单元格中的命名范围。所以有多个单元格,我为所有单元格创建了命名范围,现在我试图比较(“NamedRange”)中单元格的值,以查看这些值是否作为(CurrentTaxPerLocalGAAPProvison)名称范围中的命名范围存在。抱歉,我在解释方面很糟糕,而且对 VBA 很陌生。
-
因此,对于
CurrentTaxPerLocalGAAPProvision范围内的每个值,您想查看它是否作为值存在于NamedRange范围内的任何位置,如果这些值中的 anyCurrentTaxPerLocalGAAPProvision范围匹配,您想用取自ReportBalance范围的值替换整个CurrentTaxPerLocalGAAPProvision范围。
标签: vba excel named-ranges