2016-06-29 3 views
0

이 게시물에는 실제로 두 가지 질문이 있습니다. 미리 감사드립니다.통합 문서 선택 및 찾기/바꾸기

첫 번째 문제는 Excel에서 "(날짜) -Usage"라는 Excel 통합 문서를 선택할 수 없다는 것입니다. 여기서 (날짜)는 매일 변경됩니다.

두 번째 문제는 .Replace 개체가 나를주고 Run-Time error '438': Object doesn't support this property method입니다. 누군가 제발 저를보고 실수를 저에게 해줄 수 있습니까? 다시 감사합니다!

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

'Replace' 메서드는 워크 시트가 아닌 범위에서 작동한다고 생각합니다. – Brian

+0

이제 답을 얻었으니 (** 예를 들어!), ** ** 읽고 쓰고, 구현하는 것이 좋습니다. ('.Select' 사용을 피하십시오.) (http://stackoverflow.com/questions/10714251/how-to- 엑셀 - 베타 - 매크로를 사용하지 마십시오). 코드가 더 강력 해지고 오류가 발생하지 않게되며 데이터로 직접 작업하는 방법을 알려줍니다. 이렇게하면 매크로가 더 빠르게 실행될 수 있습니다. – BruceWayne

답변

1

당신은 지금 당신이이 - 사용법 (DATES)처럼 시트을 찾을 싶다고하는 식 다음

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

고맙습니다. 그것은 완벽하게 효과가있었습니다! – Mukul215

+0

괜찮습니다! 그것이 효과가 있다면 내 대답을 인정 표시하십시오. – Kyle

0

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

을 변경해야 하지만 통합 문서를보고 있습니다.

은 다음과 같이 그것을 시도 : 은 (편집)

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

MSDN에 Accoriding : Replace는 범위의 방법이다. 그래서 그 대신이의

:

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

이 시도 :

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

건배.

+0

'ws.Cells.Replace ... '를 의미합니까? 나는'ActiveSheet'에서 멀리 떨어져서 변수를 사용합니다. – BruceWayne

+0

미안하지만 나는 Workbook을 의미했다. – Mukul215

+0

작동하려면 Foreach를 종료해야합니다. 다른 시트가 Date-Usage 시트 다음에 오는 경우 해당 시트를 사용하려고합니다. 의견을 반영하여 의견을 수정하겠습니다. –

0

변경이 줄 당신은 모든 Select 방법이 필요하지 않습니다이 라인

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

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

.