2017-06-16 43 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