2017-08-21 95 views
1

我還是VBA的新手,因此我所做的大多數編碼都是在從互聯網複製後記錄或修改的。重命名工作簿vba無法正常工作

在記錄我執行的步驟後,我注意到宏將記錄文件名和表名。

因此,如果我要打開一個與錄製宏名稱不相似的文件,我的宏將無法工作。

例如,文件B是在宏中註冊的名稱,但是我現在希望在文件C上執行宏程序但失敗。

有沒有一種方法可以繞過這個問題?

Sub trial() 

Dim wb, wb2, wb3 As Workbook 

Dim fn As String 

Set wb = ActiveWorkbook 

With Application.FileDialog(msoFileDialogOpen) 
.AllowMultiSelect = False 
If .Show = -1 Then 
fn = .SelectedItems(1) 
Set wb2 = Workbooks.Open(fn) 
Else 
MsgBox "You cancel the process." 
End If 
End With 

Dim SheetName As String 

'this is the place i would like to edit 
Windows("SPC July BPW341CL - Copy.csv").Activate 
    Sheets("SPC July BPW341CL - Copy").Select 
    Sheets("SPC July BPW341CL - Copy").copy after:=Workbooks(_ 
     "New Microsoft Excel Worksheet.xlsm").Sheets(4) 
      Sheets("SPC July BPW341CL - Copy").Activate 


SheetName = Format(Date, "yyyymmdd") 'Change the format as per your requirement 
ActiveSheet.Name = SheetName 


    Set wb3 = Application.ActiveWorkbook 

    Sheets("Summary").Activate 
    Range("A1").Select 

     For Each ws In wb3.Worksheets 
      If ws.Name <> "Compare to RGB" And ws.Name <> "Summary" Then 
       For i = 1 To 5 
        Selection.Value = ws.Name 
        Selection.Offset(0, 1).Select 
      Next 
     End If 
    Next 

End Sub 

回答

1

你快到了。

在頂部,您要創建引用,您可以稍後在代碼中使用的工作簿:

Set wb2 = Workbooks.Open(fn) 

這將創建一個工作簿中,你可以稍後在代碼中使用的參考。

然後,當您有代碼:

Windows("SPC July BPW341CL - Copy.csv").Activate 
Sheets("SPC July BPW341CL - Copy").Select 
Sheets("SPC July BPW341CL - Copy").copy after:=Workbooks(_ 
    "New Microsoft Excel Worksheet.xlsm").Sheets(4) 
     Sheets("SPC July BPW341CL - Copy").Activate 

我想這是記錄的代碼?您應該能夠使用之前創建的引用:

wb.Sheets("SPC July BPW341CL - Copy").Select 
wb.Sheets("SPC July BPW341CL - Copy").copy after:=wb2.Sheets(4) 

這可能不是做的正是你想要什麼做的,因爲我並不完全清楚其上張要從哪個工作簿複製。但是你有一般的語法正確。

您還可以索引卡片一樣

dim oSheet as worksheet 
set osheet = wb.sheets("sheetname") '//to set via name, Or 
set oSheet = wb.sheets(4)   '//Or to set via index 

希望這有助於。

編輯:其他幾點注意: 1.)總是在代碼的頂部使用Option Explicit。 2.)Dim wb,wb2,wb3作爲工作簿 - 此行不聲明三個工作簿對象。相反,它實際上聲明瞭兩個變體和一個工作簿。你需要聲明它們爲:Dim wb As Workbook, wb2 As Workbook, wb3 As Workbook

+0

非常感謝@ainwood的回答,但我仍然不清楚我應該在我的VBA中改變什麼..就像你說我已經提出了一個引用,這是一個fn,是不是可能的是,我用fn替換了上述VBA中的所有名稱?例如, /Windows(「SPC July BPW341CL - Copy.csv」)。激活/被替換爲/Windows("fn").Activate/ ?? 截至目前,我只是想改變文件名「SPC July BPW341CL - Copy.csv」,這樣其他名稱不同的工作簿也可以由宏運行。 – Fong

+0

你能解釋一下你想要的宏嗎?允許用戶選擇一個Excel文件,然後呢? – ainwood

+0

文件A用於編譯數據,文件B到Z或甚至更多是原始數據。我需要做的是讓用戶選擇輸入文件(文件B到Z),然後將其中的所有數據複製到文件A中,將它們一起編譯到一個文件中。通過這樣做,我無法列出所有文件名,因爲它們會隨時間變化,具體取決於原始數據。那麼有沒有一種方法可以讓我可以用某種方式對它進行編程,以便用戶可以選擇任何文件,而不必一次更改文件名。 – Fong