我想要的是什么: 我有很多不同设备的床单。让我们调用其中一张" WS1"。
我有一张单独的表单,其中包含所有现有设备和旁边的相应操作系统。我们称之为" list"。
现在我想要其他工作表(例如&#34; WS1&#34;)检查&#34;列表&#34;,找到合适的设备,并将正确的操作系统复制到WS1工作表中。< / p>
手动方式是:
到目前为止我所做的事情
Dim DataObj As New MSForms.DataObject
Dim strCliBoa As String
'strCliBoa = DataObj.GetText
DataObj.GetFromClipboard
Range("C3").Select
Selection.Copy
strCliBoa = DataObj.GetText
Sheets("list").Select
Range("A1").Select
Cells.Find(What:=strCliBoa, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=True, SearchFormat:=False).Activate
ActiveCell.Offset(0, -1).Select
Selection.Copy
strCliBoa = DataObj.GetText
Sheets("WS1").Select
ActiveCell.Offset(0, -1).Select
ActiveSheet.Paste
ActiveCell.Offset(1, 1).Select
我的问题: &#34;运行时错误91:对象变量或未设置块变量&#34; 它标志着cells.find-method。
有人可以告诉我我做错了什么吗?^^ 提前谢谢!
(哦,差点忘了:我在Win7上使用ms excel 2010)
答案 0 :(得分:2)
如果找不到您要查找的字符串,则会收到该错误。如果找不到任何内容,find函数将返回“Nothing”
Dim r As Range
Set r = Cells.find(What:=strCliBoa, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=True, SearchFormat:=False)
If r Is Nothing Then
'handle error
Else
'fill in your code
End If
答案 1 :(得分:1)
我会使用VLOOKUP()功能为您提供答案。所以Sheet1包含几个设备,我需要找到正确的操作系统。 Sheet2包含设备和操作系统之间的匹配。
在Sheet1上,在设备旁边的单元格中输入此公式并将其拉下(当然根据您的特定需求进行编辑)。
=VLOOKUP(A2;Sheet2!$A$1:$B$20;2;0)
编辑: VLOOKUP功能仅在操作系统位于第二列时才有效。切换列或在末尾使用辅助列来包含操作系统。
答案 2 :(得分:0)
在具有设备名称(WS1)的表格中放置公式:
=INDEX(List!$A$2:$B$10;MATCH('WS1'!C3;List!$B$2:$B$10;0);1)
其中:
List!$A$2:$B$10
是您在列表中具有Devices + OS的范围
'WS1'!C3
是您要在列表中搜索的设备(在您的情况下为“WS1”)
List!$B$2:$B$10
是工作表列表中的列,其中列出了设备。
如果您想使用VBA,请使用:
Sub FindDevicePasteOS()
'Find corresponding OS for the device
Dim intRow As Integer
Dim wsht As Worksheet
For Each wsht In Worksheets
If wsht.Name <> "List" Then 'add more sheets you want to exclude using OR (e.g. ... Or wsht.Name <> "Cover Sheet" Then)
For intRow = 3 To wsht.Cells(Rows.Count, 3).End(xlUp).Row 'presuming there is nothing else in the column C below the devices
If Not Worksheets("List").Cells.Find(what:=wsht.Cells(intRow, 3)) Is Nothing Then
wsht.Cells(intRow, 2) = Worksheets("List").Cells.Find(what:=wsht.Cells(intRow, 3)).Offset(0, -1)
End If
Next intRow
End If
Next wsht
End Sub
答案 3 :(得分:0)
因此,我使用了伪解决方案,在代码中添加了If x is no块,以跳过错误的代码。我能够处理大约80%的数据,这对我很有利。我仍然不明白为什么Find不会返回任何内容。
另一个有趣的,也许是相关的问题发生在另一台运行相同宏的计算机上-在我几次遇到此问题后,我的计算机给了我一个蓝屏,显示“线程被卡在驱动程序中”消息。它们可以关联吗? Excel处理要快很多,并且在线程处理中混在一起?
可是食物,我不知道为什么这个发现不能每次都起作用。
答案 4 :(得分:0)
在 Sobigen 帖子中,我不得不将部分 LookAt:=xlPart
切换到 LookAt:=xlWhole
以使其工作,因为 If r Is Nothing Then
在找到部分匹配时抛出错误。除此之外,代码工作得很好,谢谢!