2017-02-16 3 views
-1

Ich benutze VBA, um eine Liste von Referenznummern ROID durchlaufen und geben Sie den richtigen vollen Namen (ROIDA) von einer separaten Seite. Die Seite, auf der vollständige Name befindet hat die Referenznummer in der Spalte D und den vollständigen Namen in Spalte AObjektorientierter Fehler - Verweise auf andere Arbeitsblätter?

Sub Main() 
'Set variable types 
    Dim WorksheetA As Excel.Worksheet 
    Dim WorksheetB As Excel.Worksheet 
    Dim ROID As Range, ROIDA As Range 

    Set WorksheetA = ActiveWorkbook.Sheets("WorksheetA") 
    Set WorksheetB = ActiveWorkbook.Sheets("Approval Flows") 

'Replacing ROID #s with full Name 
    'Define range of active requesting offices 
    Set ROID = WorksheetA.Range(Range("A7"), Range("A7").End(xlDown)) 

    'Define range of attention lines and associated ROIDs 
    Set ROIDA = WorksheetB.Range(Range("D7"), Range("D7").End(xlDown)) 

    'Loop through ROIDs and replace with ATTN line 
    For Each ID In ROID 
     Set Match = ROIDA.Find(ID) 
     If Not Match Is Nothing Then 
      ID = Match.Offset(0, -3) 
      End If 
     Next ID 


End Sub 

Wenn ich versuche, um das Skript auszuführen, habe ich einen objektorientierten Fehler von dieser Linie erhalten:

Set ROIDA = WorksheetB.Range(Range("D7"), Range("D7").End(xlDown)) 

Ist dies, weil ich mit mehreren Blättern arbeite? Ich bemühe mich sehr, die Aktivierungs- oder Auswahlfunktionen nicht zu verwenden.

+0

Sind Sie sicher, dass der Fehler nicht "Objekt ** erforderlich **" ist? –

+3

Sie scheinen eine Anzahl nicht deklarierter Variablen zu verwenden. Stellen Sie sicher, dass Sie "Option Explicit" oben im Modul angeben und alle Variablen deklarieren. Dann qualifizieren Sie 'Range' Anrufe. Uneingeschränkter 'Range' Anrufe implizit auf das aktive Blatt verweisen, die auf jeden Fall nicht das, was Sie beabsichtigen, hier zu tun. wollen könnte diesen Code durch [Rubber Inspektionen] (http://rubberduckvba.com/inspections/list) ausführen können, finden Sie eine Reihe von [Implizite actvie Blattbezug] (siehe http://rubberduckvba.com/inspections/Details /ImplicitActiveSheetReferenceInspection) Ergebnisse. –

+3

@ Mat'sMug - das ist ziemlich raffiniert. – SJR

Antwort

3

Ja, wenn A/B beim Ausführen des Makros nicht aktiv sind. Sie müssen alle Bereiche mit Blättern vollständig qualifizieren. Auch besser, am Ende zu gehen und aufzuarbeiten, als nach unten zu gehen, falls du nichts nach A7 hast.

With WorksheetA 
    Set ROID = .Range(.Range("A7"), .Range("A7").End(xlDown)) 
'Or Set ROID = .Range(.Range("A7"), .Range("A" & Rows.count).End(xlup)) 
End With 

'Define range of attention lines and associated ROIDs 
With WorksheetB 
    Set ROIDA = .Range(.Range("D7"), .Range("D7").End(xlDown)) 
End With 
Verwandte Themen