作者:
iamlaosong
将一个系统的数据导出再导入到另一个系统,虽然都是Excel文件,但格式略有不同,所以需要进行转换。功能不复杂,直接引用都可以,但是还是比较麻烦,不如写个工具,进行转换。这样导入文件干干净净,比较好。
唯一要注意的是信息中有身份证号码,在赋值到单元格中时,变成了科学格式或者后面几位都变成0,所以赋值前需要将单元格格式设成文本型(直接将导入模板文件中身份证列设成文本也可以),即:
Cells(row1, 2).NumberFormat = "@" '号码单元格设成文本格式
或者将当前行都设置成文本格式:
Range("A" & row1 & ":G" & row1).NumberFormat = "@" '号码单元格设成文本格式
VBA代码可以通过 NumberFormat或NumberFormatLocal 属性来设置单元格格式。NumberFormat,单元格格式,这个应该是通用的。NumberFormatLocal,单元格格式,这个是本地的,什么叫本地的,就是与控制面版里面的设置相关的,控制面版可以控制日期格式,货币符号等。两种属性差不多,起码文本属性没看出什么区别。只是觉得这个格式属性名称前面加了个Number比较搞笑,有点多余,还不如不加。
以下是常用的格式代码:
Selection.NumberFormatLocal = "G/通用格式" '常规
Selection.NumberFormatLocal = "0.00_ " '数值
Selection.NumberFormatLocal = "¥#,##0.00;¥-#,##0.00" '货币
Selection.NumberFormatLocal = "_ ¥* #,##0.00_ ;_ ¥* -#,##0.00_ ;_ ¥* " & """" & "-" & """" & "??_ ;_ @_ " '会计专用
Selection.NumberFormatLocal = "yyyy/m/d;@" '日期
Selection.NumberFormatLocal = "[$-409]h:mm:ss AM/PM;@" '时间
Selection.NumberFormatLocal = "0.00%" '百分比
Selection.NumberFormatLocal = "# ?/?" '分数
Selection.NumberFormatLocal = "0.00E+00" '科学记数
Selection.NumberFormatLocal = "@" '文本
Selection.NumberFormatLocal = "000000" '特殊
Selection.NumberFormatLocal = "[DBNum2][$-804]G/通用格式" '中文大写 '特殊
Selection.NumberFormatLocal = "[DBNum2][$RMB]G/通用格式;[红色][DBNum2][$RMB]G/通用格式" '特殊人民币大写"
Selection.NumberFormatLocal = "yyyy/mm/dd" '日期 '自定义
工具界面:
下面是完整的转换程序
Sub get_data()
Dim arrID()
On Error GoTo Err
'If MsgBox("开始生成清分数据......", vbOKCancel, "iamlaosong") = vbCancel Then Exit Sub
thisfile = ThisWorkbook.name '本文件的名字,这样赋值就可以随便改名了
Worksheets("系统参数").Select
If Cells(3, 2) = "Y" Or Cells(5, 2) = "y" Then '导出出库文件
Application.ScreenUpdating = True
Application.ScreenUpdating = False
End If
curdate = Cells(2, 2)
revfile = Cells(5, 2) '文件
datfile = Cells(6, 2) '文件名称
RevFullName = ThisWorkbook.Path & "\" & revfile
If Dir(RevFullName, vbNormal) <> vbNullString Then
Workbooks.Open Filename:=RevFullName '打开文件
maxrow = [A65536].End(xlUp).Row
MsgBox "原始文件不存在!", vbOKOnly, "iamlaosong"
Exit Sub
End If
arrID = Range("A4:K" & maxrow)
Windows(revfile).Close
maxrow = maxrow - 3
datFullName = ThisWorkbook.Path & "\" & datfile
If Dir(datFullName, vbNormal) <> vbNullString Then
Workbooks.Open Filename:=datFullName '打开文件
'lineno = [A65536].End(xlUp).Row
'Range("A2:G" & lineno).ClearContents
MsgBox "目标文件不存在!", vbOKOnly, "iamlaosong"
Exit Sub
End If
'第一行是标题
For row1 = 2 To maxrow '注意列对应关系
Cells(row1, 1) = arrID(row1, 2)
Cells(row1, 2).NumberFormat = "@" '号码单元格设成文本格式
Cells(row1, 2) = arrID(row1, 3)
Cells(row1, 3) = arrID(row1, 5)
Cells(row1, 4) = arrID(row1, 6)
Cells(row1, 5) = arrID(row1, 10)
Cells(row1, 6).NumberFormat = "@" '号码单元格设成文本格式
Cells(row1, 6) = arrID(row1, 4)
Cells(row1, 7) = arrID(row1, 11)
Next row1
expfile = ThisWorkbook.Path & "\" & curdate & datfile
ActiveWorkbook.SaveAs Filename:=expfile
ActiveWorkbook.Close
'Worksheets("系统参数").Select
Cells(5, 3) = "成功"
Cells(6, 3) = "成功"
MsgBox "转换完毕,共" & maxrow - 1 & "条!", vbOKOnly, "iamlaosong"
Exit Sub
MsgBox "错误#" & Str(Err.Number) & Err.Description & "-位置: " & row1, vbOKOnly + vbExclamation, "iamlaosong"
End Sub
作者:iamlaosong将一个系统的数据导出再导入到另一个系统,虽然都是Excel文件,但格式略有不同,所以需要进行转换。功能不复杂,直接引用都可以,但是还是比较麻烦,不如写个工具,进行转换。这样导入文件干干净净,比较好。唯一要注意的是信息中有身份证号码,在赋值到单元格中时,变成了科学格式或者后面几位都变成0,所以赋值前需要将单元格格式设成文本型(直接将导入模板文件中身份证列设成文本也可以),即: Cells(row1, 2).NumberFormat = "@" '号码单元...
找到VBA库并输入Conversion(转换)找到该模块,里面提供了数据转换函数。
VBA提供了两套内置的数据类型转换函数,第一组包含Int、 CVDate和Str,这是早期版本,只是向后兼容而保留。第二组函数都是以字母“C”开头,编程中使用第二组。
每个转换函数的语法基本相同,例如:
Expression是输入参数,然后转换为相应的数据类型。
VBA支持数据类型转换的功能有:
VBA.Conversion.CBool(Express
在工作过程中有时会需要对数据进行格式转换,如TXT,xlsx,xls之间的相互转换,有很多方法来实现,这里主要记录利用Excel中VBA。
(1)在需要转换数据的文件夹下新建Excel,打开VBA;
(2)将代码复制过去,执行即可。
1.txt2xlsx
Sub Convert2Xlsx()
On Error Resume Next
Application.ScreenUpdating = False
Dim fPath$, mPath$, WB As Workbook, arr, s
mPath = Th
VBA是Visual Basic for Applications的缩写,用于微软Office项目的编程语言。VBA开发人员可以编写VBA代码来自动完成复杂任务,可以大大提高工作效率。在日常工作中,我们常常需要将Excel文件转换为PDF格式,以便在不同平台上共享和传递。手动将每个Excel文件转换为PDF格式是非常繁琐的,因此使用VBA将Excel文件批量转换为PDF格式是非常有用的。
使用VBA批量转换Excel文件为PDF的主要步骤如下:
1.打开需要转换的Excel文件所在的目录。
2.遍历目录中的每个Excel文件,使用VBA代码将其转换为PDF格式。
3.保存转换后的PDF文件。
在这个过程中,需要使用VBA的文件操作和打印功能。文件操作需要使用FileSystemObject或Dir函数。打印功能可以使用PrintOut方法或PdfCreator等第三方库。
以下是一个简单的VBA代码示例,演示如何批量将Excel文件转换为PDF。代码中假设所有的Excel文件都保存在同一个文件夹中。
Sub ConvertToPDF()
Dim myPath As String
Dim myFile As String
Dim Wb As Workbook
'指定文件夹的路径
myPath = "C:\Users\MyFolder\"
'获取文件夹中的第一个文件名
myFile = Dir(myPath & "*.xlsx")
'遍历所有文件
Do While myFile <> ""
'打开工作簿
Set Wb = Workbooks.Open(myPath & myFile)
'将工作簿另存为PDF文件
Wb.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
myPath & Replace(myFile, ".xlsx", ".pdf"), Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
'关闭工作簿
Wb.Close SaveChanges:=False
'获取文件夹中的下一个文件名
myFile = Dir
End Sub
这个VBA代码示例非常简单,只是将Excel文件转换为PDF格式并保存在同一个文件夹中。但是,根据具体需求,可以进一步优化代码以满足不同的转换需求。