【发布时间】:2019-06-09 14:00:14
【问题描述】:
我想将 csv 文件导入我自己的工作簿。现在它每次都会创建一个新的工作簿。我希望我的 csv 文件中的数据进入不同的工作表。只有我想要将数据设置为 11 个标准工作表,因为我有 11 个团队(团队 A、团队 B 等)。这目前确实有效,因为它创建了一个包含 11 个工作表的新工作簿。
我有一个要用于项目的 Excel 文件。 在这种情况下,有几个团队每天将数据导出到 csv 文件。 现在,我想将这些文件导入到我的活动工作簿中,每个团队都有自己的工作表。需要使用按钮导入 CSV 数据文件。然后 csv 数据将进入同一个工作簿。
我在网上找到了以下代码,效果很好!这种方式的唯一问题是它每次都会创建一个新工作簿。然后我必须将新生成的工作簿中的数据(表格中每个团队的数据)复制到我自己的工作簿中。
您可以想象这种复制粘贴目前非常烦人。我希望有谁擅长编程并且可以帮助我:)?我目前用于将数据导入随机生成的工作簿的代码如下:
Sub DataImporteren()
Dim FilesToOpen
Dim x As Integer
Dim wkbAll As Workbook
Dim wkbTemp As Workbook
Dim sDelimiter As String
On Error GoTo ErrHandler
Application.ScreenUpdating = False
sDelimiter = ","
FilesToOpen = Application.GetOpenFilename _
(FileFilter:="CSV Files (*.csv), *.csv", _
MultiSelect:=True, Title:="CSV Files to Open")
If TypeName(FilesToOpen) = "Boolean" Then
MsgBox "No Files were selected"
GoTo ExitHandler
End If
x = 1
Set wkbTemp = Workbooks.Open(Filename:=FilesToOpen(x))
wkbTemp.Sheets(1).Copy
Set wkbAll = ActiveWorkbook
wkbTemp.Close (False)
wkbAll.Worksheets(x).Columns("A:A").TextToColumns _
Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, _
Tab:=False, Semicolon:=False, _
Comma:=False, Space:=False, _
Other:=True, OtherChar:="|"
x = x + 1
While x <= UBound(FilesToOpen)
Set wkbTemp = Workbooks.Open(Filename:=FilesToOpen(x))
With wkbAll
wkbTemp.Sheets(1).Move After:=.Sheets(.Sheets.Count)
.Worksheets(x).Columns("A:A").TextToColumns _
Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, _
Tab:=False, Semicolon:=False, _
Comma:=False, Space:=False, _
Other:=True, OtherChar:=sDelimiter
End With
x = x + 1
Wend
ExitHandler:
Application.ScreenUpdating = True
Set wkbAll = Nothing
Set wkbTemp = Nothing
Exit Sub
ErrHandler:
MsgBox Err.Description
Resume ExitHandler
End Sub
所以最后我需要帮助: 我有我的概述的标准工作簿。使用计算和公式来比较导入的数据。 (已经有这个工作)
将数据导入此标准工作簿,而不是每次创建新工作簿的此宏。
对于(标准 csv 文件)我的工作簿中的每个团队,一个标准工作表。 CSV 文件:每次我导入新的更新的团队 A csv 文件等时,都会将“团队 A”导入工作表团队 A。
我希望有人可以帮助我,因为这样可以节省我大量的复制粘贴时间。
【问题讨论】:
-
重要信息丢失:应该追加进来的数据还是替换工作簿中已有的数据?是否应该保留工作簿中已有的信息(例如公式)?如果是,如何识别?你有什么样的 VBA 背景?
-
嗨@CindyMeister,进来的数据应该替换已经是我工作表的数据。我的想法是我有 12 个工作表。其中一张是比较其他 11 张表的更新数据的表。这 11 个工作表是团队 A、团队 B 等。现在使用代码,我在 11 个工作表中的每个 csv 文件(按团队命名)的新工作簿中获取数据。我希望更新的工作表覆盖我工作簿中的 11 个团队工作表,而不是一个包含 11 个工作表的新文件。此外,我的 VBA 技能非常基础,我还在上学,上过基本的 VBA 课程,可惜没有像这样详细的课程。
-
您确定此代码正在为每个文件创建一个新工作簿吗?在我看来,它正在打开 csv 文件并将内容复制到活动工作簿的工作表 1 到 x。 (并且该行代码需要靠近开头,在
FileToOpen之前。) -
嗨 @cindymeister 是的,它会为每个 csv 文件创建一个新的空书。
-
是的,但是从代码的外观来看,在将内容复制到当前工作簿之后,它应该关闭这些而不保存。