VBA学习心得4

干%…………¥#……&*……&*@#万门跑路了,我最近看的课还没看完啊真狗


V1.0 版  

Option Explicit

    '“Option Explicit”的作用为:声明所有变量都需要先定义才能使用,否则程序在使用了未经定义的变量时就会报错,

    '这样,可以避免变量因名称拼写等错误带来的结果错误,并且“Option Explicit”可以加快程序的运行速度,它节省了在程序运行时动态分配变量存储空间的时间

Sub 导入文件1_复制第一张表() '合并多工作簿中指定工作表

    On Error Resume Next '忽略报警错误,不加此句,for each循环,打开选择文件时,不选文件会报错。

    Dim allFile, file, arr As Variant

    Dim wb, twb As Workbook

    Dim ws, tws, tws2 As Worksheet

    Dim row, col, row2, col2, wb_rows, i, j As Integer

    Dim FirstRowNum, FirstColNum, TempRowNum, TempColNum As Integer

    Dim wb_name As String

    Dim title, titles As Range

    Dim a, b

    Dim dicTemp As Object

    Dim strExists As String

    Dim datas As Object

    Dim name As Range

    Dim xingming As Range

    '禁用屏幕更新和显示警告以加快宏代码的速度

    Application.ScreenUpdating = False  '

    Application.DisplayAlerts = False

    'Workbooks("TEST.xlsx").Worksheets("Sheet1").Activate

    Set twb = ThisWorkbook      '设置当前工作簿

    Set tws = twb.Sheets(1)    '设置当前工作簿的第一张工作表

    Set tws2 = twb.Sheets(2)    '设置当前工作簿的第二张工作表

    '为了便于比对,每次导入文件前将第二张表清空

    tws2.Cells.Clear            '将第二张工作表清空

    '导入文件

    allFile = Application.GetOpenFilename(FileFilter:="Excel文件 (*.xls; *.xlsx),*.xls; *.xlsx,所有文件(*.*),*.*", _

    title:="Excel选择", MultiSelect:=True)

    For Each file In allFile

    If file <> False Then

        Set wb = Workbooks.Open(file)          '循环打开选定的文件

        Set ws = wb.Sheets(1)                  '打开选定的第一张工作表

        '全部复制到第二张表中

        col2 = tws2.UsedRange.SpecialCells(xlCellTypeLastCell).column    '第二张工作表中所有已使用的单元格区域列

        row2 = tws2.UsedRange.SpecialCells(xlCellTypeLastCell).row        '第二张工作表中所有已使用的单元格区域行

        If col2 = 1 And row2 = 1 And tws2.Cells(1, 1) = "" Then

            ws.UsedRange.Copy tws2.Cells(1, 1)

        Else

            ws.UsedRange.Copy tws2.Cells(row2 + 1, 1)

        End If

        '选择性复制到第一张表

        col = tws.UsedRange.SpecialCells(xlCellTypeLastCell).column    '第一张工作表中所有已使用的单元格区域列

        row = tws.UsedRange.SpecialCells(xlCellTypeLastCell).row        '第一张工作表中所有已使用的单元格区域行

        'ws.Cells.Find("姓名").Select

        Set name = ws.Cells.Find("姓名")      '查找姓名所在单元格

        'name.Select

        'MsgBox name.Address

        FirstRowNum = name.row                      '查看姓名所在单元格在第几行,首行

        FirstColNum = name.column

        '计算导入表的信息行数_TempRowNum,肯定大于1

        TempRowNum = Range(name, name.End(xlDown)).Rows.Count - 1

        TempColNum = Range(name, name.End(xlToRight)).Columns.Count

        '存为数组arr

        Set arr = Range(Cells(FirstRowNum, FirstColNum), Cells(FirstRowNum + TempRowNum, FirstColNum + TempColNum - 1))

        'Rng.Parent.UsedRange    '选中当前所使用的区域

        'Rows(name.Row).Select    '选中当前行

        Set titles = Intersect(arr, Rows(name.row))    'intersect语句求交集。

        'titles.Select

        For Each title In titles

            'a = title.row

            'b = title.column

            If title = "姓名" Then

                For i = 1 To TempRowNum

                    ws.Cells(title.row + i, title.column).Copy

                    tws.Cells(row + i, 2).PasteSpecial Paste:=xlPasteValuesAndNumberFormats

                Next

            ElseIf title = "身份证" Or title = "身份证号" Or title = "身份证号码" Then

                For i = 1 To TempRowNum

                    ws.Cells(title.row + i, title.column).Copy

                    tws.Cells(row + i, 3).PasteSpecial Paste:=xlPasteValuesAndNumberFormats

                Next

            ElseIf title = "银行卡" Or title = "银行卡号" Or title = "银行卡号码" Or title = "账号" Then

                For i = 1 To TempRowNum

                    ws.Cells(title.row + i, title.column).Copy

                    tws.Cells(row + i, 4).PasteSpecial Paste:=xlPasteValuesAndNumberFormats

                Next

            ElseIf title = "开户" Or title = "开户行" Or title = "开户银行" Or title = "开户行(需含分行及支行)" Or title = "开户行(需含分行及支行)精确省市" Then

                For i = 1 To TempRowNum

                    ws.Cells(title.row + i, title.column).Copy

                    tws.Cells(row + i, 5).PasteSpecial Paste:=xlPasteValuesAndNumberFormats

                Next

            ElseIf title = "应发金额" Or title = "应付金额(税前金额)" Or title = "税前" Or title = "税前金额" Then

                For i = 1 To TempRowNum

                    ws.Cells(title.row + i, title.column).Copy

                    tws.Cells(row + i, 6).PasteSpecial Paste:=xlPasteValuesAndNumberFormats

                Next

            ElseIf title = "个税" Or title = "代扣金额(个税)" Or title = "税金" Then

                For i = 1 To TempRowNum

                    ws.Cells(title.row + i, title.column).Copy

                    tws.Cells(row + i, 7).PasteSpecial Paste:=xlPasteValuesAndNumberFormats

                Next

            ElseIf title = "实发金额" Or title = "实发金额(实际发放金额)" Or title = "税后" Or title = "税后金额" Or title = "打款金额" Then

                For i = 1 To TempRowNum

                    ws.Cells(title.row + i, title.column).Copy

                    tws.Cells(row + i, 8).PasteSpecial Paste:=xlPasteValuesAndNumberFormats

                Next

            End If

        Next

        '备注

        wb_name = Left(wb.name, Len(wb.name) - 5)

        If TempRowNum = 1 Then

            tws.Cells(row + 1, 9) = wb_name

        Else

            For i = row + 1 To row + TempRowNum

                tws.Cells(i, 9) = wb_name

            Next

        End If

        wb.Close

    End If

    Next

    '开启屏幕刷新和显示警告

    Application.ScreenUpdating = True

    Application.DisplayAlerts = True

End Sub

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容

  • V0.9 版 Option Explicit Sub 导入文件_全部复制到表2() '合并多工作簿中指定工作表 ...
    Walteverything阅读 686评论 0 0
  • 最近一起创业的朋友又回去做老本行了,感谢她陪我一起创业的经历,寻思帮她把一些日常的工作变得自动化以节约时间,她做财...
    Walteverything阅读 1,224评论 0 0
  • 6. 读取不同数据格式并合并。 很多关于合并不同工作簿的教程都有一个共同之处,就是文件的格式几乎都是相同的,能判断...
    Walteverything阅读 464评论 0 0
  • 本例为设置密码窗口 (1) If Application.InputBox(“请输入密码:”) = 1234 Th...
    浮浮尘尘阅读 13,585评论 1 20
  • 适合学习者或具体有中级编程水平的朋友学习 完整代码连接:https://wenku.baidu.com/view/...
    147d858e3063阅读 4,963评论 0 2