Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 使用搜索和循环从一张图纸复制并粘贴到另一张图纸_Excel_Vba_Loops - Fatal编程技术网

Excel 使用搜索和循环从一张图纸复制并粘贴到另一张图纸

Excel 使用搜索和循环从一张图纸复制并粘贴到另一张图纸,excel,vba,loops,Excel,Vba,Loops,我基本上是在尝试从sht1搜索关键字,复制从sht1到sht2的整个范围,并确保sht2从第10行开始粘贴。然后循环应在sht1中搜索相同的关键字,并在sht2中继续循环到第11行,直到循环结束。对于sht1是可以的,但是当它粘贴到sht2上时,结果不是循环的,而是以某种方式获得与sht1相同的空间数。不知道怎么解决。 下面是我的代码。如果您能给我一些建议,我将不胜感激 如果我正确理解您的需要,您应该仅在正匹配后增加rowp,以便在前面的sht2行之后继续复制。试着这样做: Sub shipsh

我基本上是在尝试从sht1搜索关键字,复制从sht1到sht2的整个范围,并确保sht2从
第10行开始粘贴。然后循环应在sht1中搜索相同的关键字,并在sht2中继续循环到第11行,直到循环结束。对于sht1是可以的,但是当它粘贴到sht2上时,结果不是循环的,而是以某种方式获得与sht1相同的空间数。不知道怎么解决。
下面是我的代码。如果您能给我一些建议,我将不胜感激


如果我正确理解您的需要,您应该仅在正匹配后增加
rowp
,以便在前面的
sht2
行之后继续复制。试着这样做:

Sub shipshore()

Dim wb As Workbook
Dim sht1 As Worksheet
Dim sht2 As Worksheet
Dim row As String
Dim rowp As String

row = 2
rowp = 10


Set wb = ThisWorkbook
Set sht1 = wb.Sheets("datasheet")
Set sht2 = wb.Sheets("Sheet1")

Do Until sht1.Range("G" & CStr(row)) = ""

  If sht1.Range("F" & CStr(row)) = "abc" Then
    Sheets("datasheet").Range("A" & CStr(row) & ":J" & CStr(row)).Copy

    Sheets("Sheet1").Range("A" & CStr(rowp) & ":J" & CStr(rowp)).PasteSpecial _
           Paste:=xlPasteValues
    rowp = rowp + 1    
  End If

  row = row + 1

Loop

End Sub

另一个问题:是否可以运行另一个if语句,而不必再次遍历循环?代码变得低效且缓慢..也许您可以尝试加快整个宏的执行速度,在开始时添加:Application.ScreenUpdate=False Application.EnableEvents=False Application.Calculation=xlCalculationManual,在宏应用程序结束时添加。Calculation=xlCalculationAutomatic Application.EnableEvents=TrueApplication.screenUpdate=True。此外,您可以使用Range.Find()而不是逐行更改循环的逻辑
Sub shipshore()

Dim wb As Workbook
Dim sht1 As Worksheet
Dim sht2 As Worksheet
Dim row As String
Dim rowp As String

row = 2
rowp = 10


Set wb = ThisWorkbook
Set sht1 = wb.Sheets("datasheet")
Set sht2 = wb.Sheets("Sheet1")

Do Until sht1.Range("G" & CStr(row)) = ""

  If sht1.Range("F" & CStr(row)) = "abc" Then
    Sheets("datasheet").Range("A" & CStr(row) & ":J" & CStr(row)).Copy

    Sheets("Sheet1").Range("A" & CStr(rowp) & ":J" & CStr(rowp)).PasteSpecial _
           Paste:=xlPasteValues
    rowp = rowp + 1    
  End If

  row = row + 1

Loop

End Sub