ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 修改代码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-3-30 13:58 | 显示全部楼层 |阅读模式
老师,有簿,希望点击文件夹,导入文件夹下工作簿到本工作簿,但现有代码可以导入,但有2个问题需请老师赐教,1是全选文件夹下工作簿时,顺序簿对;2是希望表头只留1行;3是希望将原表头的月移到列。敬请老师赐教。谢谢!

修改代码.rar

115.96 KB, 下载次数: 7

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-30 14:47 | 显示全部楼层
发现好多导入的文件一般都有,原最后位置的文件导入后,都会放首位。这是什么原因?

TA的精华主题

TA的得分主题

发表于 2023-3-30 14:58 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
GPT回复可以对该段代码进行如下优化和修改。

顺序问题:修改代码如下,添加一个遍历数组元素前的排序:
x = Application.GetOpenFilename(FileFilter:="Excel文件 (*.xls; *.xlsx),*.xls; *.xlsx,所有文件(*.*),*.*", _
Title:="Excel选择", MultiSelect:=True)
If Not IsArray(x) Then Exit Sub
x = SortArr(x)
'定义一个子函数SortArr,用于将文件名按照从小到大的顺序排序
Function SortArr(ByRef arr() As Variant) As Variant()
   Dim i As Long, j As Long, temp As Variant
   For i = LBound(arr) To UBound(arr) - 1
       For j = i + 1 To UBound(arr)
           If arr(i) > arr(j) Then
               temp = arr(i)
               arr(i) = arr(j)
               arr(j) = temp
           End If
        Next j
    Next i
    SortArr = arr
End Function
表头只留1行:将第一行及以下的内容清空,并且只保留第一行即可。修改代码如下:
Set ts = t.Sheets(3)
ts.Cells.ClearContents
ts.Range("A1").Value = "日期"
l = ts.Range("A1").Column
希望将原表头的月移到列:在打开工作簿后,可以先把原来的表头放置到新的位置,然后删除第一行的代码即可。具体代码修改如下:
Set w = Workbooks.Open(x1)
Set wsh = w.Sheets(1)
h = ts.UsedRange.SpecialCells(xlCellTypeLastCell).Row
wsh.Range("A1", wsh.Cells(1, l)).Copy ts.Cells(1, 2)
wsh.UsedRange.Offset(1, 0).Copy ts.Cells(h + 1, 1)
w.Close[/code]

TA的精华主题

TA的得分主题

发表于 2023-3-30 15:03 | 显示全部楼层
我猜是没用 after:=thisworkbook.sheets(thisworkbook.sheets.count)

TA的精华主题

TA的得分主题

发表于 2023-3-30 15:06 | 显示全部楼层
改用数组,尽量保留你自己的代码。

不过,如果是我,不会象你这样写。

修改代码.zip

135.77 KB, 下载次数: 8

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-3-30 15:24 | 显示全部楼层
建议:
循环里这样写:
        With Workbooks.Open(x1, ReadOnly:=True)
            With .Sheets(1)
                MaxR = .Cells(Rows.Count, 2).End(3).Row
                If MaxR > 3 Then
                    MaxR1 = ts.Cells(Rows.Count, 2).End(3).Row + 1
                    .Range(.Cells(4, 1), .Cells(MaxR, "E")).Copy ts.Cells(MaxR1, 1)
                    ts.Cells(MaxR1, "F").Resize(MaxR - 3, 1).Formula = .Range("B2")
                End If
            End With
            .Close
        End With

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-30 15:32 | 显示全部楼层
ykcbf1100 发表于 2023-3-30 15:06
改用数组,尽量保留你自己的代码。

不过,如果是我,不会象你这样写。

谢谢老师!我也是东拼西凑的,哈哈!另,SORT的升序功能没有实现。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-30 16:24 | 显示全部楼层
ykcbf1100 发表于 2023-3-30 15:06
改用数组,尽量保留你自己的代码。

不过,如果是我,不会象你这样写。

老师,刚发了好久也未显示。现简言。代码未升序。

TA的精华主题

TA的得分主题

发表于 2023-3-30 16:28 | 显示全部楼层
本帖最后由 ykcbf1100 于 2023-3-30 16:33 编辑
xing_chen 发表于 2023-3-30 16:24
老师,刚发了好久也未显示。现简言。代码未升序。

按月份排序了,只是序号未写,要写也简单。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-30 16:34 | 显示全部楼层

老师,代码中有.Sort .[f2], 1,但未起作用
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-9-29 12:25 , Processed in 0.037762 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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