首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导入Excel工作表、追加新行和更新现有行的VBA

导入Excel工作表、追加新行和更新现有行的VBA
EN

Stack Overflow用户
提问于 2014-01-06 17:22:21
回答 1查看 13.5K关注 0票数 1

我正在使用Excel为支持票务系统生成报告,我希望使用VBA来简化更新报表数据的过程。我想要做的是将从票务系统中转储出来的Excel文件导入到我要用于报告的Excel文件中,但这有点扭曲。我需要在一列中使用该值来确定票证是新的还是现有的。如果是新的,我想将它添加到报告文件中。如果它存在,我希望用导入的数据覆盖匹配的行(基于匹配的列值,即票证号)。因此,基本的过程将是:

  1. 打开导出的文件(我知道怎么做)
  2. 对于导出文件中的每一行
  3. 读票号码(A栏)
  4. 在现有的工作表列中搜索票号(也是A栏)
  5. 如果找到,然后用导入的数据替换信息(B-X列)
  6. 否则,将导入的数据追加为新行(列as )
  7. 下一行

上面的步骤4-6是我想要帮助的。我可以使用一个公式(如=NOT(MATCH(导入的票证ID,现有票证ID数组,0))返回TRUE (如果存在票证ID,则返回FALSE ),但如果存在则希望找到更优雅的解决方案。

这里有人有这样做的经验和/或一些VBA代码,我可能可以调整,以适应我的目的?提前谢谢。

编辑:这是我到目前为止掌握的代码。不是很多。

代码语言:javascript
复制
Sub UpdateTickets()
'Specify data export file
Dim fNameAndPath As Variant
fNameAndPath = Application.GetOpenFilename(Title:="Select File To Be Processed")
If fNameAndPath = False Then Exit Sub
'Open data export file
Workbooks.Open Filename:=fNameAndPath
'For each row in data export file, starting at Row 2
'Check master data file (column A) for ticket number
'If ticket number exists, update information in columns B through P
'Else add new ticket row and place information in columns A through P
'Next row
End Sub
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-06 20:05:28

我刚写了这个,效果很好:

代码语言:javascript
复制
    Sub import_tickets()
        'run this when the active file is the main ticket list and the active sheet is the ticket list
        'exported file must be open already, and the ticket list must be the active sheet
        Dim exported_file As String
        exported_file = "exported file.xlsx"
        header_exists = True 'if exported file doesn't have a header, set this to false!
        starting_row = 1
        If header_exists Then starting_row = 2

        Dim first_blank_row As Long
        first_blank_row = Cells.SpecialCells(xlCellTypeLastCell).Offset(1, 0).Row

        Dim r As Long
        r = starting_row
        Dim found As Range
        cur_ticket_num = Workbooks(exported_file).ActiveSheet.Range("a" & r).Value
        Do While Not cur_ticket_num = ""
            'look for current ticket number in main file
            Set found = Columns("a:a").Find(what:=cur_ticket_num, LookIn:=xlValues, lookat:=xlWhole)
            If found Is Nothing Then
                'add info to end of main file
                write_line_from_export exported_file, r, first_blank_row
                first_blank_row = first_blank_row + 1
            Else
                'overwrite existing line of main file
                write_line_from_export exported_file, r, found.Row
            End If
            r = r + 1
            cur_ticket_num = Workbooks(exported_file).ActiveSheet.Range("a" & r).Value
        Loop
    End Sub

    Sub write_line_from_export(src_filename As String, src_r As Long, dest_r As Long)
        For c = 1 To 24
            Cells(dest_r, c).Value = Workbooks(src_filename).ActiveSheet.Cells(src_r, c).Value
        Next c
    End Sub

希望能帮上忙。第一个空白行代码引用了此页,查找代码引用了此页。我在主票文件的模块中编写了代码。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20955554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档