2013-04-17 2 views
0

같은 스프레드 시트의 다른 Excel 탭 (예 : =Data!D11)에서 해당 값의 대부분을 참조하는 스프레드 시트가있는 필드 값을 참조하는 값으로 업데이트합니다 .매크로 (VB 코드)를 사용하여 Excel 시트의 모든 참조 된 필드 새로 고침

이전에 선택한 행의 하드 코딩 된 필드를 포함하는 업데이트 할 행 번호를 입력 할 수있는 팝업 상자를 제공하는 다음 VB MACRO 코드를 작성했지만 모든 필드를 업데이트하려는 경우 어떻게 할 수 있습니까? 어떤 열과 행을 업데이트해야합니까? 기본적으로 사용자가 요청할 경우 페이지에서 참조되는 모든 필드를 업데이트 할 수있는 매크로 VB 코드가 필요합니다.

Excel이 그 자체를 업데이트하지 않는 이유가 다소 혼란 스럽지만이 자동화는 표시 할 필드를 실제로 "새로 고치는"방법이없는 한 스프레드 시트 내의 모든 참조 된 필드를 간단히 매크로를 업데이트하는 데 도움이됩니다. 새로운 가치?

Sub UpdateFormulas() 

    Dim LRowNumber As Long 

    LRowNumber = InputBox("Please enter the row number to update the formulas.") 

    Sheets("Form").Select 

    'All following code will copy a formula into the destination if the source 
    'has a value. If the source does not have a value, it will copy a blank to 
    'the destination. 

    'Item #1 
    Range("F7").Select 
    If IsEmpty(Range("Data!A" & LRowNumber).Value) Then 
     ActiveCell.Value = "" 
    Else 
     ActiveCell.Formula = "=Data!A" & LRowNumber 
    End If 

    'Item #2 
    Range("F9").Select 
    If IsEmpty(Range("Data!B" & LRowNumber).Value) Then 
     ActiveCell.Value = "" 
    Else 
     ActiveCell.Formula = "=Data!B" & LRowNumber 
    End If 

    'Item #3 
    Range("J10").Select 
    If IsEmpty(Range("Data!C" & LRowNumber).Value) Then 
     ActiveCell.Value = "" 
    Else 
     ActiveCell.Formula = "=Data!C" & LRowNumber 
    End If 

    'Item #4 
    Range("H11").Select 
    If IsEmpty(Range("Data!D" & LRowNumber).Value) Then 
     ActiveCell.Value = "" 
    Else 
     ActiveCell.Formula = "=Data!D" & LRowNumber 
    End If 

    'Item #5 
    Range("D11").Select 
    If IsEmpty(Range("Data!E" & LRowNumber).Value) Then 
     ActiveCell.Value = "" 
    Else 
     ActiveCell.Formula = "=Data!E" & LRowNumber 
    End If 

    'Reposition back on item #1 
    Range("F7").Select 

    MsgBox ("The formulas were successfully updated to row " & LRowNumber & ".") 

End Sub 

아니면 피벗 테이블을 허용해야합니까?

답변

1

그냥 반복하십시오.

Sub UpdateFormulas() 

Dim LRowNumber As Long 
Dim FRowNumber as Long 
Dim r as Long 

FRowNumber = InputBox("Please enter the first row number to update the formulas.") 
LRowNumber = InputBox("Please enter the last row number to update the formulas.") 

Sheets("Form").Select 

For r = FRowNumber to LRowNumber 

     'Item #1 
     With Range("F7") 
     If IsEmpty(Range("Data!A" & r).Value) Then 
      .Value = "" 
     Else 
      .Formula = "=Data!A" & r 
     End If 
     End With 

     'Item #2 
     With Range("F9") 
     If IsEmpty(Range("Data!B" & r).Value) Then 
      .Value = "" 
     Else 
      .Formula = "=Data!B" & r 
     End If 
     End With 

     'Item #3 
     With Range("J10") 
     If IsEmpty(Range("Data!C" & r).Value) Then 
      .Value = "" 
     Else 
      .Formula = "=Data!C" & r 
     End If 
     End With 

     'Item #4 
     With Range("H11") 
     If IsEmpty(Range("Data!D" & r).Value) Then 
      .Value = "" 
     Else 
      .Formula = "=Data!D" & r 
     End If 
     End With 

     'Item #5 
     With Range("D11") 
     If IsEmpty(Range("Data!E" & r).Value) Then 
      .Value = "" 
     Else 
      .Formula = "=Data!E" & r 
     End If 
     End With 

Next 

    MsgBox ("The formulas were successfully updated to rows " & _ 
     FRowNumber & " to " & LRowNumber & ".") 


End Sub 

당신이 입력 상자에 의존하지 않으려면

, 당신은 동적으로 FRowNumberLRowNumber 변수를 설정할 수 있습니다. 같은 뭔가 :

FRowNumber = ActiveSheet.UsedRange.Rows(1).Row 
LRowNumber = ActiveSheet.UsedRange.Rows.Count 
+0

감사 데이비드, 필자가 "를하지 않고 다음"을 받고 있지만 오류를 컴파일, 내가 마지막'With' 종료 문을 잊었다 ... 그 생각 ... –

+0

다시 시도처럼 보인다 나던. 나는 당신이 설명하는 오류를 유발할 것이라고 생각합니다. 또한 Item # 5 ('LRowNumber'를'r'로 바꾸는 것을 잊어 버렸습니다.)에서 또 다른 개정판을 만들었습니다. 그래도 문제가 발생하면 알려주세요. –

+0

굉장한 그 일하는, 그 우스운 방법 VBA 컴파일 오류는 1 개의 것을 말할 수있다. 그러나 완전히 다른 무엇인가 의미한다. 범위를 제거하고 값을 참조한 선택한 행과 열만 업데이트 할 수 있습니까? 범위에있는 필드가 비어 있지만 지정되지 않은 다른 필드가 업데이트되고있는 것으로 보입니다. –