2015-06-20 47 views
1

我正在尝试读取源Excel文件并复制一些值并将其分配给目标工作表中的不同单元格。但在执行宏后。粘贴的价值不符合预期。使用VBA从Excel复制/粘贴值时发生的问题

代码:

Sub Import() 
Dim SourceFile As Workbook 
Dim SourceTab As Worksheet 
Dim TargetTab As Worksheet 

SourceFileName = Application.GetOpenFilename("Excel Files , *.xls;*.xlsx;*.csv") 

If SourceFileName = False Then Exit Sub 
Application.ScreenUpdating = False 

Set TargetTab = Sheets("Output") 
'TargetRow = TargetTab.Cells(TargetTab.Cells.Rows.Count, 1).End(xlUp).Row + 1 
TargetRow = 2 
Set SourceFile = Workbooks.Open(SourceFileName) 

SourceFile.Activate 
Set SourceTab = Sheets("Input") 
SourceTab.Activate 

For i = 1 To Cells(Cells.Rows.Count, 2).End(xlUp).Row 

    If SourceTab.Cells(i, 2) = "VS" Then 
     TargetTab.Cells(i, 3).Value = SourceTab.Cells(i, 31).Value 
     TargetTab.Cells(i, 5).Value = SourceTab.Cells(i, 11).Value 
     TargetTab.Cells(i, 6).Value = SourceTab.Cells(i, 19).Value 
     TargetTab.Cells(i, 7).Value = SourceTab.Cells(i, 27).Value 
     TargetTab.Cells(i, 5).Value = SourceTab.Cells(i, 4).Value 
     TargetTab.Cells(i, 11).Value = SourceTab.Cells(4, 5).Value 
     TargetTab.Cells(i, 13).Value = SourceTab.Cells(2, 25).Value 
     TargetTab.Cells(i, 16).Value = SourceTab.Cells(i, 8).Value 

     SourceTab.Cells(i, 3).Resize(1, 50).Copy 
     ThisWorkbook.Activate 
     TargetTab.Activate 
     Cells(TargetRow, 2).Select 
     Selection.PasteSpecial Paste:=xlPasteValues 
     Application.CutCopyMode = False 
     SourceFile.Activate 

     TargetRow = TargetRow + 1 
     'TargetNewRows = TargetNewRows + 1 
    End If 

Next 
SourceFile.Close False 
Application.ScreenUpdating = True 
MsgBox "Done" 
End Sub 
+0

任何人,请你帮助我在这场惨败! –

+0

**你是说粘贴工作没有错误,但粘贴的值是不正确的** ** –

+0

我修改了代码,现在它的工作正常......但是当我在Excel 2007中运行宏时,它的内部完成30秒,而在Office 365 proplus中运行半小时以上,并且根本没有完成......这里是修改后的代码..你能否请检查并提供建议。 –

回答

1

由于加里的评论表明,你的问题不是很清楚,不过,我给它一个镜头。

注意,在:

For i = 1 To Cells(Cells.Rows.Count, 2).End(xlUp).Row 

Cells(...表达式的计算循环的每一次迭代。如果选择在循环中更改,则每次迭代都可以给出不同的结果。我建议你做这样的事情:

j = Cells(Cells.Rows.Count, 2).End(xlUp).Row 
For i = 1 To j