2016-08-03 20 views
8

Obecnie mam to kopiowanie całego arkusza roboczego z pliku A. do pliku B. niektóre arkusze po prostu muszą skopiować wartości i nie mają formuł. Jest jeden arkusz roboczy, który muszę skopiować format wraz z formułami, ale nie chcę, aby formuły odwoływały się do oryginalnego pliku. chcę, aby odwoływał się do arkuszy w nowym pliku. Jak mogę skopiować arkusz/formuły i nie odwołując się do oryginalnego pliku.Skopiuj formuły excel bez odniesienia do poprzedniego arkusza w vb.net.

Poniżej mam kod, który kopiuje arkusz roboczy, a następnie zastępuje formuły tylko wartościami dla jednorazowych arkuszy kalkulacyjnych.

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łąd podczas próby swoich pasteformulas rozwiązanie

.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 If

+0

Jeśli formuły odwołujące się do oryginalnego pliku odwołują się do arkuszy skopiowanych do nowego pliku, można obejść problem, kopiując wszystkie odpowiednie arkusze w jednym egzemplarzu. Nie jestem pewien, co to jest odpowiednik vb.net, ale w VBA będzie to coś w stylu 'xlWorkbookSource.Sheets (Array (" Arkusz4 "," Arkusz2 "," Arkusz1 ")). Kopiuj po: = xlWorkbookDestination.Worksheets (xlWorkbookDestination.Worksheets.Count)) ' – YowE3K

Odpowiedz

1

Zmiana pierwsza wartość parametru PasteSpecial do xlPasteFormulas

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

Próbowałem, ale z jakiegoś powodu to zawiesza się, gdy próbuje to zrobić ... i otrzymuję komunikat o błędach w błędnym czasie wykonania błędu 13. Klikam przycisk debugowania i pojawia się komunikat o błędzie "Wklejony" w oryginalnym wpisie – Sirus

1

Oto jedno podejście w VBA, nadzieja możesz łatwo konwertować w .Net, nie mam VisualStudio na tym komputerze, więc mogę ' t napisz VB.Net. Plus nie jestem tak dobry z VB.Net

Najpierw ładujesz wszystkie formuły w tablicy (również ładuje wartości, jeśli masz mieszane komórki), następnie w tablicy zaktualizuj nazwę arkusza (lub nazwę wb lub cokolwiek chcesz), a następnie zrzuć tablicę do miejsca docelowego. Następnie skopiuj ponownie i tylko formaty ze specjalnymi danymi.

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