Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 从一张工作表中获取结果并将其移动到许多其他工作表中_Vba_Excel_Csv - Fatal编程技术网

Vba 从一张工作表中获取结果并将其移动到许多其他工作表中

Vba 从一张工作表中获取结果并将其移动到许多其他工作表中,vba,excel,csv,Vba,Excel,Csv,我看过这个问题的类似答案,但无论我做什么,我都无法让他们做我需要的事情 我每天都有一封电子邮件,里面有一个CSV文件,提供我们销售团队前一天的通话统计数据。我需要的是将它们输入Excel,以提供今年的趋势和历史通话活动。如果没有VBA或宏,这是一个非常耗时的过程 它给出的统计数据是呼叫数和平均呼叫长度(这很重要),我已经用VBA计算了总的传出时间: Dim Call_Number As Integer Dim Call_Time As Date Dim Call_Total As Date C

我看过这个问题的类似答案,但无论我做什么,我都无法让他们做我需要的事情

我每天都有一封电子邮件,里面有一个CSV文件,提供我们销售团队前一天的通话统计数据。我需要的是将它们输入Excel,以提供今年的趋势和历史通话活动。如果没有VBA或宏,这是一个非常耗时的过程

它给出的统计数据是呼叫数和平均呼叫长度(这很重要),我已经用VBA计算了总的传出时间:

Dim Call_Number As Integer
Dim Call_Time As Date
Dim Call_Total As Date

Call_Number = .Cells(2, 6).Value
Call_Time = .Cells(2, 7).Value

Call_Total = Call_Number * Call_Time
.Cells(12, 7).Value = Call_Total
因此,我需要的是为每个销售成员提取3个单元格,并将它们移动到其相关表格中的正确位置,这些表格按名称分隔。如果目标单元格已满,我还需要将其移动到右侧的下一个单元格中,因此我认为我需要从1月1日开始粘贴过程,并一直移动到右侧,直到找到空白单元格。有没有一种方法可以通过按钮或自动完成

LastCol = WshtName.Cells(CrntRow, Columns.Count).End(xlToLeft).Column
我将第一张表用作数据导入表,我们只需将数据导入csv,因为它的标准格式,每天都将以正确的格式提供所有数据

到目前为止,我已经掌握了密码。它不会出错,但不会执行任何操作:

Sub Move_Data()

Dim Dean As Worksheet
Dim Chris As Worksheet
Dim Paul As Worksheet
Dim Nigel As Worksheet
Dim Calc As Worksheet
Dim Lastrow As Long
Dim J As Long
Dim i As Long


Set Dean = ThisWorkbook.Worksheets("DEAN 822")
Set Chris = ThisWorkbook.Worksheets("CHRIS 829")
Set Paul = ThisWorkbook.Worksheets("PAULP 830")
Set Nigel = ThisWorkbook.Worksheets("NIGEL 833")
Set RUSSELL = ThisWorkbook.Worksheets("RUSSELL 835")
Set Calc = ThisWorkbook.Worksheets("Calculation Sheet")

Lastrow = Range("C" & Dean.Columns.Count).End(xlToRight).Column

J = 2

For i = 0 To Lastrow

Set Rng = Dean.Range("C5").Offset(i, 0)
If Not (IsNull(Rng) Or IsEmpty(Rng)) Then
Calc.Cells(2, 4).Copy
Dean.Range("c" & J).PasteSpecial xlPasteValues
J = J + 1
End If
Next i
Application.CutCopyMode = False


End Sub
而不是

Lastrow = Range("C" & Dean.Columns.Count).End(xlToRight).Column
我想你想要

Lastrow = Range("C" & Dean.Columns.Count).End(xlUp).Row

“我还需要……在按钮中还是自动?”

LastCol
设置为行CrntRow中最后使用的列


我不确定这段代码在尝试什么

它将Rng设置为C5、C6、C7、C8、。。。到Cn,其中n是最后一行+5。例如,如果C5为空,则将C2复制到“计算单元(2,4)”

您的意思是将工作表Dean中的C列复制到工作表Calc的B列吗

如果清除空单元格并不重要,那么这将更快、更清晰:

Set Rng = Dean.Range(.Cells(5 ,"C"), .Cells(Lastrow ,"C"))
Rng.Copy Destination:=Calc.Cells(2, 4)
回应评论的新信息

我无法从您的描述中看到您的源数据或目标数据,因此无法给出任何具体建议

欢迎来到堆栈溢出。我相信这是一个查找以前发布的信息和发布新问题的好地方,但你必须遵守网站规则

顶部栏中间右侧是“帮助”按钮。单击此项并阅读如何使用此网站。了解如何发布一个问题,该问题将被归类为一个好问题,并将得到快速和有益的回答

我相信你的问题最大的三个问题是:

  • 你要求太多了。你可以问很多你想问的好问题,但是每个问题应该只有一个问题
  • 您要求提供已经可用的信息
  • 你对自己的要求太含糊,不允许任何人帮忙。您说您希望每个员工移动三个值。但您不显示工作表“计算书”或工作人员工作表的排列方式。在获得较高声誉之前,您不能发布图像,但您可以使用代码工具创建工作表的“图形”
为了避免要求太多,你必须把你的要求分成几小步。以下是我根据我对你所寻求的东西的猜测,试图找出必要的小步骤

包含员工详细信息的CSV文件作为附件发送到每日电子邮件。您是否手动保存这些附件?保存附件的Outlook VBA宏并不难编写。我建议您稍后再讨论,但如果您在堆栈溢出中搜索“[outlook vba]保存附件”,您将找到相关代码

上面显示了如何搜索堆栈溢出。我从语言的标记开始,然后是一些关键词或关键短语。有时我需要几次才能找到正确的搜索词,但我很少找不到有趣的东西

如何将CSV导入Excel?您是手动执行此操作的吗?有许多可能的VBA方法。尝试搜索“[excel vba]xxxx”,其中xxxx描述了您的首选方法

我假设CSV文件的结构非常简单,在单个行中查找信息并不困难。您似乎知道查找最后一行的最简单方法,因此创建沿行运行的循环应该不会有任何困难

您如何将CSV文件中员工的姓名与其工作表的名称联系起来?在您的问题中,您有工作表名称,如“DEAN 822”、“CHRIS 829”和“PAULP 830”。这些是CSV文件中使用的名称吗?新员工加入时会发生什么?我怀疑这种情况经常发生,但当它发生时,您不想修改宏

我不理解您对将新数据添加到任何现有数据右侧的要求。每天将有三个值,因此每年大约有200个工作日,即600列。对我来说,这是一个尴尬的安排。我原以为每天排一排会更方便

如何运行宏?你提到一个按钮或自动。我不喜欢按钮,因为我发现工具栏已经够乱了。我更喜欢使用快捷键,如Ctrl+q。对于这种类型的工作簿,我很少有一个以上的宏,所以这对我来说很好。“自动”是指工作簿打开时宏将自动运行。我会从快捷键开始,但当您准备好查找“事件”和“事件例程”时。您将看到有关如何在工作簿打开时自动启动宏的说明


我希望以上内容能有所帮助。

嘿,很抱歉回复得太晚,我刚刚有时间再次处理这个问题。回答您的问题:您的意思是将工作表Dean的C列复制到工作表Calc的B列吗?不,应该是相反的。让我澄清一下我的要求。我需要自动的
Set Rng = Dean.Range(.Cells(5 ,"C"), .Cells(Lastrow ,"C"))
Rng.Copy Destination:=Calc.Cells(2, 4)