使用VBA从尚未创建的工作表中收集数据

时间:2012-12-06 12:28:28

标签: excel vba excel-vba

我被要求为我不填充的excel文件创建摘要工作表。这些是“每月”excel文件,工作表“通常”以周开始日期命名。我说'通常',因为拼写错误可能会蔓延或者不允许在创建之前预测工作表名称。在相关的一周开始之前,工作表不会被创建。

我正在努力做的是创建一些VBA代码,将每个工作表中的大量单元格和范围复制到一个隐藏的摘要工作表中。工作表都遵循相同的格式,主要信息是:A1作为周开始日期,O4到R4作为4个摘要列标题,N5到N30作为用户名信息。 O5到R30然后根据工作表中的数据计算它们。

我想创建一些代码来复制周开始日期(A1)以及非空白用户名(N5:N30)以及相应行之后的值。由于O4到R4中的列标题不会更改,因此可以在摘要表上保持静态。

害怕我对vba不太了解。我想我会使用Worksheets.Count来查找工作表的数量?是要修改here上的代码,但我不知道如何确保每行数据都在摘要工作表的新行上?

2 个答案:

答案 0 :(得分:0)

使用ozgrid示例但进行此更改:

.Range("A1").

.Range("A" & l).

然后使用更多问题+您正在使用的实际代码修改您的原始帖子。

答案 1 :(得分:-1)

我修改了以下可能与您的查询或多或少相关的ozgrid代码。如果您可以将查询重新编写为更多task1,task2方式,则可以轻松地将以下脚本更改为您想要的内容。

下面的脚本只是作为一个模块而不是工作表事件,它更易于控制,只需创建一个子模块并将其复制粘贴然后运行它,或者您也可以使用developper在工作表上创建一个按钮来运行选项卡并选择链接到宏SplitWs的表单或activex按钮。

Sub SplitWs()

Dim wSheet As Worksheet, ws As Worksheet
Dim i As Long

Set wSheet = ThisWorkbook.Worksheets(1)

i = 1

    With wSheet
        .Columns(1).ClearContents
        .Cells(1, 1) = "INDEX"
        .Cells(1, 1).Name = "Index"
    End With


    For Each ws In Worksheets
        If ws.Name <> wSheet.Name Then
            i = i + 1
                With wSheet
                    .Range("A1").Name = "Start_" & wSheet.Index
                    .Hyperlinks.Add Anchor:=.Range("A1"), Address:="", _
                    SubAddress:="Index", TextToDisplay:="Back to Index"
                End With

                wSheet.Hyperlinks.Add Anchor:=wSheet.Cells(i, 1), Address:="", _
                SubAddress:="Start_" & wSheet.Index, TextToDisplay:=wSheet.Name
        End If
    Next ws

End Sub

我还将'l'变量更改为'i',这更容易阅读。

希望它会有所帮助,否则就要修改的事情发表评论。

帕斯卡

http://multiskillz.tekcities.com