2017-06-16 42 views
0

我具有其中式​​當前設置的列(AF)作爲一列中的所有單元:替換表名稱使用VBA

=IFERROR(INDEX('2017_03 Cash'!D:D,MATCH(G:G,'2017_03 Cash'!A:A,0)),0) 

我想基於所述'2017_03 Cash'部分改變特定選項卡的名稱。例如,這是用於三月(03),然後在下一個月我創建一個新工作表,名爲"2017_04 Cash" ...等。

如果你看一下我的代碼below..you會看到

Set CashWS = Sheets.Add 
CashWS.Name = "2017_0" & MonthVal & " Cash" 

我想在腳本的東西,將在列AF公式的'2017_03 Cash'部分更改爲片是CashWS.Name = "2017_0" & MonthVal & " Cash"

包括

所以所有的3應該基本上被4取代。然後將公式一直向下拖動到列AF的最後一行。

Sub AddSheets() 

Dim PrevSheet As String 
Dim CashWS As Worksheet 
Dim MonthVal As String 
Dim lr As Long 

NewSheet = InputBox("Which month is this Commissions statement for?") 
PrevSheet = InputBox("What was the previous month?") 

Worksheets(PrevSheet).Copy After:=Worksheets("Summary") 
ActiveSheet.Name = NewSheet 

With Worksheets(NewSheet) 
lr = .Cells(.Rows.Count, "AG").End(xlUp).Row 
    .Range(.Cells(5, "AE"), .Cells(lr, "AE")) = .Range(.Cells(5, "AG"), .Cells(lr, "AG")).Value 
End With  

Range("D2").Select 
ActiveCell.FormulaR1C1 = "=EOMONTH(DATE(2017,MONTH(DATEVALUE(MID(CELL(""filename"", RC[-5]), FIND(""]"", CELL(""filename"", RC[-5])) + 1, 255)&""1"")+1),1),0)" 
Selection.NumberFormat = "m/d/yyyy" 

Range("D3").Select 
ActiveCell.FormulaR1C1 = "=MONTH(R[-1]C)" 
Range("D3").Select 
Selection.NumberFormat = "General" 
MonthVal = ActiveCell.Value 


Set CashWS = Sheets.Add 
CashWS.Name = "2017_0" & MonthVal & " Cash" 

End Sub 
+0

你確定'MATCH(G:G,'2017_03 Cash'!A:A,0)'是正確的嗎? – Jeeped

+0

@Jeeped是的,它是= IFERROR(INDEX('2017_03 Cash'!D:D,MATCH(G:G,'2017_03 Cash'!A:A,0)),0)這個公式已經在我的工作表中了它被提供給我,並將數據拖入該列。 –

+0

@RituMishra我的評論不僅僅是關於這個問題。當你在那裏閱讀時,接受一個答案提示雙方。它還可以幫助其他人找到解決OP問題的解決方案。這也將增加觀衆,因爲他們看到問題有答案。 (在發佈一段時間之後,您確信自己得到了最好的答案)。除非你想開始賞金。感謝您儘可能保持SO的質量。 – Masoud

回答

0

有很多種方法可以創建一個依賴日期的字符串。我傾向於使用帶有包含轉義字符的掩碼的格式,否則這些字符會被解釋爲數字。

Dim oldws As String, newws As String, oldmn As Long, newmn As Long 

oldmn = 3 
newmn = Month(Date) 
oldws = Format(oldmn, "\2\0\1\7\_00 \C\a\s\h") '2017_03 Cash 
newws = Format(Date, "yyyy_mm \C\a\s\h")   '2017_06 Cash (today is 16-Jun-2017) 

With Worksheets("sheet1") 
    With .Columns("AF") 
     .Replace What:=oldws, Replacement:=newws, LookAt:=xlPart, _ 
       SearchOrder:=xlByRows, MatchCase:=False, _ 
       SearchFormat:=False, ReplaceFormat:=False 
    End With 
End With 
+0

謝謝..我會嘗試一下,讓它知道它是否有效! –

+0

這發送我的代碼在一個無限循環,並打開文件的開啓者/資源管理器窗口..不知道它爲什麼這樣做 –

+0

它沒有發送你的代碼到*'infintie循環*「;它尋找一個工作表命名* Sheet1 *您沒有,並且在將代碼從我的測試工作簿轉換到您自己的工作簿時未能修改。 – Jeeped