2023-03-23 09:51来源:m.sf1369.com作者:宇宇
先在Access文件中导出表结构到另外一个Access中[宏里面选取TransferDatabase]然后新的Access文件导出到Word即可.[也可先导出到Excel,然后从Excel复制到Word中]
'按组合键Alt+F11进入VBA界面,左侧双击sheet1工作表名称,在右侧窗口粘贴下方代码: Private Sub Worksheet_SelectionChange(ByVal Target As Range): If Target.Count = 1 And Target.Column = 2 And Cells(Target.Row, 1) <> 0 And Cells(Target.Row, Target.Column) <> 0 Then A = Cells(Target.Row, 1) Sheets(2).Select '第二个工作表的第一行最好是项目名称 Sheets(2).Range("B1").Select Selection.AutoFilter Selection.AutoFilter Field:=2, Criteria1:=A End If: End Sub
VB操作EXCEL
全面控制 Excel
首先创建 Excel 对象,使用ComObj:
Dim ExcelID as Excel.Application
Set ExcelID as new Excel.Application
1) 显示当前窗口:
ExcelID.Visible := True;
2) 更改 Excel 标题栏:
ExcelID.Caption := \'应用程序调用 Microsoft Excel\';
3) 添加新工作簿:
ExcelID.WorkBooks.Add;
4) 打开已存在的工作簿:
ExcelID.WorkBooks.Open( \'C:\\Excel\\Demo.xls\' );
5) 设置第2个工作表为活动工作表:
ExcelID.WorkSheets[2].Activate;
或 ExcelID.WorkSheets[ \'Sheet2\' ].Activate;
6) 给单元格赋值:
ExcelID.Cells[1,4].Value := \'第一行第四列\';
7) 设置指定列的宽度(单位:字符个数),以第一列为例:
ExcelID.ActiveSheet.Columns[1].ColumnsWidth := 5;
8) 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:
ExcelID.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米
9) 在第8行之前插入分页符:
ExcelID.WorkSheets[1].Rows[8].PageBreak := 1;
参考代码:ActiveSheet.HPageBreaks(1).Location = Range("A22")
10) 在第8列之前删除分页符:
ExcelID.ActiveSheet.Columns[4].PageBreak := 0;
11) 指定边框线宽度:
ExcelID.ActiveSheet.Range[ \'B3:D4\' ].Borders[2].Weight := 3;
1-左 2-右 3-顶 4-底 5-斜( \\ ) 6-斜( / )
12) 清除第一行第四列单元格公式:
ExcelID.ActiveSheet.Cells[1,4].ClearContents;
13) 设置第一行字体属性:
ExcelID.ActiveSheet.Rows[1].Font.Name := \'隶书\';
ExcelID.ActiveSheet.Rows[1].Font.Color := clBlue;
ExcelID.ActiveSheet.Rows[1].Font.Bold := True;
ExcelID.ActiveSheet.Rows[1].Font.UnderLine := True;
14) 进行页面设置:
a.页眉:
ExcelID.ActiveSheet.PageSetup.CenterHeader := \'报表演示\';
b.页脚:
ExcelID.ActiveSheet.PageSetup.CenterFooter := \'第&P页\';
c.页眉到顶端边距2cm:
ExcelID.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;
d.页脚到底端边距3cm:
ExcelID.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;
e.顶边距2cm:
ExcelID.ActiveSheet.PageSetup.TopMargin := 2/0.035;
f.底边距2cm:
ExcelID.ActiveSheet.PageSetup.BottomMargin := 2/0.035;
g.左边距2cm:
ExcelID.ActiveSheet.PageSetup.LeftMargin := 2/0.035;
h.右边距2cm:
ExcelID.ActiveSheet.PageSetup.RightMargin := 2/0.035;
i.页面水平居中:
ExcelID.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;
j.页面垂直居中:
ExcelID.ActiveSheet.PageSetup.CenterVertically := 2/0.035;
k.打印单元格网线:
ExcelID.ActiveSheet.PageSetup.PrintGridLines := True;
15) 拷贝操作:
a.拷贝整个工作表:
ExcelID.ActiveSheet.Used.Range.Copy;
b.拷贝指定区域:
ExcelID.ActiveSheet.Range[ \'A1:E2\' ].Copy;
c.从A1位置开始粘贴:
ExcelID.ActiveSheet.Range.[ \'A1\' ].PasteSpecial;
d.从文件尾部开始粘贴:
ExcelID.ActiveSheet.Range.PasteSpecial;
16) 插入一行或一列:
a. ExcelID.ActiveSheet.Rows[2].Insert;
b. ExcelID.ActiveSheet.Columns[1].Insert;
17) 删除一行或一列:
a. ExcelID.ActiveSheet.Rows[2].Delete;
b. ExcelID.ActiveSheet.Columns[1].Delete;
18) 打印预览工作表:
ExcelID.ActiveSheet.PrintPreview;
19) 打印输出工作表:
ExcelID.ActiveSheet.PrintOut;
20) 工作表保存:
If not ExcelID.ActiveWorkBook.Saved then
ExcelID.ActiveSheet.PrintPreview
End if
21) 工作表另存为:
ExcelID.SaveAs( \'C:\\Excel\\Demo1.xls\' );
22) 放弃存盘:
ExcelID.ActiveWorkBook.Saved := True;
23) 关闭工作簿:
ExcelID.WorkBooks.Close;
24) 退出 Excel:
ExcelID.Quit;
25) 设置工作表密码:
ExcelID.ActiveSheet.Protect "123", DrawingObjects:=True, Contents:=True, Scenarios:=True
26) EXCEL的显示方式为最大化
ExcelID.Application.WindowState = xlMaximized
27) 工作薄显示方式为最大化
ExcelID.ActiveWindow.WindowState = xlMaximized
28) 设置打开默认工作薄数量
ExcelID.SheetsInNewWorkbook = 3
29) \'关闭时是否提示保存(true 保存;false 不保存)
ExcelID.DisplayAlerts = False
30) 设置拆分窗口,及固定行位置
ExcelID.ActiveWindow.SplitRow = 1
ExcelID.ActiveWindow.FreezePanes = True
31) 设置打印时固定打印内容
ExcelID.ActiveSheet.PageSetup.PrintTitleRows = "$1:$1"
32) 设置打印标题
ExcelID.ActiveSheet.PageSetup.PrintTitleColumns = ""
33) 设置显示方式(分页方式显示)
ExcelID.ActiveWindow.View = xlPageBreakPreview
34) 设置显示比例
ExcelID.ActiveWindow.Zoom = 100
35) 让Excel 响应 DDE 请求
Ex.Application.IgnoreRemoteRequests = False
用VB操作EXCEL
Private Sub Command3_Click()
On Error GoTo err1
Dim i As Long
Dim j As Long
Dim objExl As Excel.Application \'声明对象变量
Me.MousePointer = 11 \'改变鼠标样式
Set objExl = New Excel.Application \'初始化对象变量
objExl.SheetsInNewWorkbook = 1 \'将新建的工作薄数量设为1
objExl.Workbooks.Add \'增加一个工作薄
objExl.Sheets(objExl.Sheets.Count).Name = "book1" \'修改工作薄名称
objExl.Sheets.Add , objExl.Sheets("book1") ‘增加第二个工作薄在第一个之后
objExl.Sheets(objExl.Sheets.Count).Name = "book2"
objExl.Sheets.Add , objExl.Sheets("book2") ‘增加第三个工作薄在第二个之后
objExl.Sheets(objExl.Sheets.Count).Name = "book3"
objExl.Sheets("book1").Select \'选中工作薄<book1>
For i = 1 To 50 \'循环写入数据
For j = 1 To 5
If i = 1 Then
objExl.Selection.NumberFormatLocal = "@" \'设置格式为文本
objExl.Cells(i, j) = " E " & i & j
Else
objExl.Cells(i, j) = i & j
End If
Next
Next
objExl.Rows("1:1").Select \'选中第一行
objExl.Selection.Font.Bold = True \'设为粗体
objExl.Selection.Font.Size = 24 \'设置字体大小
objExl.Cells.EntireColumn.AutoFit \'自动调整列宽
objExl.ActiveWindow.SplitRow = 1 \'拆分第一行
objExl.ActiveWindow. SplitColumn = 0 \'拆分列
objExl.ActiveWindow.FreezePanes = True \'固定拆分 objExl.ActiveSheet.PageSetup.PrintTitleRows = "$1:$1" \'设置打印固定行
objExl.ActiveSheet.PageSetup.PrintTitleColumns = "" \'打印标题 objExl.ActiveSheet.PageSetup.RightFooter = "打印时间: " & _
Format(Now, "yyyy年mm月dd日 hh:MM:ss")
objExl.ActiveWindow.View = xlPageBreakPreview \'设置显示方式
objExl.ActiveWindow.Zoom = 100 \'设置显示大小
objExl.ActiveSheet.PageSetup.Orientation = xlLandscape ‘设置打印方向(横向)
\'给工作表加密码
objExl.ActiveSheet.Protect "123", DrawingObjects:=True, _
Contents:=True, Scenarios:=True
objExl.Application.IgnoreRemoteRequests = False
objExl.Visible = True \'使EXCEL可见
objExl.Application.WindowState = xlMaximized \'EXCEL的显示方式为最大化
objExl.ActiveWindow.WindowState = xlMaximized \'工作薄显示方式为最大化
objExl.SheetsInNewWorkbook = 3 \'将默认新工作薄数量改回3个
Set objExl = Nothing \'清除对象
Me.MousePointer = 0 \'修改鼠标
Exit Sub
err1:
objExl.SheetsInNewWorkbook = 3
objExl.DisplayAlerts = False \'关闭时不提示保存
objExl.Quit \'关闭EXCEL
objExl.DisplayAlerts = True \'关闭时提示保存
Set objExl = Nothing
Me.MousePointer = 0
End Sub
excel vba 在access表中新建字段并自动编号,用CreateDatabase语句,举例如下。
mydata = ThisWorkbook.Path & "\mydata\" & s & ".mdb"
mytable = "清单"
mytablc = "基本信息"
On Error Resume Next
Kill mydata
On Error GoTo 0
Set myDb = CreateDatabase(mydata, dbLangChineseSimplified)
Set myTbl = myDb.CreateTableDef(mytable)
With myTbl
.Fields.Append .CreateField("序号", ?, 50)
.Fields.Append .CreateField("定额编号", dbText, 50)
.Fields.Append .CreateField("工程名称", dbText, 200)
.Fields.Append .CreateField("单位", dbText, 20)
.Fields.Append .CreateField("人工费", dbSingle)
.Fields.Append .CreateField("材料费", dbSingle)
.Fields.Append .CreateField("机械费", dbSingle)
.Fields.Append .CreateField("基价", dbSingle)
.Fields.Append .CreateField("计算式", dbText, 255)
End With
我知道两个方法。
1、如果EXCEL数据不多可以用这个方法。workbooks.open(“路径")打开EXCEL,再逐个的用INSERT语句导入到ACCESS里面。
2、就是EXCEL本身也是一个数据库,第一行是字段,用连接数据库的方式连接EXCEL直接一条SQL导入到SQL。这对格式有点要求,就是第一行必须是字段,数据比较整齐。
VBA(Visual Basic for Application) 是一种完全面向对象体系结构的编程语言,由于其在开发方面的易用性和具有强大的功能,因此许多应用程序均嵌入该语言作为开发工具。Autodesk公司也在AutoCAD R14.01版本开始内置了VBA开发工具,同时提供了适用于VBA开发的ActiveX Automation对象模型。
VBA具有很强的开发能力,其主要功能包括:
(1) 创建对话框及其它界面。
(2) 创建工具栏。
(3) 建立模块级宏指令。
(4) 提供建立类模块的功能。
(5) 具有完善的数据访问与管理能力,可通过DAO(数据访问对象)对Access数据库或其它外部数据库进行访问和管理。
(6) 能够使用SQL语句检索数据,与RDO(远程数据对象)结合起来,可建立C/S(客户机/服务机)级的数据通信。
(7) 能够使用Win32 API提供的功能,建立应用程序与操作系统间的通信。
从功能上来说,VBA与VB几乎完全一样,或者说VBA是VB的一个子集。但它们之间更本质的区别在于VBA没有自己独立的工作环境,而必须依附于主应用程序;而VB则不依附于任何其它的应用程序,具有完全独立的工作环境和编译、连接系统。
由于VBA依附于主应用程序,因此它与主应用程序之间的通信简单而富有效率,其代码完全是在进程内执行的。VBA的代码在AutoCAD中仍以解释的方式执行,但由于它与AutoCAD共享内存空间,因此执行速度比ADS程序还要快
看到Excel多表合并,其实常见的有2种场景
场景一:多个Excel文件需要合并为1个Excel文件(多个工作簿合并为1个工作簿)
场景二:1个Excel文件种有多个工作表,需要合并为1个工作表
首先来看下,场景一(多个Excel文件合并为1个文件),都有哪些方法可以实现?
场景描述:如图所示,在文件夹中,有4个Excel文件,每个Excel文件的数据格式都一致,需要把4个Excel文件合并到1个Excel文件中。
每个工作簿中的内容格式都一样,为了区分,我把工作簿1中的 位置 数据,标为了“工作簿1”;工作簿2中的数据标为了“工作簿2”...以此类推。
下面雷哥推荐几种方法来实现多个Excel文件合并为1个文件
方法1:PowerQuery
Step1:单击 【数据】- 【新建查询】 - 【从文件】- 【从文件夹】
Step2:单击 【浏览】,选择文件夹路径
Step3:选择【合并并加载】
最终的效果如图所下图所示。自动增加了
Source.Name
数据列,可以很方便看到数据来自于哪个工作簿
方法2:使用CMD命令,1s搞定合并
Step1:需要把文件格式修改为 csv文件格式。打开文件,另存为csv文件即可
Step2:在文件所在路径,按【shift】+右键,点击【此处打开命令窗口】,输入
copy *.csv out.csv, 即把该路径下所有的csv文件合并到out.csv文件中。
下面来看下,场景二(多个Excel工作表合并为1个Excel工作簿),都有哪些方法可以实现?
场景描述:如图所示,1个excel文件中,有多个工作表,需要合并到1个工作表中。
方法1:PowerQuery法
Step1:单击 【数据】- 【新建查询】 - 【从工作簿】
Step2:选择需要合并的工作表
Step3:在追加查询中,单击【将查询追加为新查询】
Step4:选择所需的工作表
Step5:单击关闭并上载
最终的效果如图所示
方法2:使用宏
Step1:按【Alt】+【F11】
Step2:输入代码,并单击三角形图标运行
Application.ScreenUpdating = False For j = 1 To Sheets.Count If Sheets(j).Name <> ActiveSheet.Name Then X = Range("A60000).End(xlUp).Row + 1 Sheets(j).UsedRange.Copy Cells(X, 1) End If Next Range("B1").Select Application.ScreenUpdating = True MsgBox "小主,数据合并结束啦!", vbInformation, "提示" End Sub
运行效果如下图所示,后续我们删去多余的标题行即可~
方法3:插件法 - 最简单
Step1:使用【方方格子】插件,单击【合并工作表】
Step2:选择汇总区域后,单击确定
最终的效果如下
还是插件最简单,分分钟搞定哈~
雷哥:自媒体【雷哥office】创始人,《竞争力:玩转职场Excel,从此不加班》作者,微软Excel专家认证,office培训师,职场老司机,分享职场经验 / 办公技能 / 提高职场效率!
可以使用 Visual Basic for Applications (VBA) 来导入 Excel 中的数据。可以通过以下步骤来实现:
打开 Excel 并启动 VBA 编辑器(按 ALT + F11)。
在 VBA 编辑器中,新建一个模块。
复制下面的代码并粘贴到模块
Sub ImportData()
Dim wb As Workbook
Set wb = Workbooks.Open("C:\path\to\your\file.xlsx")
' Import the data into the active sheet
wb.Sheets(1).Range("A1").CurrentRegion.Copy Destination:=ActiveSheet.Range("A1")
wb.Close False
End Sub
替换 "C:\path\to\your\file.xlsx" 为你的文件路径。
在 VBA 编辑器中运行该代码(按 F5 或选择“运行”)。
该代码会导入 Excel 中的数据到当前工作簿的第一个工作表中。
dimConnasnewadodb.connection'asp中是setconn=createobject("adodb.connection")
dimrsasnewadodb.recordset'类似于你的setrs=createobject("adodb.recordset")
sql=sql语句
rs.opensql,conn'打开记录集,后面可跟参数,指定参数不同游标类型也不相同
ifnotrs.eofthen'判断SQL语句是否存在查询到的记录
ifisnull(rs(字段))=falsethen'确定指定字段不为空
变量=rs(字段)'获得字段内容
endif
endif
rs.close'关闭记录集
conn.close'关闭数据库连接