2016-05-17 6 views
1

Der folgende Code führt zu einem .xls mit den 2 Arbeitsblättern, die ich möchte. Nur ich nicht nur mit Werten .. die Formatierung ist da (und ich denke nicht, dass es sein sollte. Paste. Values. Dammit.), Und die .xls hat eine unzerbrechliche Verknüpfung mit dem ursprünglichen Dokument, das nicht funktioniert Ich muss nicht dort sein (und ich denke, sollte nicht da sein). Alle Zellen enthalten nur Werte und enthalten keine der in der Quellarbeitsmappe enthaltenen Gleichungen.Fehler beim Erstellen neuer Arbeitsmappe mit VBA, Kopieren von 2 von vielen Blättern

Wenn ich die neu erstellte .xls öffne, erhalte ich die Meldung "Das Dateiformat und die Erweiterung von [ws name] .xls stimmen nicht überein. Die Datei könnte beschädigt oder unsicher sein. Wenn Sie der Quelle nicht vertrauen, don ' öffne es. Willst du es trotzdem öffnen? "

Ich verabscheue den Mangel an Vertrauen .. :)

Was mache ich falsch?

Sub QUOTE_ITEM_OUTPUT() 

    Dim ws As Worksheet 

    Dim Filename As String 
    Dim Filelocation As String 
    Dim UserName As String 
    Dim Password As String 

     Filename = Worksheets("CALCULATION PAGE").Range("ITEMNUM").Value & "_" & Worksheets("CALCULATION PAGE").Range("PDFSAVEREV").Value & ".xls" 
     Filelocation = "\\GSWGS\Apps\Global\FILES\Import\GWS-Upload-TST\" 

    With Application 
     .ScreenUpdating = False 

     '  Copy specific sheets 
     Sheets(Array("ITEM OUTPUT", "ROUTING")).Copy 

     '  Paste sheets as values 
     For Each ws In ActiveWorkbook.Worksheets 
      ws.Cells.Copy 
      ws.[A1].PasteSpecial Paste:=xlValues 
      Application.CutCopyMode = False 
      Cells(1, 1).Select 
      ws.Activate 
     Next ws 
     Cells(1, 1).Select 

     ActiveWorkbook.SaveCopyAs Filelocation & Filename 
     ActiveWorkbook.Close SaveChanges:=False 

     .ScreenUpdating = True 
    End With 
End Sub 
+0

Sie 'saveas' statt' savecopyas'. Wenn Sie nur Werte möchten, legen Sie die Bereiche aufeinander fest. – findwindow

Antwort

1

Sie sind als .xls-Datei zu speichern, haben aber nicht angegeben, dass Dateiformat in der saveAs Methode. Aus diesem Grund erhalten Sie Sicherheitswarnungen ...

Sie müssen diesen Parameter in der SaveAs-Methode angeben.

ActiveWorkbook.SaveAs Filename:=Filelocation & Filename, FileFormat:=56 

Hier ist ein Link zu MSDN-Seite für die verschiedenen-Dateiformat-Parameter: https://msdn.microsoft.com/en-us/library/office/ff198017.aspx

EDIT - für die zweite Problem, das Sie Gesicht:

Was die Tatsache, dass Formate über getragen werden , weil Sie nicht den richtigen Enumeration-Wert verwenden.

ws.[A1].PasteSpecial Paste:=xlValues 

sollte sein:

ws.[A1].PasteSpecial Paste:=xlPasteValues 
+0

Perfekt auf diesen Teil meines Problems, danke. Ich musste "Application.DisplayAlerts = False" & true hinzufügen, um die Kompatibilitäts-/Funktionswarnung zu stoppen, nachdem dieser Teil korrigiert wurde. Du bist ein Mann. – Jason

+0

Siehe meine bearbeitete Antwort für das Problem, warum die Formate übertragen werden. Ich dachte nicht, dass Sie "application.displayAlerts = false" benötigen würden, aber ich bin froh, dass Sie diese Lösung gefunden haben. – MacroMarc

+0

Die Formeln sind nicht da. Waren vorher nicht da, aber die Formatierung ist. Ich werde versuchen, die Formeln in dem Makro zu löschen, das die Ausgabedaten vorbereitet. – Jason

1

Verwenden Sie eine andere Unter zu ‚reinigen‘ das Blatt

Sub ApplyValuesTo(ByVal sh As Excel.Worksheet) 

    For Each cell In sh.UsedRange.Cells 
     With cell 
      .Value = .Value 
      '// This may take a while; the next line will allow you to manually 
      '// break if needed (e.g. If you have a lot of data in the sheet) 
      DoEvents 
     End With 
    Next 

End Sub 
Verwandte Themen