我有两本工作簿,我们称之为Workbook1
和Workbook2
Workbook1
:看起来像这样:(我只把数据放在A栏中)
Facility Name| Column B| Column C |
TGG751-M | | |
TGG760-M | | |
TLY701-M | | |
Workbook 2
:
Technology| Facility Name | Remarks |
LTE | TGG751-M | 91%-100% utilization |
LTE | TGG760-M | 91%-100% utilization |
LTE | TLY701-M | Red |
我需要在两个工作簿中匹配Facility Name
,如果匹配的Remarks
的{{1}}为Facility Name
,请在91%-100% utilization
中添加two columns
,将其标记为WorkBook2
和Selected
。
输出就像这样..
For Checking
我的代码:
Technology | Facility Name | Remarks | +1 Column | +1 Column
LTE | TGG751-M | 91%-100% utilization | Selected | For Checking
LTE | TGG760-M | 91%-100% utilization | Selected | For Checking
LTE | TLY701-M | Red | |
如何做到这一点?一旦我运行我的代码它不工作但我没有任何错误。
答案 0 :(得分:1)
您无法打开工作簿并将工作簿类型的变量分配给这样的工作表。在我看来,您在工作簿/工作表中存在的设施名称的逻辑是倒退的。这将打开两个工作簿,将工作表类型的变量分配给每个工作簿中的第一个工作表,并使用其中的工具循环遍历第二个工作簿中的条目以确认工作簿1中是否存在。
Public Sub Selection()
Dim lastRow As Long, rw As Long, rngFacility As Range, strRemark As String
Dim wb1 As Workbook, wb2 As Workbook
Dim ws1 As Worksheet, ws2 As Worksheet
'TextBox2 and TextBox5 need to be recognized here
Set wb1 = Workbooks.Open(TextBox2.Text, ReadOnly:=True)
Set ws1 = wb1.Worksheets(1)
Set wb2 = Workbooks.Open(TextBox5.Text)
Set ws2 = wb2.Worksheets(1)
lastRow = ws1.Range("A" & Rows.Count).End(xlUp).Row
Set rngFacility = ws1.Range("A1:A" & lastRow)
strRemark = "91%-100% utilization"
With ws2
lastRow = .Range("B" & Rows.Count).End(xlUp).Row
For rw = 2 To lastRow
If .Range("C" & rw) = strRemark Then
If Not IsError(Application.Match(.Range("B" & rw), rngFacility, 0)) Then
.Range("D" & rw).Resize(1, 2) = _
Array("Selected", "For Checking")
End If
End If
Next rw
End With
'wb1.Close savechanges:=False
'wb2.Close savechanges:=True
End Sub
鉴于用户表单文本框和双工作簿的性质,我没有从头到尾测试它,但它确实编译并代表我将用于此过程的过程。
答案 1 :(得分:0)
我刚用我提供的代码解决了这个问题。
Public Selection()
Set Sheet2 = Workbooks.Open(TextBox2.Text).Sheets(1)
Set Sheet5 = Workbooks.Open(TextBox5.Text).Sheets(1)
Dim varFacility As Variant
Dim facilityRng As Range
lngLastRow = Sheet5.Range("B" & Sheet5.Rows.Count).End(xlUp).Row
Set facilityRng = Sheet5.Range("B1:B" & lngLastRow)
For rownum = 2 To Sheet2.Range("A" & Sheet2.Rows.Count).End(xlUp).Row
varFacility = Sheet2.Range("A" & rownum).Value
On Error Resume Next
varPosition = Application.WorksheetFunction.Match(varFacility, facilityRng, 0)
If Err = 0 Then
If Sheet5.Range("C" & varPosition).Value Like "91%-100% utilization*" Then
Sheet2.Range("C" & rownum).Value = "Selected"
Sheet2.Range("D" & rownum).Value = "For Checking"
End If
End If
On Error GoTo 0
Next
End Sub