作者: 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格式并保存在同一个文件夹中。但是,根据具体需求,可以进一步优化代码以满足不同的转换需求。