Excel VBA 从一个工作簿查找另一个一个工作簿中的一些内容复制到另外一个工作簿

帮朋友来写个Excel VBA

以前写过ASP,所以对vb略微熟悉,但VBA 没有仔细研究过。

以前只研究过 vba 写一个 计算个人所得税的程序。

这次写的功能也算是简单,但也耗费了两天的功夫。

需求:

1 从【操作】表中,查找最后一行的数据,每一列 都为关键字

2 遍历这些关键字,从【总表】中查询这个关键字,把这一行后面的内容复制到 【预算】表中去

3 把【操作】中制定内容复制到【信息统计】中

Function Get操作NullLine()
‘
‘从 操作表 获取最后一个有数据下面的空行 row 序号
‘
   Get操作NullLine = GetNullLine("操作", "A", 2)
End Function

Function Get预算NullLine()
‘
‘从 预算表 获取最后一个有数据下面的空行 row 序号
‘
    Get预算NullLine = GetNullLine("预算", "A", 5)
End Function

Function Get信息统计NullLine()
    Get信息统计NullLine = GetNullLine("信息统计", "A", 2)
End Function

Function GetNullLine(excelTable As String, fromCell As String, beginRow As Integer)

‘
‘从 excelTable表 获取[fromCell单元格开始的]最后一个无数据的空行 row 序号
‘
    ‘设置开始的行
    Dim line: line = beginRow
    ‘选择Excel工作簿
    Worksheets(excelTable).Select
    ‘查找空行
    For Each c In Worksheets(excelTable).Range(fromCell & beginRow & ":" & fromCell & "999").Cells
        If c.Value <> "" Then
            ‘With c.Font
            ‘    .Bold = True
            ‘    .Italic = True
            ‘End With
            ‘‘‘‘‘‘‘‘‘MsgBox c.Value‘查看当前是什么数据
        Else
            ‘找到了空行则返回
            GetNullLine = line
            Exit Function
        End If
        line = line + 1
    Next c
End Function

Sub CreateNewOrderID()
‘
‘ CreateNewOrderID 宏
‘ 创建单号
‘
    Sheets("操作").Select
    Range("Q1:U1").Select
    ‘单元格格式为文本即可
    Selection.NumberFormatLocal = "@"
    ‘设置单元格内容为 订单号,规则= 日期
    ActiveCell.FormulaR1C1 = Year(Now()) & Month(Now()) & Day(Now()) & Hour(Now()) & Minute(Now()) & Second(Now())
End Sub

‘
‘遍历 操作表 中的一行序号,每一个序号都进行 DealSelectData(str) 处理,失败,则提示
‘
Function DealRowDatas(n As Integer) As Boolean
    DealRowDatas = False
    If n < 0 Then MsgBox "错误的参数 n=-1": Exit Function ‘判断传参错误
    If Not DealSelectData(Worksheets("操作").Range("A" & n).Value) Then MsgBox "处理这行数据错误:【" & "A" & n & "】": Exit Function
    If Not DealSelectData(Worksheets("操作").Range("B" & n).Value) Then MsgBox "处理这行数据错误:【" & "B" & n & "】": Exit Function
    If Not DealSelectData(Worksheets("操作").Range("C" & n).Value) Then MsgBox "处理这行数据错误:【" & "C" & n & "】": Exit Function
    If Not DealSelectData(Worksheets("操作").Range("D" & n).Value) Then MsgBox "处理这行数据错误:【" & "D" & n & "】": Exit Function
    If Not DealSelectData(Worksheets("操作").Range("E" & n).Value) Then MsgBox "处理这行数据错误:【" & "E" & n & "】": Exit Function
    If Not DealSelectData(Worksheets("操作").Range("F" & n).Value) Then MsgBox "处理这行数据错误:【" & "F" & n & "】": Exit Function
    If Not DealSelectData(Worksheets("操作").Range("G" & n).Value) Then MsgBox "处理这行数据错误:【" & "G" & n & "】": Exit Function
    If Not DealSelectData(Worksheets("操作").Range("H" & n).Value) Then MsgBox "处理这行数据错误:【" & "H" & n & "】": Exit Function
    If Not DealSelectData(Worksheets("操作").Range("I" & n).Value) Then MsgBox "处理这行数据错误:【" & "I" & n & "】": Exit Function
    If Not DealSelectData(Worksheets("操作").Range("J" & n).Value) Then MsgBox "处理这行数据错误:【" & "J" & n & "】": Exit Function
    If Not DealSelectData(Worksheets("操作").Range("K" & n).Value) Then MsgBox "处理这行数据错误:【" & "K" & n & "】": Exit Function
    If Not DealSelectData(Worksheets("操作").Range("L" & n).Value) Then MsgBox "处理这行数据错误:【" & "L" & n & "】": Exit Function
    If Not DealSelectData(Worksheets("操作").Range("M" & n).Value) Then MsgBox "处理这行数据错误:【" & "M" & n & "】": Exit Function
    If Not DealSelectData(Worksheets("操作").Range("N" & n).Value) Then MsgBox "处理这行数据错误:【" & "N" & n & "】": Exit Function
    DealRowDatas = True

