ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 449|回复: 15

[求助] 能否帮忙改进一下代码?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-6-16 23:21 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
在论坛看到一指禅老师的跨工作表导入数据的代码,感觉挺实用的,但这个代码只能实现全表导入,

我想能否可以修改一下,实现原表已经存在的不导入,只导入新增不重复的部分呢?
sample.rar (19.19 KB, 下载次数: 17)




Sub 导入数据()
    Dim p$, f$, Wb As Workbook, Arr
    Dim aa As String, Falg As Boolean
    aa = InputBox("请输入文件名:", "导入数据", 36)
    If StrPtr(aa) <> 0 Then
        p = ThisWorkbook.Path
        f = Dir(p & "\" & aa & ".xls*")
        Do While f <> ""
            Set Wb = Workbooks.Open(p & "\" & f)
            Arr = Wb.Sheets(1).Range("A2:h40").Value
            Wb.Close False
            f = Dir
            Falg = True
        Loop
        If Falg Then
            Application.ScreenUpdating = False
            Sheet1.Range("A3:h65536").ClearContents
            Sheet1.Range("A3").Resize(UBound(Arr), UBound(Arr, 2)) = Arr
            Application.ScreenUpdating = True
        Else
            MsgBox "没有找到文件名为“" & aa & "”文件。"
        End If
    End If
End Sub

TA的精华主题

TA的得分主题

发表于 2024-6-17 01:08 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  1. Sub 导入数据()
  2.     Dim p$, f$, Wb As Workbook, Arr
  3.     Dim aa As String, Falg As Boolean
  4.     aa = InputBox("请输入文件名:", "导入数据", 36)
  5.     If StrPtr(aa) <> 0 Then
  6.         p = ThisWorkbook.Path
  7.         f = Dir(p & "" & aa & ".xls*")
  8.         Do While f <> ""
  9.             Set Wb = Workbooks.Open(p & "" & f)
  10.             Arr = Wb.Sheets(1).Range("A2:h40").Value
  11.             Wb.Close False
  12.             f = Dir
  13.             Falg = True
  14.         Loop
  15.         If Falg Then
  16.             Application.ScreenUpdating = False
  17.             Dim lastR As Long
  18.             lastR = Sheet1.Cells(Rows.Count, 2).End(xlUp).Row
  19.             Sheet1.Range("A" & lastR + 1).Resize(UBound(Arr), UBound(Arr, 2)) = Arr
  20.             Sheet1.Range("A3", Sheet1.Cells(Sheet1.Rows.Count, 8).End(xlUp)).RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7, _
  21.         8), Header:=xlNo
  22.             Application.ScreenUpdating = True
  23.         Else
  24.             MsgBox "没有找到文件名为“" & aa & "”文件。"
  25.         End If
  26.     End If
  27. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2024-6-17 05:07 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
新增不重复的定义是什么

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-17 07:03 | 显示全部楼层

老师,有些问题呀,运行代码显示查不到36文件

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-17 07:29 | 显示全部楼层
ynzsvt 发表于 2024-6-17 05:07
新增不重复的定义是什么

就是原表中有的,就不需要导入进来,只导入原表中没有的

TA的精华主题

TA的得分主题

发表于 2024-6-17 07:34 | 显示全部楼层
vbahappy 发表于 2024-6-17 07:29
就是原表中有的,就不需要导入进来,只导入原表中没有的

根据什么判断原表中已经有了,总得有个判断的依据才行吧

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-17 08:05 | 显示全部楼层
3190496160 发表于 2024-6-17 07:34
根据什么判断原表中已经有了,总得有个判断的依据才行吧

不好意思,我现在才发现原表和数据源的的表头有些不一致,可能让老师疑惑了
就是品牌,规格,单位,数量,完全一致,就不需要导入
比如说:sample文件   image.png 这个已经有了,那么就不需要导入了
只导入 image.png

TA的精华主题

TA的得分主题

发表于 2024-6-17 08:18 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
参与一下,仅供参考。。。
image.png
image.png
image.png

sample.zip

16.48 KB, 下载次数: 8

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-6-17 08:32 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

Sub 导入数据()
Application.ScreenUpdating = False
Dim d As Object
Set d = CreateObject("scripting.dictionary")
Dim f$, Wb As Workbook
Dim aa As String
Dim ar As Variant, br As Variant
Dim arr()
aa = InputBox("请输入文件名:", "导入数据", 36)
If aa = "" Then MsgBox "您没有输入文件名!": End
p = ThisWorkbook.Path
f = Dir(p & "\" & aa & ".xls*")
If f = "" Then MsgBox "没有找到文件名为“" & aa & "”文件。": End
With ActiveSheet
    r = .Cells(Rows.Count, 2).End(xlUp).Row
    If r > 2 Then
        ar = .Range("a2:h" & r)
        For i = 2 To UBound(ar)
            If ar(i, 2) <> "" And ar(i, 3) <> "" Then
                zd = ar(i, 2) & "|" & ar(i, 3) & "|" & ar(i, 7) & "|" & ar(i, 8)
                d(zd) = i
            End If
        Next i
    End If
    Set Wb = Workbooks.Open(p & "\" & f)
    With Wb.Worksheets(1)
        rs = .Cells(Rows.Count, 2).End(xlUp).Row
        br = .Range("a2:h" & rs)
    End With
    Wb.Close False
    ReDim arr(1 To UBound(br), 1 To UBound(br, 2))
    For i = 2 To UBound(br)
        If br(i, 2) <> "" And br(i, 3) <> "" Then
            zd = br(i, 2) & "|" & br(i, 3) & "|" & br(i, 7) & "|" & br(i, 8)
            If Not d.exists(zd) Then
                n = n + 1
                For j = 1 To UBound(br, 2)
                    arr(n, j) = br(i, j)
                Next j
            End If
        End If
    Next i
    If n = "" Then MsgBox "没有需要更新的数据!": End
    .Cells(r + 1, 1).Resize(n, UBound(arr, 2)) = arr
End With
Application.ScreenUpdating = True
MsgBox "本次更新了" & n & "行数据!"
End Sub

TA的精华主题

TA的得分主题

发表于 2024-6-17 08:33 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-9-27 20:27 , Processed in 0.055656 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表