2011-09-08 4 views
3

사용자 입력을 변수에 저장하는 InputBox가 있습니다. 사용자가 입력하는 입력은 셀 번호입니다.사용자가 VBA를 사용하여 Excel InputBox에 대한 입력으로 셀을 클릭하게하십시오.

예를 들어, 입력 상자가 나타나서 사용자에게 "어디서 시작 하시겠습니까?"라고 묻습니다. 그런 다음 사용자는 A4로 입력하거나 시작하려는 셀을 입력합니다.

제 질문은 사용자가 실제로 입력하는 대신 A4 셀을 클릭 할 수있게하는 방법이 있습니까? 사전에 어떤 도움

감사

업데이트 : 그래서, 기본적으로 우리가 수평에 걸쳐 전치 데이터의 긴 목록을 가지고있다. 우리는이 목록이 수평 적으로 서로 겹치기를 원합니다. 이것이 바로이 코드가하는 일입니다.

모든 것이 잘 작동했지만 사용자가 입력란에 셀 번호를 수동으로 입력해야합니다. 입력 상자는 사용자에게 자르기를 시작할 위치를 묻고 두 번째 상자는 붙여 넣기를 시작할 위치를 묻습니다. 그 입력 값을 문자열 변수에 저장하면 모든 것이 매력처럼 작동합니다.

그 이후로 실제로 행 번호를 확인하기가 어려울 수 있으므로 사용자가 셀을 실제로 클릭 할 수 있기를 바랍니다. 아래 코드는 사용자가 셀을 클릭 할 때 사용하려고하는 변경 사항을 반영하여 업데이트됩니다. Application.InputBox 메서드를 추가하고 변수에 대한 내 선언을 Range로 변경했습니다.

나는 한 번에 하나씩 프로그램을 밟아서 무슨 일이 일어나고 있는지를 알게되었고, 이것이 내가 발견 한 것입니다. 이전에 사용자가 B4에서 시작하여 A16에 붙여 넣기를 원할 경우 B (B4 : B15)의 데이터 범위를 선택하고 자르고 A16에 붙여 넣습니다. 그런 다음 코드가있는 방식으로 B4 사용자 입력 지점으로 돌아가서 for 루프를 사용하여 x 변수를 증가 시키면 오른쪽으로 다음 열로 오프셋됩니다. 그래서 C 럼 (C4 : C15)을 절단하고 A28 (xldown 사용)에 붙여 넣기 등의 작업을 반복합니다.

내가 현재 코드를 밟았을 때 무슨 일이 일어나는지는 범위 변수에 기록 된 값이 표시되지 않는다는 것입니다. B4 : B15를 자르고 A16에 붙여 넣기의 첫 번째 단계는 수행하지만 다음 루프를 실행하려면 B4에서 다시 시작하고 오프셋하는 대신 A16에서 시작한 다음 오프셋합니다. 사용자가 시작 지점으로 선택한 B4로 돌아가서 오프셋해야합니다.

죄송합니다. 긴 설명을 위해,하지만이 상황을 정리하는 데 도움이되기를 바랍니다. Application.InputBox

사용

현재 코드

Dim x As Integer Dim strColumnStart As Range Dim strColumnEnd As Range On Error Resume Next Application.DisplayAlerts = False Set strColumnStart = Application.InputBox("What cell would you like to start at?", "Starting position","Please include column letter and cell number", Type:=8) On Error GoTo 0 Set strColumnEnd = Application.InputBox("Where would you like to paste the cells to?", "Pasting position", "Please include column letter and cell number", Type:=8) On Error GoTo 0 Application.DisplayAlerts = True If strColumnStart = "What cell would you like to start at?" Or _ strColumnEnd = "Please include column letter and cell number" Then Exit Sub Else For x = 0 To strColumnStart.CurrentRegion.Columns.Count strColumnStart.Select ActiveCell.Offset(0, x).Select If ActiveCell.Value = Empty Then GoTo Message Else Range(Selection, Selection.End(xlDown)).Select Selection.Cut strColumnEnd.Select ActiveCell.Offset(-2, 0).Select ActiveCell.End(xlDown).Select ActiveCell.Offset(1, 0).Select ActiveSheet.Paste strColumnStart.Select End If Next x End If Message: MsgBox ("Finished") strColumnEnd.Select ActiveSheet.Columns(ActiveCell.Column).EntireColumn.AutoFit Application.CutCopyMode = False End Sub 

답변

6

에서 : OP의 요구 사항을 업데이트 http://www.ozgrid.com/VBA/inputbox.htm

Sub RangeDataType() 

    Dim rRange As Range 

    On Error Resume Next 

     Application.DisplayAlerts = False 

      Set rRange = Application.InputBox(Prompt:= _ 
       "Please select a range with your Mouse to be bolded.", _ 
        Title:="SPECIFY RANGE", Type:=8) 

    On Error GoTo 0 

     Application.DisplayAlerts = True 

     If rRange Is Nothing Then 
      Exit Sub 
     Else 
      rRange.Font.Bold = True 
     End If 
End Sub 

:

Sub Test2() 

    Dim x As Integer 
    Dim rngColumnStart As Range 
    Dim rngColumnEnd As Range 
    Dim rngCopy As Range 
    Dim numRows As Long, numCols As Long 


    On Error Resume Next 
    Set rngColumnStart = Application.InputBox(_ 
      "Select the cell you'd like to start at", _ 
      "Select starting position", , Type:=8) 

    If rngColumnStart Is Nothing Then Exit Sub 

    Set rngColumnEnd = Application.InputBox(_ 
      "Select where you'd like to paste the cells to", _ 
      "Select Pasting position", , Type:=8) 

    On Error GoTo 0 

    If rngColumnEnd Is Nothing Then Exit Sub 

    Set rngColumnEnd = rngColumnEnd.Cells(1) 'in case >1 cell was selected 

    Set rngCopy = rngColumnStart.CurrentRegion 
    numRows = rngCopy.Rows.Count 
    numCols = rngCopy.Columns.Count 

    For x = 1 To numCols 
     rngCopy.Columns(x).Copy _ 
       rngColumnEnd.Offset((x - 1) * numRows, 0) 
    Next x 

    rngCopy.ClearContents 

    MsgBox ("Finished") 
    rngColumnEnd.EntireColumn.AutoFit 
    Application.CutCopyMode = False 

End Sub 
+0

좋아, 그것이 어느 정도 작동 있도록. 그러나 A4 대신 셀을 선택하면 A $ 4 $가 입력되어 루프를 실행하고 셀 참조를 가질 수 없습니다. – Leon

+1

게시 한 코드는 예제 일뿐입니다. 사용을 위해 문제를 수정하는 경우 문제가있는 실제 코드를 게시해야합니다. –

+0

'x = 0 인 경우 strColumnStart.ActiveCell.Offset (0, x) .Select - ActiveCell.Value = 비어있는 경우 - GoTo 메시지 - Else 범위 (Selection, Selection.End (xlDown)). strColumnEnd.Select - ActiveCell.Offset (-2, 0) .Select - ActiveCell.End (xlDown) .Select - ActiveCell.Offset (1, 0) .Select - ActiveSheet.Paste - strColumnStart.Select - 다음 경우 x' – Leon

관련 문제