2017-07-17 5 views
0
Sub CostPriceMain() 

Dim SourceWkb As Workbook 
Dim TargetWkb As Workbook 
Dim SourceWksht As Worksheet 

Application.ScreenUpdating = False 
Application.DisplayAlerts = False 

NewFile = Application.GetOpenFilename(FileFilter:="Microsoft Excel Files   
(*.xlsx; *.xls), (*.xlsx; *.xls), All Files, *.*", FilterIndex:=1) 

If NewFile = False Then Exit Sub 
If NewFile <> False Then 
Set SourceWkb = Workbooks.Open(NewFile) 
End If 

Set TargetWkb = Workbooks.Open("C:\WK24.xlsx") ' warning - XLS file could cause problems - see note 

For Each SourceWksht In SourceWkb.Worksheets 
If SourceWksht.Visible Then 
    SourceWkb.Sheets("Price List").Range("C:E").Copy 
    TargetWkb.Sheets("Price List").Range("C:E").PasteSpecial Paste:=xlValues 
End If 

Next SourceWksht 

TargetWkb.Close False 
SourceWkb.Close False 

Application.ScreenUpdating = True 
Application.DisplayAlerts = True 

Done = MsgBox("Task Complete", vbOKOnly) 

End Sub 

Mein Hauptproblem Kopieren scheint mitSheets keine Daten über

 SourceWkb.Sheets("Price List").Range("C:E").Copy 
     TargetWkb.Sheets("Price List").Range("C:E").PasteSpecial Paste:=xlValues 

Es läuft ohne eine Fragen zu sein, aber es ist nicht wirklich die Daten über das Kopieren, und ich kann nicht zu arbeiten scheinen, warum ich versuchte

TargetWkb.Sheets("Price List").Range("A:A").Value = SourceWkb.Sheets("Price 
    List").Range("A:A") 

Bit immer noch das gleiche Ergebnis keine Daten erhalten, irgendwelche Ideen?

+1

Sind Sie sicher, dass die Blattnamen korrekt sind und die Bereiche? Kopieren Sie nicht die Daten * oder * wird dieser Teil der Anweisung nicht ausgelöst? Gehen Sie mit "F8" durch das Makro, um zu sehen, ob es diese Zeile sogar ausführt. Ich denke, das Problem könnte in der Logik liegen. Sie durchlaufen Arbeitsblätter in der Quelle, aber nichts mit den sichtbaren Blättern. – BruceWayne

+0

Warum durchlaufen Sie die Arbeitsblätter (zB 'For Each SourceWksh in SourceWkb.Worksheets', wenn Sie die Daten eines bestimmten Arbeitsblatts kopieren? – Jeeped

Antwort

1

Es gibt einige Kuriositäten in Ihrem Code. Am bemerkenswertesten:

Geben Sie diese schnelle umschreiben Sie einen Schuss und sehen, ob das Problem aufklärt. Ich habe Kommentare hinzugefügt, um zu sagen, was jeder Codeblock tut, falls Missverständnisse auftreten.

Sub CostPriceMain() 

    Dim SourceWkb As Workbook 
    Dim TargetWkb As Workbook  

    'shhh 
    Application.ScreenUpdating = False 
    Application.DisplayAlerts = False 

    'ask user for excel file to source from 
    NewFile = Application.GetOpenFilename(FileFilter:="Microsoft Excel File (*.xlsx; *.xls), (*.xlsx; *.xls), All Files, *.*", FilterIndex:=1) 

    'Did they pick a file? 
    If Not NewFile = False Then 
     Set SourceWkb = Workbooks.Open(NewFile) 
    Else 
     Exit Sub 
    End If 

    'Set up the target workbook 
    Set TargetWkb = Workbooks.Open("C:\WK24.xlsx") ' warning - XLS file could cause problems - see note 

    'Copy the price list from source workbook on the tab called "Price List" 
    'For columns C through E. Copying it to the Target Workbook to the tab 
    'called "Price List" using the same columns, only copying the values. 
    SourceWkb.Sheets("Price List").Range("C:E").Copy 
    TargetWkb.Sheets("Price List").Range("C:E").PasteSpecial Paste:=xlValues 

    'Clean up 
    TargetWkb.Close False 
    SourceWkb.Close False 

    Application.ScreenUpdating = True 
    Application.DisplayAlerts = True 

    'Notify user 
    Done = MsgBox("Task Complete", vbOKOnly) 

End Sub 
+0

Dies gibt mir einen Syntaxfehler bei NewFile = Application.GetOpenFilename (FileFilter: =" Microsoft Excel Files –

+0

@JamesPavett Entschuldige das. Kopieren/Einfügen Problem von Ihrem ursprünglichen Code. Ich habe es behoben. – JNevill

+0

Jetzt scheint es ein Typ nicht übereinstimmen auf If NewFile Then. –