2017-08-17 1 views
0

Ich versuche ein Übersichtsblatt zu erstellen, in dem 46 Datenzeilen über 7 Spalten verteilt sind. Also werde ich die Daten von 46 Blättern ziehen und es wird 7 verschiedene Datenpunkte geben.Excel-VBA-Code zum Auffüllen des Übersichtsfensters mit der Formel zum Verknüpfen von Zellen

Kann ich die Offset-Funktion verwenden, um diesen Code zu vereinfachen, z.

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 

Ich mag die tatsächlichen Zellen verknüpfen, so dass sie automatisch und VBA benötigt wird, um aktualisieren, weil es für viele verschiedene Excel-Dateien mit unterschiedlichen tabnames erfolgen. Der hier angegebene Code funktioniert, wenn ich z. B. die Zelle F2 im Übersichtsblatt auf dem ersten Blatt mit 48 Blatt mit F2 verknüpfe und dann die Formel für die restlichen 47 Zellen korrekt in F48 eingabe. Wenn ich jedoch die Zelle H2 im Übersichtsblatt mit G7 auf dem ersten Blatt verknüpfen möchte, was soll ich im obigen Code ändern?

+0

Seitliche Anmerkung: Ich empfehle kaum, 'On Error Resume Next' zu verwenden, ohne eine ordnungsgemäße Fehlerbehandlung zu verwenden. Auf diese Weise werden Fehlermeldungen nur stummgeschaltet, aber die Fehler sind immer noch vorhanden und Sie sehen nicht, was schief läuft. –

+0

Frage 1) Warum haben Sie 47 Blätter? Bitte beachten Sie das Design der Arbeitsmappe, da dies die Codierung erheblich verbessern kann. Das heißt, Sie können alle Ihre Arbeitsblattnamen in ein Array und Schleife durch das Array – user1

Antwort

0

Ich kann wirklich nicht verstehen, was Sie erreichen möchten. Der folgende Code wird die 7 Zellen in der ersten Reihe (d. H. A1: G1) jedes Arbeitsblatts in dem Zusammenfassungsblatt verbinden. Es wird so viele Zeilen wie Tabellen geben. Aber ich weiß nicht, ob du das wirklich willst.

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

Dies war einfach und hilfreich. Ich könnte dies anpassen, um für die Verbindung zu verschiedenen Zellen zu arbeiten, was möglicherweise zu einem ineffizient langen Code führt, aber es erzeugt die gewünschten Ergebnisse. –

+0

Froh, zu helfen. Wenn ich Ihren Beitrag richtig interpretiere, können Sie den obigen Code mit 'CurrSheet.Cells (MyRow, MyCol) .Value =" = '"& TheOtherSheets.Name &"'! " & TheOtherSheets.Cells (7, MyCol + 6) .Address' (Dies verschiebt den Ursprung von A1 nach G7). Aber ich bin mir nicht sicher, ob du das willst. – CMArg

Verwandte Themen