2016-08-03 13 views
8

Tôi hiện đang sao chép toàn bộ trang tính từ Tệp A. vào tệp B. một số trang tính chỉ cần sao chép các giá trị và không có công thức. Có 1 bảng tính cụ thể mà tôi cần phải sao chép định dạng cùng với các công thức nhưng tôi không muốn các công thức tham khảo tệp gốc. tôi muốn nó tham khảo các tờ trong tập tin mới .. Làm thế nào tôi có thể sao chép các bảng tính/công thức và không tham khảo các tập tin ban đầu.Sao chép công thức excel mà không tham khảo trang tính trước trong vb.net

Dưới đây tôi có mã sao chép một trang tính và sau đó thay thế các công thức chỉ với các giá trị cho một trang tính.

xlWorksheetSource = xlWorkbookSource.Sheets(sheet.Name) 
       xlWorksheetSource.Copy(After:=xlWorkbookDestination.Worksheets(xlWorkbookDestination.Worksheets.Count)) 

       xlWorkDestSource = xlWorkbookDestination.Worksheets(xlWorkbookDestination.Worksheets.Count) 
       ws = xlWorkDestSource 

With ws.UsedRange 
        .Copy() 
        .PasteSpecial(Paste:=XlPasteType.xlPasteValues, _ 
        Operation:=XlPasteSpecialOperation.xlPasteSpecialOperationNone, SkipBlanks:=False, Transpose:=False) 
        xlApp.CutCopyMode = False 
End With 

báo lỗi khi cố gắng pasteformulas giải pháp của bạn

.Private Sub Worksheet_Change(ByVal Target As Range) 
    If Not Application.Intersect(Target, Me.Range("BE4")) Is Nothing Then 
BE4 = Target.Value 

If BE4 = "X" Then 
    Worksheets("Invoice 2").Visible = xlSheetVisible 
    Exit Sub 
End If 

If BE4 = "" Then 
    Worksheets("Invoice 2").Visible = xlSheetVeryHidden 
    Exit Sub 
End If 

End Nếu

+0

Nếu các công thức tham chiếu tệp gốc cũng tham chiếu đến các trang bạn đã sao chép vào tệp mới, bạn có thể khắc phục sự cố của mình bằng cách sao chép tất cả các trang có liên quan trong một bản sao. Tôi không chắc chắn những gì tương đương vb.net là, nhưng trong VBA nó sẽ là một cái gì đó như 'xlWorkbookSource.Sheets (Array (" Sheet4 "," Sheet2 "," Sheet1 ")) Sao chép Sau: = xlWorkbookDestination.Worksheets (xlWorkbookDestination.Worksheets.Count)) ' – YowE3K

Trả lời

1

Thay đổi giá trị tham số đầu tiên của PasteSpecial để xlPasteFormulas

.PasteSpecial(Paste:=XlPasteType.xlPasteFormulas, _  
Operation:=XlPasteSpecialOperation.xlPasteSpecialOperationNone, SkipBlanks:=False, Transpose:=False) 
       xlApp.CutCopyMode = False 
+0

Tôi đã thử rằng nhưng vì một số lý do nó bị treo khi nó cố gắng làm điều đó ... và tôi nhận được một thông báo lỗi lỗi chạy lỗi thời gian 13 loại không phù hợp. Tôi nhấp vào gỡ lỗi và nó nói thông báo lỗi sau tôi dán trong bài gốc – Sirus

1

Dưới đây là một cách tiếp cận trong VBA, hy vọng bạn có thể dễ dàng chuyển đổi trong. Net, tôi không có VisualStudio trên máy này để có thể ' t viết VB.Net. Ngoài ra, tôi không quá tốt với VB.Net

Lần đầu tiên bạn tải tất cả các công thức trong một mảng (nó cũng tải các giá trị, trong trường hợp bạn có ô hỗn hợp), trong mảng chỉ cập nhật tên bảng (hoặc tên wb hoặc bất cứ điều gì bạn muốn) và sau đó đổ mảng đến đích. Sau đó sao chép một lần nữa và các định dạng chỉ dành riêng cho quá khứ.

Sub test() 

    Dim arr 

    Dim strSheetFrom  As String 
    Dim strSheetTo   As String 

    Dim lctrRow    As Long 
    Dim lctrCol    As Long 

    strSheetFrom = "Sheet3" 
    strSheetTo = "Sheet2" 


    '/ First: Update your formulas in array and simply dump them. 
    arr = Sheet2.UsedRange.Formula 

    For lctrRow = LBound(arr, 1) To UBound(arr, 1) 
     For lctrCol = LBound(arr, 2) To UBound(arr, 2) 
      arr(lctrRow, lctrCol) = Replace(arr(lctrRow, lctrCol), strSheetFrom, strSheetTo) 
     Next 
    Next 

    Sheet1.Cells(1, 1).Resize(UBound(arr, 1), UBound(arr, 2)) = arr 

    '/ Now formats 
    Sheet2.UsedRange.Copy 
    Sheet1.Cells(1, 1).PasteSpecial xlPasteFormats 
    Application.CutCopyMode = False 

End Sub 
Các vấn đề liên quan