2017-09-08 17 views
0

我有3個文件,我從中複製數據,它們每個月都有一個名稱始終相同的開始,但每個月都會更改結尾。我嘗試過並嘗試過,但無處可去。從變量名稱的文件複製數據

這是有效的,但是在這裏我改變了名字以使它工作,我也改變了文件的名稱,只是爲了這個測試。

Windows("Försäljningsdata Aktuell period.xlsx").Activate 
Range("A2").Select 
Range(Selection, Selection.End(xlToRight)).Select 
Range(Selection, Selection.End(xlDown)).Select 
Selection.Copy 
Windows("Datamatchningsfil Master.xlsm").Activate 
Sheets("Försäljningsdata").Select 
Range("A2").Select 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 

下面你看到的日期,這將改變每個月。已經嘗試過*#但沒有得到它的訣竅。 8月份每個月都會改變,這個我可以改變,所以它會在2017年到來,我認爲這可以讓事情變得輕鬆起來。

Windows("Copy of CDPPT_KPI_2017.08-2017.08_43.xlsx").Activate 
Range("A2").Select 
Range(Selection, Selection.End(xlToRight)).Select 
Range(Selection, Selection.End(xlDown)).Select 
Selection.Copy 
Windows("Datamatchningsfil Augusti.xlsm").Activate 
Sheets("Försäljningsdata").Select 
Range("A2").Select 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 
+0

你能提供一個文件名列表(所以我們沒有隻有一個文件)它們的外觀如何?所以更容易看到模式。你應該避免使用'.Select'或'.Activate'這是不好的做法,並且會讓你的代碼變慢。整個任務可以沒有。 –

+0

我使用了很多錄音,並且在互聯網上查找了我使用的代碼,但我還沒有進入硬編碼:(我怎樣才能沒有.Select和.Activate?因此這些是我現在擁有的文件CDPPT_KPI_2017。 07-2017.07_c1 CDPPT_KPI_2017.09-2017.09_c2 Electra銷售August Electra銷售七月 – Sture

+0

你的問題到底是什麼? –

回答

0

我推薦使用這項任務的功能,並刪除所有不必要的.select。要調用該函數,您需要知道確切的文件名。

Public Sub DoActions() 
    DoMyAction "Copy of CDPPT_KPI_2017.08-2017.08_43.xlsx", "Datamatchningsfil Augusti.xlsm" 
End Sub 


Public Function DoMyAction(SourceFile As String, DestinationFile As String) 
    Dim wsSource As Worksheet 
    Set wsSource = Workbooks(SourceFile).Worksheets(1) 'source is the first worksheet in the file 

    With wsSource 
     .Range(.Range("A2"), .Range("A2").End(xlToRight).End(xlDown)).Copy 
    End With 

    Workbooks(DestinationFile).Worksheets("Försäljningsdata").Range("A2").PasteSpecial _ 
     Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 
End Function 

要找到確切的文件名,您可以使用FileDialogBox讓用戶選擇一個文件(請參閱 How to get selected path and name of the file using open file dialog control)。

或者如果該文件已在Excel中打開,那麼您可以使用循環遍歷所有工作簿來查找特定模式。

Public Sub ExampleToFindAWorkbookByPattern() 
    Dim iWb As Workbook, FoundWb As Workbook 
    For Each iWb In Workbooks 'loop throug all workbooks 
     ' look if there is "2017.08" in it's name 
     If InStr(1, iWb.Name, "2017.08") <> 0 Then 
      Set FoundWb = iWb 'name was found, set workbook in FoundWb 
      Exit Sub 
     End If 
    Next iWb 

    'now you can use it e.g. 
    DoMyAction FoundWb.Name, "Datamatchningsfil Augusti.xlsm" 
End Sub 
+0

謝謝你,但是由於一個文件的編號發生了變化,其他由於不同的月份,我很難理解這是如何工作的。文件名的開頭是相同的,所以可能是第二個版本,但是對於一個文件使用「CDPPT_KPI_」而對於另一個文件使用「Electra」? – Sture

+0

@Sture對不起,我無法給你一個完整的工作解決方案。本網站旨在幫助人們自行解決問題。因此,有兩個選項可以(1)通過靜態模式查找已打開的工作簿,或者(2)讓用戶使用打開的對話框控件從文件系統中選擇文件。我舉了兩個例子。我不能爲你決定什麼或如何實現某些東西,這是你現在的任務。如果你在編寫VBA方面沒有太多技能,那麼考慮(a)首先學習基礎知識,或者(b)聘請某人爲你完成任務。 –

+0

我知道,我非常感謝你的幫助。我正在嘗試第二個選項,並讓它與更改名稱一起工作,現在我試圖讓它適用於其他文件。非常感謝! – Sture