返回列表 上一主題 發帖

[發問] 兩個獨立EXCEL 如何將運算完的資料回傳到主Excel?

[發問] 兩個獨立EXCEL 如何將運算完的資料回傳到主Excel?

各位前輩們大家好,
疑問發生如下:
搭配下圖
1.開始鈕跟停止鈕都在A.xlsm裡..新開啟一個獨立的excel代碼如下..但就沒辦法引用相關新物件excel的屬性與方法

代碼要如何寫才能引用控制excel2.exe呢….

Sub newexcel()
Dim xlapp As Object
Dim xlbook As Object

        Set xlapp = CreateObject("Excel.Application")
       Set xlbook = xlapp.Workbooks.Open("D:\Excel VBA\A.xlsm")

‘這邊能否CALL  副程式?      

        xlapp.Workbooks(“A”).Close SaveChanges:=False ‘
        xlapp.Quit
        
      '  Set xlbook = Nothing
      '  Set xlapp = Nothing
End Sub
爬文找了很久..只找到很多雷同上面一段..
還請大大指點一下….

回復 2# zheng211016

感謝zheng211016大大的指教:
1.運算的確是在C.xlsm....因為如果是在同一層excel1.exe裡面處理,這方面的程式我都寫好了
  難在新開一個excel2.exe裡面處理後資料回傳..與結束鈕在A.xlsm裡..相關的引用語法我鑽研不出來
2.這邊是小弟筆誤..再C.xlsm D欄多打一個5...造成大家的誤會不好意思..
3.這邊我漏打  ..貼在A.xlsm裡面都可以

ps:因為我程式碼挺多的.所以這邊是大概說明一下方向.
還請各位前輩指點一下...

TOP

回復 4# Scott090

感謝前面兩位前輩指點..
這篇我也有注意到....我目前都是鑽研這篇其中得語法..
來繼續撰寫...............只是過程中一直..叮咚叮咚.......
然後還在找相關的文獻...

TOP

回復 6# Scott090

剛好相反耶…相關的流程圖如新圖所示….

A.xlsm 裡面的程式碼應該只會有:
開始鈕
Sub newexcel()
Dim xlapp As Object
        Set xlapp = CreateObject("Excel.Application") '建立一個新的excel程式
        Set xlbook = xlapp.Workbooks.Open("D:\Excel VBA\c.xlsm") '用excel開啟活頁簿
            xlapp.Visible = True 'excel可以看見
   '''''''''' '後面還在撰寫中
         
End Sub

結束鈕
Sub newexcelclose()


C.xlsm裡面的程式碼:
接收A.xlsm裡面資料
處理資料
回傳資料到A

只是運算與回傳的程式碼的部分
我還在構思要寫在哪個裡面比較洽當….

TOP

回復 9# GBKEE

請教GBKEE大大:
剛看了幾個小時在一行一行測試..
有幾個地方不太明白
1.
    For Each E In Rng
            '大於5 寫上D欄的值
            If E > 5 Then AR = AR & "," & E.Range("d1")      <===E.Range("d1")  為何是用E?而不是用Ap.Workbooks("c").Sheets(1)...這段看不大明白
        Next
        
        Set Rng = Ap.Workbooks("1").Sheets(1).Range("C:C")   '
        Rng = ""
        If AR <> "" Then '有資料    <====AR最上面不是已經清空為0了??
            AR = Split(Mid(AR, 2), ",")   '分割      
            Rng(1).Resize(UBound(AR)) = Application.WorksheetFunction.Transpose(AR)
            'B檔-->'大於5 寫上D欄的值 **寫在A檔C欄
        End If


2.跑的時候C.xlsm檔案A欄有複製到值..但D欄還是一樣空空的...而且不會copy回A.xlsm ...C欄
3.另外請問GBKEE大大如果想關閉新開的excel.exe這個物件...當下應該用甚麼指令才行呢?   xApp.App.Quit     ' Ap.Quit      ' Ap.Close <==這幾個我試好像都不行

TOP

回復 8# Scott090
    感謝前輩的回應
類似那樣呼叫但又不大一樣.....差在跨層呼叫
第一條參考我試過.可行
第二條我會在試看看

目前朝Application物件那方面嘗試..也就是.GBKEE大大給的參考下去研究

TOP

回復 12# zheng211016
差在多一個excel.exe的物件控制..就麻煩了點...網路上探討的好像並不多
也或者是我的查詢時關鍵字沒查到..
不過還是感謝各位前輩的指點協助

TOP

假若拿Sub Ex_newexce1()出來修改一下..
只是單純的複製貼上

Sub Ex_newexce2()
     Dim AR As Variant, Rng(1 To 2) As Range, E As Range

      With Workbooks("a").Sheets(1)
          Set Rng(1) = .Range(“A1”, .Range(“A1”).End(xlDown))   ‘同excel.exe 可以成功
          Set Rng(2) = Workbooks(“a”).Sheets(1).Range(“c1”)       ‘A檔A欄copy A檔C欄      
           Rng(1).Copy Rng(2)
      End With
   
End Sub


Sub Ex_newexce3()
     Dim AR As Variant, Rng(1 To 2) As Range, E As Range

      With Workbooks("a").Sheets(1)
          Set Rng(1) = .Range(“A1”, .Range(“A1”).End(xlDown)) ‘不同excel.exe  會失敗
          Set Rng(2) = Ap.Workbooks(“c”).Sheets(1).Range(“c1”) ‘‘A檔A欄copy C檔C欄
           Rng(1).Copy Rng(2)
      End With
   
End Sub

小弟還在思索著錯誤的原因....

TOP

回復 15# GBKEE

感謝GBKEE版主大大的幫助..
    目前按照版大的樣本大略修改了一下..如下附檔 Excel VBA.zip (51.75 KB)
    另外會朝 不同excel.exe  間 的物件 控制關鍵字在下去搜尋相關語句
      Ap.Quit    <==這指令用在excel.exe物件裡面 可以讓表面程式看起來不見  卻會殘存excel.exe
    導致如果強制從  工作管理員關閉的話  再次啟動  Sub Ex_開始( )會產生"462"錯誤   <==錯誤發生的原因很多
   
001.png
   不過給的方向還是幫助很大....很感謝.....(畢竟小弟研究了一個禮拜都找不到方向..心理滴咕著)

TOP

回復 17# quickfixer


    感謝quickfixer大大的資料參考
   的確是兩個不同的excel.exe資料互傳....
    原來是要利用set 加上緩衝區...
   屆時我會參考前輩們的模型基板下去做修改調整.....
   萬分感謝~

TOP

        靜思自在 : 滴水成河。粒米成蘿,勿輕己靈,勿以善小而不為。
返回列表 上一主題