2016-10-11 5 views
1

Excel 파일을 매일 열고 업데이트하고 저장하려고합니다. 파일이 원격 데스크톱의 프로그램에서 데이터를 가져 오는 중이므로 원격 데스크톱에 있습니다. 누구나 원격 데스크톱에 액세스 할 수있는 것은 아니지만 엑셀 파일에 액세스 할 수 있습니다.작업 스케줄러로 매크로를 실행하는 Excel 파일 자동 업데이트

파일이 소프트웨어에서 데이터를 가져 와서 매크로를 실행하여 & 필터를 구성합니다. 매일이 파일을 열어서 매크로를 실행 한 다음 파일을 저장하고 닫으려고합니다. 파일을 열려면 작업 관리자를 얻었지만 매크로를 실행하는 방법은 무엇인지, 그리고 파일을 저장하려면 추가해야 할 사항을 모릅니다.

+0

아마도 작업 관리자에서 파일을 여는 대신 스크립트를 실행하면 스크립트에서 통합 문서를 열고 매크로를 시작할 수 있습니다. – Hrothgar

+0

감사합니다. 나는 그 일이 어떻게 생소하는지 조금 익숙하지 만, 나는 그 일을 조사 할 것이다. 도움이 될만한 조언이 있다면 –

+0

매크로를 실행하는 데 사용하는 vbscript는 이렇게됩니다.서브 ExcelMacroExample() 희미한 xlApp 희미한 xlBook xlApp 설정 = CreateObject를 ("이 Excel.Application") 설정 xlBook = xlApp.Workbooks.Open ("Tables.xls을", 0, false)를 xlapp.visible = TRUE xlApp.Run "UpdateAll" xlapp.activeworkbook.close xlApp.Quit 설정 xlBook = 아무것도 xlApp 설정 = 아무것도 최종 하위 – Hrothgar

답변

0

다음은 Excel 파일을 열고 CSV로 일부 워크 시트를 추출한 다음 종료하는 데 사용하는 PowerShell 스크립트입니다. 도움이되기를 바랍니다.

# 
# Extract worksheets from Excel into CSV files 
# 
$workingDir = Get-Location 
$XL = New-Object -ComObject Excel.Application 
$XL.Visible = $false 
$XL.DisplayAlerts = $false 

$inputFile = $workingDir.ProviderPath + '\Properties.xlsx' 
write-debug $inputFile 

$wb = $XL.Workbooks.Open($inputFile) 

foreach ($ws in $wb.Worksheets) 
{ 
    $outputName = $workingDir.ProviderPath + '\' + $ws.Name + '.csv' 
    write-debug $outputName 

    # 
    # The second argument is XlFileFormat enum. 
    # 6 = xlCSV 
    # 23 = xlCSVWindows 
    # 
    $ws.SaveAs($outputName, 6) 
} 
$XL.Quit() 
1

순수 Excel/VBA에서이 작업을 수행하려는 경우 실제로 명령 줄 매개 변수를 통합 문서로 보낼 수 있습니다. 가장 직접적인 과정은 아닙니다.

통합 문서 개체에 Workbook_Open 이벤트 을 만들면이 이벤트 내의 코드는 Excel을 열 때마다 실행됩니다.

enter image description here

트릭은, 당신이 그것을 말해 조용히 다른 모든 시간을 종료 할 때 그것은 단지 당신의 새로 고침 작업을 수행하는 것입니다.

1 단계 : 이벤트를 만들 : 그것은 마지막 매개 변수가 명령 줄 인수 얻는 경우에 다시

Private Sub Workbook_Open() 
    Dim CmdRaw As Long 
    Dim CmdLine, LastParam As String 
    Dim Params As Variant 

    CmdRaw = GetCommandLine  ' in our example, this will be /e/Refresh 
    CmdLine = CmdToSTr(CmdRaw) 
    Params = Split(CmdLine, "/") 
    LastParam = Params(UBound(Params)) 

    If LastParam = "Refresh" Then 
    Module1.RunAllOfThatAutomationJunk 
    End If 

End Sub 

, 이것은 단지 실제 작업을 할 것 "새로 고침을." 물론 원하는대로 만들 수 있습니다.

이것은 직관적이지 않은 부분입니다.

excel.exe c:\MyLocation\MyFile.xlsm /e/Refresh 

/e Excel로 전송 할 명령을 트리거 무엇이고, 당신은 할 수 있습니다 당신이 작업 관리자에서 통합 문서를 열 때, 당신은 당신의 문서와 함께 명령 줄 매개 변수를 사용하여 Excel 응용 프로그램을 열 필요가 이벤트가이를 어떻게 분석하는지보십시오. 슬래시 사이에 원하는만큼 많은 명령 행 인수를 넣을 수 있습니다. Excel.exe를 실제로 뭔가를 할 수있는 곰 염두에

:

"c:\Program Files (x86)\Microsoft Office\Office14\excel.exe" 

하지만 난 아무것도 생각하고 싶지 않았다.

--EDIT--

이 코드는 이러한 기능을 사용하기 위해 (모듈에) 존재한다. 과거에는 성공하지 않고 통합 문서 VBA 자체에 추가하려고했지만 별도의 모듈/클래스에 있으면 완벽하게 작동하는 것 같습니다.

Declare Function GetCommandLine Lib "kernel32" Alias "GetCommandLineW"() As Long 
Declare Function lstrlenW Lib "kernel32" (ByVal lpString As Long) As Long 
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (MyDest As Any, MySource As Any, ByVal MySize As Long) 

Function CmdToSTr(cmd As Long) As String 
Dim Buffer() As Byte 
Dim StrLen As Long 

    If cmd Then 
     StrLen = lstrlenW(cmd) * 2 
     If StrLen Then 
     ReDim Buffer(0 To (StrLen - 1)) As Byte 
     CopyMemory Buffer(0), ByVal cmd, StrLen 
     CmdToSTr = Buffer 
     End If 
    End If 
End Function 
+0

나는 "있는 CmdLine = CmdToSTr (CmdRaw)"CmdToSTr이 올로 정의하지 않았다 –

+0

죄송합니다. 내 대답은 지금 업데이트 중입니다. – Hambone

+0

그래서 컴파일 오류가 발생합니다 : 개인 하위 통합 문서 Open() Module1.RunAllOfThatAutomationJunk에 관한 메서드 또는 데이터 멤버를 찾을 수 없습니다. 나는 여기서 무엇을해야할지 모르겠습니다. –