正如你可能从代码中得知的那样,我对VBA很新,所以如果这是一个愚蠢的问题,请道歉。
我需要一个代码块来查看一个工作表(RawData),查找全局变量Verb1中指定的文本字符串,并将其粘贴到另一个工作表(Verbatim)的第一个空列中。
我的难点在于,存储在Verb1中的字符串在RawData中可能会出现1,2或3次,因此我需要使用Find函数来检查多列,即使在找到第一次出现的字符串之后也是如此。
我的代码实际上在做的是复制保存第一次出现的字符串的列,并将其粘贴的次数等于搜索范围中的列数...在这种情况下,688倍。
我已经检查过代码在没有For ... Next语句的情况下工作(即它找到第一次出现的字符串,并将其粘贴到Verbatim工作表的第一个空白列中),但我看不到这个陈述中的错误是什么。
Public Verb1 As String
Sub Paste2()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim aCell As Range
Dim NextCol As Long
Set ws1 = ThisWorkbook.Sheets("RawData")
Set ws2 = ThisWorkbook.Sheets("Verbatim")
Set Rng = ThisWorkbook.Sheets("RawData").Range("A1:ZZ1")
NextCol = 0
Worksheets("RawData").Activate
With ws1
'Copy and Paste Verbatim
For Each Cell in Rng
NextCol = NextCol + 1
Set aCell = Worksheets("RawData").Range("A1:ZZ1").Find(What:=Verb1,
LookIn:=xlValues, LookAt:=xlPart, MatchCase:=False, SearchFormat:=False)
aCell.EntireColumn.Copy ws2.Cells(1, NextCol)
Next Cell
End With
End Sub
有人能指出我正确的方向吗?
非常感谢您的帮助。
答案 0 :(得分:1)
您应该将After
的选项添加到Set aCell
:
首先,在With
语句之前,添加Set aCell = rng.Cells(1, 1)
。然后将Set aCell
切换为:
Set aCell = Worksheets("RawData").Range("A1:ZZ1").Find(What:=Verb1, _
LookIn:=xlValues, LookAt:=xlPart, MatchCase:=False, SearchFormat:=False, after:=aCell)
此外,可能有一种更优雅的方式,但是,如果你已经找到了字符串的所有实例,那么无论如何,你都会遍历范围内的单元格,你可以添加一个快速{ {1}}查看您应该复制信息的次数:
COUNTIF()
答案 1 :(得分:1)
以下是使用protocol NotifyDelegate {
func collectionViewSelectedIndex(indexPath : Int)
}
class CollectionViewForSessions: ... {
var delegate: NotifyDelegate?
func ... {
//The nextview delegate
sessionCollection.delegate = self
}
func ... {
//Instead of inputing a number, customize it to input a string segContoll.titleForSegment(at: segContoll.selectedSegmentIndex)
delegate?.collectionViewSelectedIndex(indexPath: indexPath.row)
}
}
class MessagesWithPerson: NotifyDelegate {
func collectionViewSelectedIndex(indexPath: Int) {
}
}
并清理部分代码的另一种方式。
.FindNext