End Function

‘
‘根据一个字符串 比如 DM9 从总表 查询并拷贝到 预算表 中去
‘
Function DealSelectData(str As String) As Boolean
    DealSelectData = False

    ‘MsgBox "从总表中查询[" & str & "]并且添加到 预算表 中去"

    ‘str= ‘Range("A3").Select
    ‘str= ‘ActiveCell.FormulaR1C1 = "DM9"

    Sheets("总表").Select
    Dim findObj As Range
    Set findObj = Cells.Find(What:=str, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , MatchByte:=False, SearchFormat:=False)
        findObj.Activate
        findObj.Select
        ‘MsgBox findObj.Column
    Dim findRow As Integer: findRow = findObj.Row

    ‘项目名称    辅材:元/单位    数量    人工:元/单位    数量    金额(元)  工艺做法及材料说明
    ‘拷贝以上列数据 在总表中 B-H 列的数据
    Range("B" & findRow & ":H" & findRow).Select
    Selection.Copy

    Sheets("预算").Select
    ‘从预算表中第几行开始粘贴
    Dim targetRow: targetRow = Get预算NullLine()
    Range("A" & targetRow).Select
    ActiveSheet.Paste
    Sheets("操作").Select

    DealSelectData = True
End Function

Sub Copy操作To信息统计(fromStr As String, toStr As String)
‘从一个单元格拷贝到另一个单元格

    Sheets("操作").Select
    Range(fromStr).Select

    ‘MsgBox ActiveCell.Value‘测试单元格是什么值
    ‘ActiveCell.FormulaR1C1 = "2015215104319"
    ActiveCell.Copy
    ‘Selection.Copy

    Sheets("信息统计").Select
    Range(toStr).Select
    ‘ActiveSheet.Paste‘此粘贴包含了格式,不好用!!!!!
    ‘只粘贴值,不粘贴格式
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub

‘
‘0 【增加到预算按钮】把操作表 最后一行的每一列的类似 DM9 这样的数据,从总表查询出来,拷贝到预算中去
‘
Sub 增加到预算()

Application.ScreenUpdating = False
    Call CreateNewOrderID

    If Not DealRowDatas(Get操作NullLine() - 1) Then: MsgBox "增加到预算 失败!有错误,请联系管理员 ": Application.ScreenUpdating = True: Exit Sub

    Sheets("预算").Select

Application.ScreenUpdating = True
    Exit Sub
End Sub

‘
‘ 1 【保存到信息统计中】
‘
Sub 保存到信息统计()

Application.ScreenUpdating = False
    Dim emptyLineNo: emptyLineNo = Get信息统计NullLine()
    ‘单号
    Call Copy操作To信息统计("Q1:U1", "A" & emptyLineNo)
    ‘预算员
    Call Copy操作To信息统计("Q6:U6", "B" & emptyLineNo)
    ‘业主姓名
    Call Copy操作To信息统计("Q2:U2", "C" & emptyLineNo)
    ‘联系方式
    Call Copy操作To信息统计("Q3:U3", "D" & emptyLineNo)
    ‘家庭地址
    Call Copy操作To信息统计("Q4:U4", "E" & emptyLineNo)
    ‘施工地址
    Call Copy操作To信息统计("Q5:U5", "F" & emptyLineNo)

    Sheets("操作").Select
    Application.CutCopyMode = False
    Sheets("信息统计").Select
