2017-07-25 37 views
0

我是VBA的新手,並且有一個問題需要解決,對於您來說,這不僅僅是簡單,我相信。問題是這樣的:根據Sheet1中的活動單元重命名新創建的工作表

我在列A中有公司名稱表。我想要的是選擇單元格與公司名稱,單擊該按鈕將運行宏創建基於模板的新工作表,並重命名新創建工作表Sheet1(公司名稱)中選定單元格的名稱。

宏一般工作,我只有重命名它的問題。您的幫助將大大appriciated。另外對我的代碼的任何評論一般都會非常有用。下面是代碼:

Sub NewSheet() 

Dim wb As Workbook 
Dim ws As Worksheet 
Dim activeWB As Workbook 
Dim FilePath As String 

Application.ScreenUpdating = False 
Application.DisplayAlerts = False 

On Error Resume Next 
Set wb = Application.Workbooks.Open(FilePath) 
wb.Worksheets(1).Copy After:=activeWB.Sheets(activeWB.Sheets.Count) 
activeWB.Activate 

ActiveSheet.Name = Worksheets("Arkusz1").ActiveCell.Value 

wb.Close False 

Application.ScreenUpdating = True 
Application.DisplayAlerts = True 
End Sub 
+1

你的代碼打開的工作簿。是否要在具有選定單元格的工作簿中創建新工作表或是否要打開工作簿並在其他工作簿中創建新工作表? – teylyn

+0

注意:避免使用'On Error Resume Next'這是不好的做法,因爲它只是靜音錯誤但不處理它們。請使用正確的[錯誤處理](https://stackoverflow.com/documentation/excel-vba/1107/vba-best-practices/5411/error-handling)。 –

+0

感謝您的快速反應。那麼,在我的工作簿中,模板以新工作表的形式打開,所以我認爲它是一個工作表。我想讓它與選定單元格相同的工作簿打開爲新工作表。 – Thomas

回答

1

如果您需要使用ActiveCell,你可以使用類似下面的代碼:

Dim ShtName As String 
ShtName = ActiveCell.Value2 ' <-- save the value of the ActiveCell 

Set wb = Application.Workbooks.Open(FilePath) 
wb.Worksheets(1).Copy After:=activeWB.Sheets(activeWB.Sheets.Count) 

' rename the sheet 
activeWB.Sheets(activeWB.Sheets.Count).Name = ShtName 
+0

完全按照我的意願工作!非常感謝你! – Thomas

0

您複製新的工作表到最後,這樣你就可以得到最後一個工作表中保持像這樣:

Set activeWB = ActiveWorkbook 
' You copied sheet 1 
wb.Worksheets(1).Copy After:=activeWB.Sheets(activeWB.Sheets.Count) 
' New sheet is last sheet 
Dim sh As WorkSheet 
Set sh = activeWB.Sheets(activeWB.Sheets.Count) 
' Rename sheet 
sh.Name = activeWB.Sheets("Arkusz1").ActiveCell.Value 

請注意,依靠選擇和活躍細胞/牀單/工作簿是有風險,並且可以創建難以診斷的錯誤。嘗試使用單元格地址而不是活動單元格。

+0

謝謝你的評論,我會記住,因爲我將學習VBA。至於你的答案,我無法得到它的工作,不知道爲什麼。可能我做錯了什麼。幸運的是,來自Shai Rado的回答非常完美。 – Thomas

+0

嗯,很高興你的問題得到解決,參考這個問題的答案有一些偉大的指針,以避免'選擇'https://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-宏 – Wolfie

+0

它真的有。非常感謝! – Thomas

相關問題