重复VBA在Excel

时间:2017-06-14 15:48:19

标签: excel vba

正如你可能从代码中得知的那样,我对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

有人能指出我正确的方向吗?

非常感谢您的帮助。

2 个答案:

答案 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