2016-10-20 6 views
0

Excel 통합 문서를 워크 시트 링크의 원본으로 사용하도록 강제 설정하려면 어떻게합니까?셀을 대상과 동일한 시트로 이동할 때 셀 참조를 업데이트하는 방법은 무엇입니까?

통합 문서에 Excel 워크 시트를 추가하는 프로세스를 자동화하는 VBA 매크로를 작성하고 있습니다. 워크 시트 (sheet1)는 설문지의 여러 시트 (응답 1, 응답 2, 응답 3) 내에서 특정 (그러나 매우 많은) 응답 만받습니다. 이 결과로 sheet1은 매크로가 실행될 때까지 어디에도 연결되지 않는 많은 셀 참조를 포함합니다.

예를 들어 sheet1의 a1 = "response1 '! b6"입니다. 이것은 #REF를 반환합니다! 매크로가 실행되기 전에 오류가 발생했습니다 (괜찮습니다). 매크로가 실행 된 후 이제 시트 1은 올바른 통합 문서 안에 있고 "= 'response1'! b6"은 이제 유효한 셀 참조입니다.

엑셀은 Sheet1의 셀을 수동으로 클릭하기 전까지는이를 인식하지 못합니다. f2 키를 누른 다음 Enter 키를 누릅니다. 이 작업을 수행하면 셀이 올바르게 채워집니다. 문제는 많은 세포가 있다는 것입니다.

  1. 수식 상자를 선택하고 "Enter"키를 눌러이 과정을 시뮬레이션하는 VBA 매크로를 구성 할 수 있습니까? 유사한 문제를 가진 사람들을 찾는 대부분의 사람들은 자동 계산을 다시 시작하거나 ActiveSheet.Calculate 또는 변형과 같은 f9를 조합하여 문제를 해결했습니다. 이 중 아무 것도 작동하지 않았습니다. 참조가 유효한 위치를 가리키고 있지만 참조와 관련한 것으로 보입니다. 데이터> 편집 링크> 업데이트 값 그러나이 경우 우리가 자신의 소스입니다으로 현재 열려있는 통합 문서를 지정해야 할 것 :

  2. 그렇지 않으면, 그것은 가능한 한 동일한 프로세스를 수행하기 위해 VBA를 사용하는 것입니다. 이 일을 할 수있는 방법이 있습니까?

  3. "Edit Links> Update Values"아래에서 현재 통합 문서를 원본으로 수동 선택하면 ": '[response1] response1! B31"과 같이 셀 참조에서 워크 시트 이름이 이상하게 반복됩니다. 셀 b31이 변경되면 업데이트되지 않으므로 해결책이 아닙니다.

가 여기에 버튼을 누른에서 실행되는 코드입니다 : 어떤 도움

Private Sub CommandButton1_Click() 
'copy worksheet into responses 
Dim CopyFromWbk As Workbook 
Dim CopyToWbk As Workbook 
Dim CopyToWbk As Workbook 

Set CopyFromWbk = Workbooks("Addition.xlsm") 
Set ShToCopy = CopyFromWbk.Worksheets("Sheet1") 
Set CopyToWbk = Workbooks("QuestionnaireResponses.xlsm") 
ShToCopy.Copy After:=CopyToWbk.Sheets(CopyToWbk.Sheets.Count) 

Workbooks("QuestionnaireResponses.xlsm").Activate 

'Put code to update links in here 
ThisWorkbook.UpdateLink Name:="myfilepathgoeshere.QuestionnaireResponses.xlsm", Type:=xlExcelLinks 
'End update links 

감사합니다,이 사람은 머리 아마추어입니다.

+0

이전에이 문제가 발생했습니다. 나는 TextToColumns를 사용하면 그것을 처리 할 것이라고 확신한다. – Kyle

+0

똑똑하고 완벽하게 작동했습니다. 이 문제가있는 다른 사람들을 위해 내가 특별히 한 일은 "For"루프를 만들어 내 워크 시트의 열을 순환 한 다음 각 열에 대해 지정한 매개 변수 만 원본 셀과 동일한 대상인 TextToColumns를 수행하는 것입니다. 대단히 감사합니다 카일! – SaintJeremy

답변

0

@ 카일의 멋진 아이디어. 셀 참조를 업데이트하는 데 문제가있는 사람들은 TextToColumns이 작동합니다. 소스 범위가 비어있는 경우 즉 연결된없는 행동에 문을 건너하는 경우 해당 인스턴스의 경우 사용되는 어떤 기회가 그래서 만약

그러나TextToColumns은 오류를 그립니다.

내 성공 코드는 다음과 같습니다

Dim i As Integer 

For i = 1 To 1004 
'Scans through row 2 from col A onwards 
'If cell is empty, does nothing. 
'If cell is not empty, performs TextToColumns where source range = target range. 
If IsEmpty(Workbooks("QuestionnaireResponses.xlsm").Worksheets_ 
("response1").Cells(2, i)) Then 'Does nothing if the cell is empty. 
Else 
Workbooks("QuestionnaireResponses.xlsm").Worksheets("response1").Cells(2, i).Select 
Selection.TextToColumns Cells(2, i) 'Performs TextToColumns 
End If 

Next 

내 모든 데이터가 같은 긴 행에 있습니다. 위의 내용을 전체 스프레드 시트에 적용하려면 For i = 1Next을 포함하여 을 다른 문자로 바꿔서 For 루프 내에있는 모든 항목을 중첩하십시오.