如何把多张工作表内容快速复制到一张表Word文档格式.docx

上传人:b****5 文档编号:19378864 上传时间:2023-01-05 格式:DOCX 页数:19 大小:27.21KB
下载 相关 举报
如何把多张工作表内容快速复制到一张表Word文档格式.docx_第1页
第1页 / 共19页
如何把多张工作表内容快速复制到一张表Word文档格式.docx_第2页
第2页 / 共19页
如何把多张工作表内容快速复制到一张表Word文档格式.docx_第3页
第3页 / 共19页
如何把多张工作表内容快速复制到一张表Word文档格式.docx_第4页
第4页 / 共19页
如何把多张工作表内容快速复制到一张表Word文档格式.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

如何把多张工作表内容快速复制到一张表Word文档格式.docx

《如何把多张工作表内容快速复制到一张表Word文档格式.docx》由会员分享,可在线阅读,更多相关《如何把多张工作表内容快速复制到一张表Word文档格式.docx(19页珍藏版)》请在冰豆网上搜索。

如何把多张工作表内容快速复制到一张表Word文档格式.docx

[c65536].End(xlUp):

求出C列最下边有数据的单元格,粘贴复制的数据时为了前面的数据不被后面粘贴上的数据覆盖,开始粘贴数据的位置在最下边有数据的单元格位置的基础上要用offset偏移。

EndWith

Next

EndSub’注:

在VISUALBASIC中要加入注释,直接在注释文字前加上’符号即可,在’符号之后的文字会被编译器忽略,也可以使用REM来进行注释,但使用’符号会更快捷一些,还可以节省内存及加快编译的效率。

以上代码粘贴位置、复制范围可以根据实际需要可变。

2010年5月用于林业旱灾调查一个工作簿上的所有工作表汇总到一张工作表的代码:

Subyy()'

声明过程名称为"

yy"

当要声明一个过程时,通常是以关键字"

SUB"

开头,并且以关键字"

END"

结束,在SUB关键字之前是用来指定此过程的作用域,例如public,static,或protected等。

=Sheets(Sheets.Count)'

参数值和参数名之间应该使用"

="

符号,而不是等号。

在代码中,属性和方法都是通过连接符"

."

来和对象连接的。

Fori=1ToSheets.Count-1'

WithSheets(i)'

with语句可以在一个单一对象或一个用户定义类型上执行一系列的语句。

With/endwith语句结构中以"

开头的语句相当于引用了with语句中指定的对象。

n=.[a65536].End(xlUp).Row'

分别求出最大行号。

End和Row都是属性,此语句取得属性值后赋值给变量n。

a3:

v"

&

n).CopyActiveSheet.[a65536].End(xlUp).Offset(1,0)'

n=.[c65536].End(xlUp).Row得到C列最后一个非空单元格所在的行号,"

.Offset(1,-2)"

偏移"

[c65536].End(xlUp)"

得到单元格的位置开始复制后数据的粘贴位置。

EndSub

注:

 

如果当前活动工作表的A列填写的是学生的姓名,现在我们想在表中A列最后一个学生的后面增加一个叫“张青”的学生,则代码为:

 代码:

ActiveSheet.Cells([A65536].End(xlUp).Row+1,1).Value="

张青"

“[A65536].End(xlUp).Row”语句来返回A列的最后一个非空单元格的行号

Sheet1.range("

C1"

).End(xlDown).Row返回第一次遇到空单元格前的单元格的数量。

(注:

当C列有空白单元格时用:

myEndRow=sheets("

sheet1"

).range("

C65536"

).End(xlUp).row)

[a65536].End(xlUp)取得A列最后一个数据的位置

本示例选定包含单元格B4的区域中B列顶端的单元格。

Range("

B4"

).End(xlUp).Select

b65536"

).End(xlUp).Row问题

高手赐教其含义与区别

a65536"

).End(xlUp).Row

d65536"

k65536"

看一下vba中END的帮助就知道了。

End属性

参阅应用于示例特性返回一个Range对象,该对象代表包含源区域的区域尾端的单元格。

等同于按键End+向上键、End+向下键、End+向左键或End+向右键。

Range对象,只读。

expression.End(Direction)

expression必需。

该表达式返回“应用于”列表中的对象之一。

DirectionXlDirection类型,必需。

所要移动的方向。

XlDirection可为XlDirection常量之一。

xlDown

xlToRight

xlToLeft

xlUp

示例

本示例选定包含单元格B4的区域中第4行尾端的单元格。

).End(xlToRight).Select

本示例将选定区域从单元格B4延伸至第四行最后一个包含数据的单元格。

