2016-06-29 15 views
0

Es gibt zwei Fragen in diesem Post. Vielen Dank im Voraus.Auswählen der Arbeitsmappe und Suchen/Ersetzen

Mein erstes Problem ist, dass ich nicht scheinen kann, Excel zu bekommen, um die Excel-Arbeitsmappe zu wählen, die "(DATES) -Benutzung" genannt wird, wo (DATEN) jeden Tag ändert. Das zweite Problem ist, dass das .Replace Objekt gibt mir und Run-Time error '438': Object doesn't support this property method. Könnte jemand bitte einen Blick darauf werfen und mir sagen, wo ich meine Fehler mache. Danke nochmal!

Sub UsersBySource_Update() 

    ' Create variables 
    Dim ws As Worksheet 
    Dim wb As Workbook 
    Dim unspecified As String 
    Dim organic As String 
    Dim TheString As String, Cohort As Date 

    ' Ask user for cohort date and return an error if invalid date is entered 
    TheString = Application.InputBox("Please Specify The Cohort:") 

    If IsDate(TheString) Then 
     Cohort = DateValue(TheString) 
    Else 
     MsgBox ("Invalid Date") 
    End If 

    ' Set variables 
    unspecified = "[Unspecified]" 
    organic = "Organic" 

    ' Activate the workbook 
    For Each wb In Workbooks 
     If wb.Name Like "*-Usage" Then 
      wb.Activate 
     End If 
    Next 

    ' Find and Replace the unspecified and organic variables in the workbook 
    ActiveSheet.Replace What:=unspecified, Replacement:=organic, LookAt _ 
    :=xlPart, SearchOrder:=xlByRows, MatchCase:=False 

    ' Add Columns and Row to fix formatting to continue 
    Columns("B:E").Insert shift:=xlToRight 
    Range("B2").EntireRow.Insert 

    ' Copy and Paste initial date range to start program 
    Range("A3").Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Selection.Copy 
    Range("B3").Select 
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=True, Transpose:=False 

End Sub 
+0

Ich glaube, die 'Replace' Methode wirkt auf einen Bereich, kein Arbeitsblatt. – Brian

+0

Nun, da du deine Antwort (yay!) Hast, schlage ich ** sehr ** vor, durchzulesen und zu implementieren, [vermeide die Verwendung von '.Select'] (http://stackoverflow.com/questions/10714251/how-to- Vermeiden-Verwenden-Wählen-In-Excel-VBA-Makros). Es macht Ihren Code straffer, weniger fehleranfällig und zeigt Ihnen, wie Sie direkt mit Ihren Daten arbeiten. Dadurch kann Ihr Makro schneller ausgeführt werden. – BruceWayne

Antwort

1

Sie benötigen

ActiveSheet.Replace What:=unspecified, Replacement:=organic, LookAt _ :=xlPart, SearchOrder:=xlByRows, MatchCase:=False 

an folgende

ActiveSheet.Cells.Replace What:=unspecified, Replacement:=organic, LookAt _ :=xlPart, SearchOrder:=xlByRows, MatchCase:=False 
+0

Cool danke! das hat perfekt funktioniert! – Mukul215

+0

Kein Problem! Bitte markieren Sie meine Antwort akzeptiert, wenn es funktioniert hat. – Kyle

0

Jetzt gesagt, Sie zu ändern, dass Sie ein ein Blatt finden möchten, die wie (DATUM) -usage ist, aber Sie suchen in Arbeitsmappen:

Probieren Sie es wie folgt aus: (bearbeitet)

For Each ws In Worksheets 
     If ws.Name Like "*-Usage" Then 
      Exit For 
     End If 
    Next 

auf MSDN accoriding: Replace, ist ein Range-Methode.

Anstatt also diese:

ActiveSheet.Replace What:=unspecified, Replacement:=organic, LookAt _ 
    :=xlPart, SearchOrder:=xlByRows, MatchCase:=False 

Try this:

ws.Cells.Replace What:=unspecified, Replacement:=organic, LookAt _ 
     :=xlPart, SearchOrder:=xlByRows, MatchCase:=False 

Beifall.

+0

Sie meinen 'ws.Cells.Replace ...'? Ich würde mich von 'ActiveSheet' fernhalten und stattdessen eine Variable verwenden. – BruceWayne

+0

Entschuldigung, ich meine Arbeitsmappen. – Mukul215

+0

Sie müssten die Foreach beenden, damit sie funktioniert. Wenn ein anderes Blatt dem Date-Usage-Blatt folgt, würde es versuchen, dieses zu verwenden. Ich werde meinen Kommentar bearbeiten, um das zu reflektieren. –

0

ändern diese Linien

Range("A3").Select 
Range(Selection, Selection.End(xlDown)).Select 
Selection.Copy 
Range("B3").Select 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=True, Transpose:=False 

zu diesen Linien

With ActiveSheet 
    .Range(Range("A3"), Range("A3").End(xlDown)).Copy 
    .Range("B3").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=True 
End With 
Application.CutCopyMode = False 

Sie nicht alle Select Methoden benötigen.

Verwandte Themen