Excel VBA动态范围插入当月';姓名

Excel VBA动态范围插入当月';姓名,excel,vba,range,Excel,Vba,Range,我是Excel的超级高手,我的大部分宏都是通过录音机完成的。但是现在我被卡住了 我希望有一个动态范围,从Z列单元格$Z$7到Z列最后一个数值输入的单元格1(因为底部单元格是一个总数,并且具有与上面我希望处于动态范围的单元格不同的公式) 这是我从宏录制器中录制的内容,现在我需要调整它 ActiveWorkbook.Names.Add Name:="monthlyclaim", RefersToR1C1:= _ "='February 2015'!R7C26:R567C26" ActiveWorkb

我是Excel的超级高手,我的大部分宏都是通过录音机完成的。但是现在我被卡住了

我希望有一个动态范围,从Z列单元格$Z$7到Z列最后一个数值输入的单元格1(因为底部单元格是一个总数,并且具有与上面我希望处于动态范围的单元格不同的公式)

这是我从宏录制器中录制的内容,现在我需要调整它

ActiveWorkbook.Names.Add Name:="monthlyclaim", RefersToR1C1:= _
"='February 2015'!R7C26:R567C26"
ActiveWorkbook.Names.Add Name:="yearlyclaim", RefersToR1C1:= _
"='February 2015'!R7C29:R567C29"
有什么建议吗?此外,代码中还显示了2015年2月,但实际上更好的做法是将其用于活动工作表。每月都将运行此宏。我是否可以在ActiveSheet中替换代码中的“2015年2月”?到目前为止,它对我不起作用

如果您需要更多信息,请告诉我。

这应该可以:

ActiveWorkbook.Names.Add Name:="monthlyclaim", RefersToR1C1:= "='February 2015'!R7C26:R" & sheets("February 2015").cells(rows.Count,26).end(xlup).row - 1 & "C26"
ActiveWorkbook.Names.Add Name:="yearlyclaim", RefersToR1C1:= "='February 2015'!R7C29:R" & sheets("February 2015").cells(rows.Count,29).end(xlup).row - 1 & "C29"
您好,您可以将“偏移量”与counta结合使用来提供动态行数:

RefersToR1C1:= "=Offset('February 2015!R7C26,0,0,counta('February 2015!R7C26:R10000C26) - 1,1)"
至于每张纸上的名字。。。我不能说我真的使用了“工作表”范围的名称,它们似乎让我头疼。。。但请尝试以下操作:即,不要从工作簿对象中添加名称,而是从工作表中添加:

for each wsSheet in thisworkbook.sheets
    wsSheet.names.add Name:="monthlyclaim", RefersToR1C1:= "=Offset('" & wssheet.name & "'!R7C26,0,0,counta('" & wssheet.name & "'!R7C26:R10000C26) - 1,1)"
next

冲洗并重复其他名称。。。所以在概念上有点不同,但效果相同:这些工作表上引用“monthlyclaim”的任何公式都将首先匹配工作表范围的名称

太酷了,太棒了

现在是最难的部分,这是我的密码

副新闻纸() ' '新闻纸宏 ' '键盘快捷键:Ctrl+e "

不幸的是,它们改变了当前的运行方式sum HydroccountNew-sum Hydroccount在当时给出了正确的值,但是一旦宏再次运行(对于新的月份),它会在所有工作表中重置,并更新到最新的一个


有什么办法可以解决这个问题吗?我想让它立即运行计算,但是为该插槽计算的任何内容都会存储在相应的工作表中,并且在宏再次运行时不会被覆盖

研究如何获取某个范围内的最后一行,这将为您提供一个良好的开端。这也会起作用,但如果您的项目增长,我的版本将动态增长,而无需重新定义名称:)您需要在我的每一行的.row后面加-1,以满足总列的需求。我已经更新了原始答案如果列表中有空白单元格,这不会给出错误的答案吗?是的。。。Dan下面的答案可能更适合这种情况(如果有空格),我在想,如果它们都是数字,你可以使用MATCH(9.9999999999999999E+307,Z7:Z26)来获得总计行,而不是计算条目。或者如果有总计行,可能会有一些文本“总计:”或者你可以在某处搜索或匹配的内容
'current counts