Worksheets("

Sheet1"

).Activate

Range("

).End(xlToRight)).Select

).End(xlUp).RowA列数据区域最后一行的行号

).End(xlUp).RowB列数据区域最后一行的行号

).End(xlUp).RowD列数据区域最后一行的行号

).End(xlUp).RowK列数据区域最后一行的行号

A列第65536行之上的最后有数据的单元格所在行数

回复

).End(xlUp).Row=B列最后一个非空单元格的行数

).End(xlUp).Row=A列最后一个非空单元格的行数

).End(xlUp).Row=D列最后一个非空单元格的行数

).End(xlUp).Row=K列最后一个非空单元格的行数

请教.end(xlUp).row的含义?

经常在VBA中常见如下代码:

DimRngAsInteger

Rng=sheets1.Range

代码详解

定义RNG作为一个整型变量

'

第二行的"

sheets1"

这种写法是错误的.正确的表述方法应为"

或"

sheets

(1)"

sheet1,对工作表对象的称呼;

range("

)指一个range对象,具体指第一列最后一行;

END,range对象的END属性,也返回一个对象,我理解为基于上述对象的延伸至最后一个RANGE对象.具体延伸的方向要看它给出的参数.比如xlToLeft、xlToRight、xlUp或xlDown。

ROW返回区域中第一块的第一行的行号。

Long类型,只读

多谢两位高手指点,看完以后我是这样理解的,不知对否?

 

A65536"

).End(xlUp).Row是指第一列最后一个有数据单元格的行数,它的下一行即加1就是3楼所说的要添加数据的空白单元格

汇总工作表数据

2010-06-0300:

44

方法一:

SubGetdata()

DimErowAsInteger,cAsVariant,SerowAsInteger

Erow=Sheets("

Total"

).[a65536].End(xlUp).Row+1

IfErow>

4ThenSheets("

).Rows("

4:

"

Erow).ClearContents

ForEachcInThisWorkbook.Sheets

Ifc.Name<

>

"

Then

Serow=c.[a65536].End(xlUp).Row

Erow=Sheets("

c.Range("

a4:

l"

Serow).CopyDestination:

=Sheets("

).Range("

a"

Erow)

EndIf

Nextc

方法二

SubSQLConbime()

A4:

L65536"

).ClearContents

DimiRowAsInteger,sqlTempAsString,sqlAsString

Setcnn=CreateObject("

adodb.connection"

cnn.Open"

provider=microsoft.jet.oledb.4.0;

extendedproperties=excel8.0;

datasource="

ThisWorkbook.FullName

ForEachshInSheets

Ifsh.Name<

理数"

iRow=sh.Range("

a3"

).End(xlDown).Row

sqlTemp="

select*from["

sh.Name&

$A3:

L"

iRow&

]orderby班别,座号"

sql=sqlTemp&

union"

sql

Next

sql=Left(sql,Len(sql)-6)

Sheets("

a4"

).CopyFromRecordsetcnn.Execute(sql)

cnn.Close:

Setcnn=Nothing

方法三

SubConbimeAll()

DimyyAsLong

yy=[a65536].End(xlUp).Row+1

Range("

yy).ClearContents

Setconn=CreateObject("

Fori=1To4

conn.Open"

Sq2="

p"

i)&

$a3:

l1000]"

[a65536].End(xlUp).Offset(1,0).CopyFromRecordsetconn.Execute(Sq2)

conn.Close

Nexti

Setconn=Nothing

把工作簿中的200多张表复制到一张工作表里?

我是做收款工作的,

每天收款情况做一张表格,

现在快一年了,今天老板突然要我把这9个月积累的每日数据全部反映到一张工作表上,

其实点复制粘贴200多张表不是大问题,主要是怕中途看花了眼,漏了或者重复了就很麻烦,

请教高手帮忙,用公式或者VBA,小弟感激不尽。

右键点击新工作表标签,选择“查看代码”,将下面的代码粘贴到打开的VBE窗口中:

SubShcopy()

DimnRow&

R1%,Rs%,Ls%’&

:

长整数型;

%:

整数型。

R1=2'

每页从第2行开始复制(可修改)

Application.EnableEvents=False’如果对指定对象启用事件,则该值为True。

Boolean类型,可读写

Application.ScreenUpdating=False

Fori=2ToSheets.Count’sheets.count最后一张工作表。

WithSheets(i)

Rs=.UsedRange.Rows.Count+1-R1’对于Worksheet对象,Rows属性返回代表指定工作表所有行的Range对象。

工作表上已使用区域的行数。