Application.ScreenUpdating = True
    Exit Sub
End Sub
时间: 2024-10-12 12:42:01

Excel VBA 从一个工作簿查找另一个一个工作簿中的一些内容复制到另外一个工作簿的相关文章

复制多级文件,将一个文件夹中的所有内容复制到另一个文件夹中

复制多级文件,将一个文件夹中的所有内容复制到另一个文件夹中. 设计递归方法,通过传入源文件和目的文件,将源文件中内容完全复制到目的文件中:代码如下: private static void copyFolder(File srcFile, File destFile) throws IOException { //srcFile为源文件,destFile为目的文件 if (srcFile.isDirectory()) { File newFolder = new File(destFile, s

ZeroMQ接口函数之 :zmq_msg_copy - 把一个消息的内容复制到另一个消息中

ZeroMQ 官方地址 :http://api.zeromq.org/4-1:zmq_msg_copy zmq_msg_copy(3)   ØMQ Manual - ØMQ/3.2.5 Name zmq_msg_copy - 把一个消息的内容复制到另一个消息中 Synopsis int zmq_msg_copy (zmq_msg_t *dest, zmq_msg_t *src); Description zmq_msg_copy()函数会将src指定的消息对象中的内容复制到dest指定的消息对象

(六)两种方式将一个文件的内容复制到另一个文件(第二种方式效率更高,第一种一个字符一个字符的读写,第二种一个数组一个数组的读写)

一:将一个文件复制给另一个文件,每次读取一个字符import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; public class CopyFile { /** * 需求:将一个文件复制给另一个文件 * @param args * @throws Exception */ public static void main(String[] args) throws Exce

将DataTable中的某一行复制到另一个新的DataTable(转)

===前提:我们已经有一个DataTable的数据表 现在需要的只是其中的一行数据=== 比如说下面这段代码在一个方法里 返回的就是一个DataTable! sqlCon = new SqlConnection(strCon);             sqlCom = new SqlCommand();             sqlCom.Connection = sqlCon;             sqlCom.CommandText = "select_v";       

将制定目录下的内容复制到另一个路径下

//Folder是需要复制的总目录,lastpath是目标目录 private void CopyFile(DirectoryInfo Folders, string lastpath) { //首先复制目录下的文件 foreach (FileInfo fileInfo in Folders.GetFiles()) { if (fileInfo.Exists) { //如果列表有记录的文件,就跳过 // if (filePaths.Contains(fileInfo.FullName)) con

一个文件的内容复制到另一个文件中.

int main() { FILE *fp,*fp1; char ch[]={}; if ((fp=fopen("/User/Apple/Desktop/text.1","r"))==NULL) { printf("cannot open file\n"); return 0; } else {fp1=fopen("/User/Apple/Desktop/text.2", "w"); while(!feof

JavaScript基础 将一个div中的所有内容赋值给另一个div innerHTML

镇场诗: 清心感悟智慧语,不着世间名与利.学水处下纳百川,舍尽贡高我慢意. 学有小成返哺根,愿铸一良心博客.诚心于此写经验,愿见文者得启发.------------------------------------------ code: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"

Oracle 将一个用户上的内容复制到另一个用户中

exp 'dssdp/[email protected]' file=pams.dmp owner=dssdp log=dssdp.log imp 'pams/[email protected]' file=pams.dmp fromuser=dssdp touser=pams ignore=y constraints=y grants=y

《将一个磁盘文件中的信息复制到另一个磁盘文件中(怎样向文件读写字符)》

注意:程序中的feof(in)是检查in所指向的文件是否结束.如果是,则函数值为1(真),否则为0(假), 也就是“!feof(in)为真”,在while循环中检查"!feof(in)"为真,就执行循环体. //将一个磁盘文件中的信息复制到另一个磁盘文件中去,要求将上例建立的f:\\FILE_1\\file.txt文件中的//内容复制到另一个磁盘文件f:\\FILE_1\\file_1.txt文件中.#include<stdio.h>#include<stdlib.h