2017-04-20 66 views
0

使用VBA我纔剛起步,並正在尋找一個腳本,該腳本將自動命名由樞軸創建的新表,根據我所鑽鑽到了下來。爲了簡單起見,我的樞軸有2列。名稱和金額。我會雙擊生成鑽絨量,並希望它自動命名到適當的名稱的新表。編輯:我曾嘗試下面的代碼(粘貼到的ThisWorkbook標籤),並收到「編譯錯誤:ByRef參數類型不匹配」 @行:Excel的VBA代碼來autmatically從樞軸稱謂表下拉

If SheetExists(SheetName) Then 

尋找有人點我在正確的方向。

Private Sub Workbook_NewSheet(ByVal sh As Object) 

Application.ScreenUpdating = False 

Dim shtCur As Worksheet 
Set shtCur = ActiveSheet 

Sheets("Pivot Sheet Name").Select 
RN = ActiveCell.Row 
CN = ActiveCell.Column 
SheetName = Cells(RN, 1).Value 


If SheetExists(SheetName) Then 
    Worksheets(SheetName).Select 
Else 

    shtCur.Move _ 
     After:=ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count) 
    shtCur.Name = "SheetName" 
End If 


Application.ScreenUpdating = True 


End Sub 

Function SheetExists(wsName As String, Optional wb As Workbook = Nothing) As Boolean 

SheetExists = False 
Dim WS As Worksheet 

If wb Is Nothing Then Set wb = ThisWorkbook 

On Error Resume Next 
Set WS = wb.Worksheets(wsName) 
On Error GoTo 0 

If Not WS Is Nothing Then SheetExists = True 

End Function 

乾杯。

+0

謝謝肯,不是我打算將它用作代碼編寫服務,當然也不打算將其他用戶視爲「代碼猴」。我一整個上午都在網上查看並試用了詳細的解決方案,但進展甚微。其他類似的線程已經休眠了一段時間,所以我想開始一個新的。我會將我的問題改寫爲聽起來更符合要求。乾杯。 – Jdigs

+0

好得多。謝謝!但是,你說*我得到一個錯誤*;如果您指出發生錯誤的位置,這將有所幫助。 –

回答

0

你需要或者申報sheetname是一個字符串,在你的Workbook_NewSheet事件(即Dim sheetname As String),或更改wsNameSheetExists函數傳遞ByVal(即ByVal wsName As String),或最好,一舉兩得。

Private Sub Workbook_NewSheet(ByVal sh As Object) 
    Application.ScreenUpdating = False 

    Dim shtCur As Worksheet 
    Dim SheetName As String 
    Dim RN As Long 
    Dim CN As Long 
    Set shtCur = ActiveSheet 

    Sheets("Pivot Sheet Name").Select 
    RN = ActiveCell.Row 
    CN = ActiveCell.Column 
    SheetName = Cells(RN, 1).Value  

    If SheetExists(SheetName) Then 
     Worksheets(SheetName).Select ' This probably will be confusing to users 
            ' as it means that the sheet that was just 
            ' created will not be being shown 
    Else  
     shtCur.Move _ 
      After:=ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count) 
     'This line was setting the sheet name to be "SheetName" 
     'shtCur.Name = "SheetName" 
     shtCur.Name = SheetName 
    End If 
    Application.ScreenUpdating = True 
End Sub 

Function SheetExists(ByVal wsName As String, Optional wb As Workbook = Nothing) As Boolean 
    Dim WS As Worksheet 

    If wb Is Nothing Then Set wb = ThisWorkbook 

    On Error Resume Next 
    Set WS = wb.Worksheets(wsName) 
    On Error GoTo 0 

    SheetExists = Not WS Is Nothing  
End Function 
+0

完美。謝謝! – Jdigs