ActiveWorkbook.Names.Add Name:="hydrocount", RefersTo:="='" & ActiveSheet.Name & "'!$AE$7:$AE$" & ActiveSheet.Range("AC" & Rows.Count).End(xlUp).Row - 1
ActiveCell.FormulaR1C1 = "=IF(RC[-23]=""Isaac"",1,0)"
Range("AE7").Select
Selection.AutoFill Destination:=Range("hydrocount"), Type:=xlFillDefault

Dim wks As Worksheet


If MsgBox("Is month complete?", vbYesNo, "Confirm Action") = vbYes Then
'When user selects Yes
Range("A1").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.Copy

Set wks = Sheets.Add(after:=ActiveSheet)

Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False


Month_year_picker.Show
'wks.Name = InputBox("What is the new month? Must be entered in the format of 'Month Year' - e.g. April 2015", "Sheet Name")

wks.Name = wks_Name


ActiveSheet.Paste

Else
'When user selects No
Exit Sub
End If

'
' RecalculateAnyNewMonth Macro
'
'claims stuff beginning

ActiveWorkbook.Names.Add Name:="monthlyclaim", RefersTo:="='" & ActiveSheet.Name & "'!$Z$7:$Z$" &         ActiveSheet.Range("Z" & Rows.Count).End(xlUp).Row - 1

ActiveWorkbook.Names.Add Name:="yearlyclaim", RefersTo:="='" & ActiveSheet.Name & "'!$AC$7:$AC$" & ActiveSheet.Range("AC" & Rows.Count).End(xlUp).Row - 1

'claims stuff finish

'countsnew

ActiveWorkbook.Names.Add Name:="hydrocountnew", RefersTo:="='" & ActiveSheet.Name & "'!$AE$7:$AE$" & ActiveSheet.Range("AC" & Rows.Count).End(xlUp).Row - 1


'The strPrevMonth string works based on the name of the sheet, if the sheet name is "January 2015",
'the string will be "December 2014".
'If the sheet name is "May 2015", the string will be "April 2015" and so on.
strPrevMonth = Format(DateAdd("M", -1, ActiveSheet.Name), "MMMM YYYY")

strMyFormula = "=IF(RC[-18]=""Isaac"",R6C8,0)+IF(RC[-12]=""BF"",R6C14,0)+IF(RC[-11]=""Client"",R6C15,0)+(IF(RC[-8]=""S"",1,0)*(IF(RC[-9]=""A"",R2C17,0)+IF(RC[-9]=""C"",R3C17,0)+IF(RC[-9]=""CS"",R4C17,0)))+IF(RC[-5]=""Y"",R6C21,0)+IF(RC[-4]=""Y"",R6C22,0)+((R6C24*RC[-2])*IF(RC[-2]="""",0,1))-'" & strPrevMonth & "'!RC[3]"

strMyFormula2 = "=RC[-3]+'" & strPrevMonth & "'!RC"


Range("Z7").FormulaR1C1 = strMyFormula
Range("Z7").AutoFill Destination:=Range("monthlyclaim")


Range("AC7").FormulaR1C1 = strMyFormula2
Range("AC7").AutoFill Destination:=Range("yearlyclaim")

'counts

ActiveWorkbook.Names.Add Name:="hydrocountnew", RefersTo:="='" & ActiveSheet.Name & "'!$AE$7:$AE$" & ActiveSheet.Range("AC" & Rows.Count).End(xlUp).Row - 1
ActiveCell.FormulaR1C1 = "=IF(RC[-23]=""Isaac"",1,0)"
Range("AE7").Select
Selection.AutoFill Destination:=Range("hydrocountnew"), Type:=xlFillDefault

Range("G573").Select
ActiveCell.FormulaR1C1 = "=SUM(hydrocountnew)-SUM(hydrocount)"
Range("G574").Select


End Sub