用vba新建工作表,并命名
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用vba新建工作表,并命名相关的知识,希望对你有一定的参考价值。
在名为“11月”的工作表前面,新增一张工作表,并命名为“10月”,该怎么写
、多薄合并:将当前文件夹或某一文件夹下的所有工作薄合并到一个自动新建的“合并表”工作薄中(可以选择是否包含其子文件夹)。名称相同的工作表合并,名称不相同的工作表移到自动新建的“合并表”工作薄中。可以选择“合并整个工作薄中的所有工作表、按位置选择的工作表、按名称选择的工作表”,还可选择 “保留重复行(默认)”、“去除重复行”。默认:按工作表名称合并当前文件夹下的所有工作薄;在启动excel后的新工作薄(未保存)中点击该按钮则打开“文件夹选择”对话框。如果工作簿中每个工作表的表头行数各不相同,则可以根据表头行数的多少,分几次进行合并,即每次只合并几个表头行数相同的工作表;第一次可在当前文件夹下的任何一个包含所有工作表的工作簿中使用“多簿合并”——“按名称(或位置)选择的工作表”进行合并,第二次及以后则应在自动生成的“合并表”工作薄中使用同样的操作即可。
多表合并:将当前工作薄中的多个工作表合并到一个自动生成且位于最后的“合并表”工作表中。可以选择“合并所有工作表、选择的工作表”,还可选择“保留重复行(默认)”、“去除重复行”。
多簿合并、多表合并:合并表头(标题行)以下的所有内容;要合并的表格格式必须相同,表头标题所在的行号必须相同。
撤销功能(工作簿左上角的按钮):大多数操作都能撤销到工作簿保存前的状态(下同)。
特殊合并:将当前文件夹下所有工作簿(或选择的多个工作簿)中的所有工作表(或选择的工作表),按照所选择的单元格区域中的数据(左侧标题+右侧内容、上端标题+下端多行内容)提取成列表样式,并放置在自动生成的“特殊合并”工作表。注意:两种格式的数据都可以按住ctrl键选择相似的多个区域。
2、多表汇总:既可以汇总多个工作簿中与当前工作表名称相同的工作表(其它工作表不汇总),也可以汇总当前工作簿中多个工作表;既可以汇总行列固定的表格,也可以汇总行列不固定的表格;既可以根据所选择的单元格区域的左侧标题、顶端标题(可单选或双选)进行匹配汇总,也可以根据所选择的单元格区域的绝对位置对应汇总(此时不能选择左侧标题和顶端标题);既可以汇总单个单元格区域,也可以同时汇总多个不连续的单元格区域(按住Ctrl键可选择多个不连续的单元格区域);既可以求和,也可以求平均(计数、只统计数字),还可以重新选择单元格区域进行求和(平均、计数),可反复多次使用。 参考技术A 下面的语句就可以:
Sheets.Add(, Sheets("11月")).Name = "10月"本回答被提问者和网友采纳 参考技术B
官方解释
这个是官方的解释,我今天也写了一个
Sheets.Add(, Sheets("aaa")).Name = "111"
在VLOOKUP的VBA函数中使用命名范围
我的工作表上有以下内容:
- 显示货币的单元格[在
A1
] - 一系列单元格(两列,一列用于货币,另一列用于相应的佣金百分比)[定义为/命名为
RANGE
,并作用于工作表] - [正在尝试]根据
A1
和RANGE
确定计算佣金百分比的单元格
然后我有一个名为Calculate
的VBA函数,如下所示:
Function Calculate(LookupValue As Double, LookupRange As Range) As Double
Calculate = [VLOOKUP(LookupValue, LookupRange, 2)]
End Function
确定百分比的单元格具有以下内容:
=Calculate(A1, RANGE)
问题是细胞只返回#VALUE!
...
知道我可能做错了吗?
我已经尝试了几种类型的东西,如类型提示到Range()
,将LookupRange.Value2
传递给VLOOKUP
等,但没有一种方法有效。
我也试过调试,注意到LookupRange
确实包含了Value2
所需的范围,这就是为什么我试图将它传递给函数。
旁注:上面提到的功能和布局只是一个虚拟 - 实际功能稍微复杂一些,因为它依赖于协商费率,月利润率等。这就是我首先使用VBA的原因。我知道我在查找时遇到了问题,因为它是函数中唯一似乎失败的东西 - 其他一切都对应并计算。
来自MSDN:
使用方括号的优点是代码更短。使用
Evaluate
的优点是参数是一个字符串,因此您可以在代码中构造字符串或使用Visual Basic变量。
换句话说,你可以使用
Calculate = [VLOOKUP(3, A1:B100, 2)]
但你不能使用
LookupValue = 3
LookupRange = Range("A1:B100")
'or
'LookupRange = "A1:B100"
Calculate = [VLOOKUP(LookupValue, LookupRange, 2)]
你能做的是:
选项1:
Function Calculate(LookupValue As Double, LookupRange As Range) As Double
Calculate = Evaluate("VLOOKUP(" & LookupValue & "," & LookupRange.Address & ", 2")
End Function
或更好:
Function Calculate(LookupValue As Double, LookupRange As Range) As Double
Calculate = Evaluate("VLOOKUP(" & LookupValue & ",'" & _
LookupRange.Parent.Name & "'!" & LookupRange.Address & ", 2")
End Function
不过我建议:
选项2:
Function Calculate(LookupValue As Double, LookupRange As Range) As Double
Calculate = Application.VLookup(LookupValue, LookupRange, 2)
End Function
我希望你知道4th parameter的意思:
如果
TRUE
或省略,则返回精确或近似匹配。如果未找到完全匹配,则返回小于lookup_value的下一个最大值。 table_array第一列中的值必须按升序排列;否则,VLOOKUP
可能无法给出正确的值。您可以通过从“数据”菜单中选择“排序”命令并选择“升序”来按升序排列值。
顺便说一句,Calculate
不是UDF的好名字,因为VBA已经具有功能Application.Calculate
。我会重命名它以避免混淆。
以上是关于用vba新建工作表,并命名的主要内容,如果未能解决你的问题,请参考以下文章
使用Excel VBA,如何将某一个工作表保存到新建的Excel中?