我有一段代码将一行从一个excel复制到另一个excel . 问题是列E到G和N到O都有对另一个excel的引用,当它复制时,它复制公式而不是单元格值,导致按降序将公式重复到目标列 . 我试过隐藏/取消隐藏,但它没有太大的区别 . 目标列D将导致D1 = 1.xslm / sheet1 / formula(n1); D2 = 2.xslm / sheet1 / formula(n2)... - 这是源表格列D的参考 . 在源中,值是正确的,在目标中公式是错误的,它不应该有n1 ,n2 ......如果源行在目标中为122,则应为D1 = 1.xslm / sheet1 / formula(n122),D2 = 2.xslm / sheet1 / formula(n122)
Sub copy1()
Dim c As Range
Dim j As Integer
Dim Source As Worksheet
Dim Target As Worksheet
Dim Sour As String
Dim Tar As String
Dim path As String
Dim AutoSR As Workbook
Dim asrSheet As Worksheet
Set AutoSR = ActiveWorkbook
Set Target = AutoSR.ActiveSheet
path = "c:\first.xlsm"
Tar = "Sheet1"
Set Source = Workbooks.Open(path).Sheets(Tar)
Source.Unprotect Password:="XXX"
Application.DisplayAlerts = False
Columns("E:G").EntireColumn.Hidden = False
Columns("N:O").EntireColumn.Hidden = False
Source.Range("N:O").EntireColumn.Hidden = True
For Each c In Source.Range("a1:a" & Cells.SpecialCells(xlCellTypeLastCell).Row)
If c = lNum Then
Source.Rows(c.Row).Copy Target.Rows(1)
End If
Next c
Source.Range("E:G").EntireColumn.Hidden = True
Source.Range("N:O").EntireColumn.Hidden = True
Source.Protect Password:="XXX"
Source.Activate
ActiveWorkbook.Close SaveChanges:=True
Set Source = Nothing
End Sub
2 回答
更换:
通过:
这将粘贴值而不是公式
EDIT 这个答案是一个快速而肮脏的解决方案!查看答案形式Jeeped,以便更广泛地改进OP的代码 .
首先,看看这一行 .
Cells.SpecialCells(...
未明确引用源工作表 . 它隐含地指ActiveSheet property . 巧合的是,这也恰好是Source工作表,因为打开该工作簿使其成为ActiveSheet . 但是,这不应该依赖 . 最好明确定义所有Range.Parent工作表属性 .至于仅复制值,您可以使用带有xlPasteType xlPasteValues的Range.PasteSpecial method . 但是,直接值传输是一种更有效的传输值的方法,它不涉及剪贴板或.CutCopyMode .
替换所有这一切,
... 有了这个,
这将从列A到匹配行上的最后一个填充单元格(源工作表),并将值传输到从列A1向外辐射的目标工作表 .