2017-01-10 1 views
1

excel VBA를 통해 Text(E2,"MM/DD/YYYY") 수식을 적용하려고했습니다. 여러 시트를 사용하고 셀 대상과 셀 참조가 고정되어 있지 않습니다. 그러므로 나는 완벽하게 작동하는 Cell 대상에 대해 Input-box 메서드를 사용했으며 inputbox 메서드를 통해 수식에서 셀 참조를 수동으로 선택하거나 변경하려고했습니다. 예. A2 셀에 위 공식을 쓰면 타겟 셀은 E2입니다. 셀 선택은 inputbox를 통해 이루어져야합니다.입력 상자 방법을 사용한 수식에 대한 설명

초기 계획은 inputbox로 두 가지를 모두 선택하는 것이었지만 초보자 일 뿐이므로 계획을 변경하고 코드를 다시 작성했습니다. 그러나 입력 상자에서 수식 범위를 편집하는 동안 코드에 문제가있는 것 같고 때로는 내 iputs를 고려하지 않습니다. 내가 텍스트 (E2,"MM/DD/YYYY")을 말한다면 그것은 (현재 따라 텍스트 (D2 또는 무언가, "MM/DD/YYYY ')

Option Explicit 

Sub FinalTxtDte() 

Dim Rng As range 
Dim LastRow As Long 
Dim Frmla As String 
Dim DestRng As range 

On Error Resume Next ' if the user presses "Cancel" 

Set Rng = Application.InputBox("Select a Cell which needs to be converted in Date format.", "Range Selection", Type:=8) 

Err.Clear 

On Error GoTo 0 

If Not Rng Is Nothing Then 

    Frmla = "=TEXT(" & Rng.Address("False", "False") & ",""MM/DD/YYYY"")" 

    On Error Resume Next ' if the user presses "Cancel" 

    Set DestRng = Application.InputBox("Select a Cell where you would like to get a Converted Date.", "Range Selection", Type:=8) 

    Err.Clear 

    On Error GoTo 0 

    If Not DestRng Is Nothing Then 

     DestRng.Formula = Frmla 

    LastRow = Rng.End(xlDown).Row 
    DestRng.Select 
    range(Selection, Selection.Offset(LastRow - Rng.Row, 0)).Select 
    Selection.FillDown 
    range(Selection, Selection.Offset(LastRow - Rng.Row, 0)).Value _ 
    = range(Selection, Selection.Offset(LastRow - Rng.Row, 0)).Value 

    End If 

    End If 

End Sub 
+0

'r [0] c [1]'은 선택을 1 씩 상쇄합니다.'r [0] c [0]'사용 – cyboashu

+0

On Error 행을 주석 처리하고 어떤 일이 발생하는지 봅니다. 아마 RNG가 = "아닌 것보다 아무것도 아닌지 여부를 확인해야한다고 생각합니다. – SJR

답변

0

코드는 아래 셀과 수식 대상을 선택하기 위해 2 개 InputBox ES를 사용하게됩니다를 선택 귀하의 게시물 requaet에 1 셀에 대한).

두 번째 InputBox을 수정하여 수식의 대상 범위를 선택했습니다.

당신은이 On Error Resume Next (나중에 On Error GoTo 0) 경우 사용자가에서 InputBox에서 "Cancel" 옵션을 선택 유지해야합니다.

코드

Option Explicit 

Sub TextDateFormula() 

Dim Rng As Range 
Dim LastRow As Long 
Dim Frmla As String, Txt As String 
Dim DestRng As Range 

On Error Resume Next ' if the user presses "Cancel" 
Set Rng = Application.InputBox("Select a cell.", "Range Selection", Type:=8) 
Err.Clear 
On Error GoTo 0 

If Not Rng Is Nothing Then  
    Frmla = "=TEXT(" & Rng.Address(True, True) & ",""MM/DD/YYYY"")" 

    On Error Resume Next ' if the user presses "Cancel" 
    Set DestRng = Application.InputBox("Select a range to add Decimal Hours.", "Range Selection", Type:=8) 
    Err.Clear 
    On Error GoTo 0 

    If Not DestRng Is Nothing Then 
     DestRng.Formula = Frmla 
    End If   
End If 

End Sub 

편집 1 :

Frmla = "=TEXT(" & rng.Address(False, False) & ",""MM/DD/YYYY"")" 

당신이 필요합니다 : 수식 아래의 코드 라인을 절대 주소을 수정하지 않는 위하여 Address("Row Absolute", "Column Absolute") 뒤에 대괄호 안의 섹션을 수정하십시오. 따라서 열과 행 설정을 수정하십시오. 필요에 따라

+0

도와 주셔서 감사합니다. 귀하의 코드에 몇 가지 추가 작업을 추가하고 원래 게시물을 수정, 나는 그것을 확인하시기 바랍니다 싶었어요. 작업은 고정 된 참조로 수식을 복사하는 것입니다. 나는 잘못된 결과를 얻고있다. 이 점에 대해 질문이 있으면 알려주십시오. – Rosh

+0

좋습니다, 코드가 절대적인 의미 외에 잘 작동합니까? 상대 참조를 원하면 아래로 끌 수 있습니까? –

+0

for draggin 내가 코딩 한 줄을 몇 줄 추가 했으므로 매크로가 자동으로 처리해야합니다. – Rosh