2017-08-17 106 views
0

我试图创建一个汇总表,其中将有超过7列的46行数据。因此,我将从46张纸中提取数据,并将有7个不同的数据点。Excel VBA代码来填充汇总表与链接单元格的公式

我可以使用偏移功能来简化此代码

Sub AutoFillSheetNames() 
    Dim ActRng As Range 
    Dim ActWsName As String 
    Dim ActAddress As String 
    Dim Ws As Worksheet 

    On Error Resume Next 

    Set ActRng = Application.ActiveCell 
    ActWsName = Application.ActiveSheet.Name 
    ActAddress = ActRng.Address(False, False) 

    Application.ScreenUpdating = False 

    xIndex = 0 
    For Each Ws In Application.Worksheets 
     If Ws.Name <> ActWsName Then 
      ActRng.Offset(xIndex, 0).Value = "='" & Ws.Name & "'!" & ActAddress 
      xIndex = xIndex + 1 
     End If 
    Next 

    Application.ScreenUpdating = True 
End Sub 

我想实际的细胞连接,使他们能够自动更新,并且需要VBA,因为它会为许多不同的Excel工作簿不同tabnames来完成。例如,我在第一张48张工作表上将“汇总”工作表上的单元格F2链接到F2,然后正确输入剩余47个单元格的公式,直到F48,此处的代码工作正常。但是,当我想要将汇总表上的单元格H2链接到第一张表格上的G7时,我应该在上面的代码中更改哪些内容?

+0

备注:我几乎不推荐在不使用正确的错误处理的情况下使用'On Error Resume Next'。通过这种方式,您只能将错误消息静音,但错误仍然存​​在,您不会看到发生了什么问题。 –

+0

问题1)你为什么有47张?请考虑工作簿设计,因为这可以显着改善编码。话虽如此,你可以把你所有的工作表名称放入一个数组中并循环遍历该数组 – user1

回答

0

我真的不明白你想要完成什么。下面的代码将链接汇总表中每个工作表的第一行(即A1:G1)中的7个单元格。将会有多少张表格与表格一样多。但我不知道这是不是你真正想要的。

Sub AutoFillSheetNames() 
    Dim CurrWorkBK As Workbook 
    Dim CurrSheet As Worksheet 
    Dim TheOtherSheets As Worksheet 
    Dim MyRow As Long 
    Dim MyCol As Long 

    Set CurrWorkBK = ThisWorkbook 
    Set CurrSheet = CurrWorkBK.Worksheets("Summary") 

    MyRow = 1 
    For Each TheOtherSheets In CurrWorkBK.Worksheets 
     If TheOtherSheets.Name <> CurrSheet.Name Then 
      For MyCol = 1 To 7 
       CurrSheet.Cells(MyRow, MyCol).Value = "='" & TheOtherSheets.Name & "'!" & TheOtherSheets.Cells(1, MyCol).Address 
      Next MyCol 
      MyRow = MyRow + 1 
     End If 
    Next 
End Sub 
+0

这很简单且有帮助。我可以调整它以适用于链接到不同的单元格,导致可能是一个低效的冗长的代码,但它会产生所需的结果。 –

+0

很高兴帮助。如果我正确地解释你的帖子,你可以用'CurrSheet.Cells(MyRow,MyCol).Value =“='”&TheOtherSheets.Name&“'!”来更改上面的代码。 &TheOtherSheets.Cells(7,MyCol + 6).Address'(这会将原点从A1移到G7)。但是,我不确定这是否是你想要的。 – CMArg

相关问题