ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 怎么操作才能把数据写到相应模版工作表而生成新的工作表

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-8-15 18:44 | 显示全部楼层 |阅读模式
Option Explicit

Sub test()
  Dim filename(), i, j, k, m, a, b, arr
  If Not getfilename(ThisWorkbook.Path & "\shuju", filename, ".txt") Then MsgBox "请在shuju文件夹中指定存储位置!": Exit Sub
  Call events(False)
  ReDim brr(1 To UBound(filename) * 11, 1 To 11)
  m = 1
  For i = 1 To UBound(filename)
    Open filename(i) For Input As #1
    arr = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbNewLine)
    Close #1
    b = 0
    brr(m, 1) = filename(i)
    For j = 0 To UBound(arr)
      If InStr(arr(j), "要素") Or InStr(arr(j), "Element") Then
        a = 0: b = b + 1
        If b Mod 3 = 0 Then b = b + 1
        For k = j + 1 To UBound(arr)
          If InStr(arr(k), "=") Then
            a = a + 1
            brr(m + a, b) = Trim(Split(arr(k), "=")(1))
          End If
          If InStr(arr(k), "要素") Or InStr(arr(k), "Element") Then j = k - 1: Exit For
        Next
      End If
    Next
    m = m + 10
  Next
  '----------
  Dim sht, t
  For Each sht In Sheets
    If sht.Name <> "Sheet3" Then Sheets(sht.Name).Delete
  Next
  For i = 1 To UBound(brr, 1)
    If InStr(brr(i, 1), ".txt") Then
      t = Split(brr(i, 1), "\")
      t = Split(t(UBound(t)), ".")(0)
      Sheets.Add: ActiveSheet.Name = t
      ReDim crr(1 To 10, 1 To UBound(brr, 2))
      a = 0
      For j = i + 1 To UBound(brr, 1)
        a = a + 1
        For k = 1 To UBound(brr, 2): crr(a, k) = brr(j, k): Next
        If InStr(brr(j + 1, 1), ".txt") > 0 Or Len(brr(j + 1, 1)) = 0 Then i = j: Exit For
      Next
      ReDim drr(1 To UBound(brr, 2)): a = 0
      'For j = 1 To UBound(drr): a = a + 1: drr(j) = a: Next    '输出表头序号  隐藏
      With Sheets(t).[a7] '输出位置
        .Resize(, UBound(drr)) = drr
        .Offset(1).Resize(UBound(crr, 1), UBound(crr, 2)) = crr
      End With
    End If
  Next
  Call events(True)
End Sub

Function events(flag)
  With Application
    .DisplayAlerts = flag
    .ScreenUpdating = flag
  End With
End Function

Function getfilename(pth, filename, mark) As Boolean
  Dim f, n
  pth = pth & IIf(Right(pth, 1) = "\", "", "\")
  f = Dir(pth & "*.*")
  Do Until Len(f) = 0
    If LCase(Right(f, Len(mark))) = LCase(mark) Then
      n = n + 1: ReDim Preserve filename(1 To n)
      filename(n) = pth & f
    End If
    f = Dir
  Loop
  If n > 0 Then getfilename = True
End Function
上面的代码可以把数据分配到指定工作表中去,可以实现数据分类提取了。可是我现在有个指定模版,怎么修改才能每个工作表的数据在指定工作表内的单元格中。

SHUJU01.rar

64.5 KB, 下载次数: 16

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-17 06:28 来自手机 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-12 07:53 , Processed in 0.023654 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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