Ls=.UsedRange.Columns.Count’Count属性。

描述:

返回集合或Dictionary对象中的条目数。

只读。

语法:

object.Count

object总是“应用于”列表中某一项的名称。

工作表上已使用区域的列数。

arr=.Range("

R1).Resize(Rs,Ls)‘arr为变量,在VBA中,变量无需声明就可以直接使用,此时该变量为变体变量。

Resize属性。

在Excel中,Resize属性的功能为调整指定区域的大小。

返回Range对象,该对象代表调整后的区域。

expression.Resize(RowSize,ColumnSize)

该表达式返回要调整大小的Range对象。

RowSizeVariant类型,可选。

新区域中的行数。

如果省略该参数,则该区域中的行数保持不变。

ColumnSizeVariant类型,可选。

新区域中的列数。

如果省略该参数。

则该区域中的列数保持不变。

).End(xlUp).Offset

(1).Resize(Rs,Ls)=arr

Application.EnableEvents=True

Application.ScreenUpdating=True

修改“开始行号”。

将光标定位到代码中间任意位置,按F5运行它。

关闭VBE窗口。

注意单词之间要用空格隔开。

Excel多个工作簿中的工作表合并到一个工作簿中

有时,需要将多个Excel工作簿中的工作表合并到一个工作簿中。

有多种合并工作簿的情形,下面先给出一种合并多个工作簿的VBA范例,供参考。

(此方法将一个工作簿中所有的工作表复制到一张工作表上)

方法1

SubCombineWorkbooks()

DimwkAsWorkbook

DimshAsWorksheet

DimstrFileNameAsString

DimstrFileDirAsString

DimnmAsString

nm=ThisWorkbook.Name

strFileDir=ThisWorkbook.path&

\"

strFileName=Dir(strFileDir&

*.xls"

DoWhilestrFileName<

vbNullString

IfstrFileName<

nmThen

MsgBoxstrFileName

Setwk=Workbooks.Open(Filename:

=strFileDir&

strFileName,ReadOnly:

=True)

strFileName=Left(Left(strFileName,Len(strFileName)-4),29)'

取主文件名,除掉.XLS

ForEachshInwk.Sheets

sh.CopyAfter:

=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)

工作表命名,以工作表所在文件名为类

Ifwk.Sheets.Count>

1Then

ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name=strFileName&

sh.Name

Else

ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name=strFileName

EndIf

wk.CloseSaveChanges:

=False

strFileName=Dir

Loop

方法2

SubUnWorksheets()

DimljAsString

DimdirnameAsString

DimsnameAsString

DimiAsInteger,iiAsInteger

lj=ActiveWorkbook.path

nm=ActiveWorkbook.Name

dirname=Dir(lj&

\*.xls"

)'

查找文件

DoWhiledirname<

Ifdirname<

Workbooks.OpenFilename:

=lj&

dirname'

打开文件

ii=ActiveWorkbook.Sheets.Count'

统计工作表个数

复制新打开工作簿的每一个工作表到当前工作表(After:

=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))最后一个后面

Fori=1Toii

Workbooks(dirname).Sheets(i).CopyAfter:

Workbooks(dirname).CloseFalse

dirname=Dir

在同一文件夹下有多个工作簿,其中有一个用于汇总的工作簿,将除该汇总工作簿外的其它工作簿中的每一张工作表的数据汇总到该汇总工作簿的一张工作表中。

好用!

SubUnionWorksheets()

Application.ScreenUpdating=False’关闭屏幕更新

DimljAsString

lj=ActiveWorkbook.path’Path属性。

返回指定文件、文件夹、或驱动器的路径。

nm=ActiveWorkbook.Name’Name属性。

指定一个控件或对象的名称或与Font对象相关的字体的名称。

变量赋值使用=“等号”,“=”后的值可以是单纯的数值、字符串或表达式。

)’Dir函数。

返回一个String,用以表示一个文件名、目录名或文件夹名称,它必须与指定的模式或文件属性、或磁盘卷标相匹配。

Cells.Clear’Clear方法。

清除Err对象的所有属性设置。

’前置式DO…LOOP循环。

dirname’Open方法。

“<

”为比较运算符“不等于”。

ii=ActiveWorkbook.Sheets.Count’Sheets属性

Workbooks(nm).Activate’Activate方法。

Workbooks(nm)属使用工作簿名称引用workbook,语法格式为:

workbook(工作簿名称)。

复制新打开工作簿的每一个工作表的已用区域到当前工作表

Workbooks(dirname).Sheets(i).UsedRange.Copy_

).End(xlUp

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 家庭教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1