返回列表 上一主題 發帖

[發問] 兩個獨立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
爬文找了很久..只找到很多雷同上面一段..
還請大大指點一下….
001.png
2019-3-12 11:38
002.png
2019-3-12 11:38
003.png
2019-3-12 11:38

本帖最後由 zheng211016 於 2019-3-12 22:53 編輯

第1 : 請你先看清楚你的問題很多矛盾到底是要在C.xlsm運算還是B.xlsm?  p.s 我用b.xlsm
第2 : 大於5的值並沒有5  p.s 篩選必須有個標題 所以我貼在A2做篩選
第3 : 結果要貼到A.xlsm 工作表1的哪裡? p.s 我貼A.xlsm 的 D1

下圖檔案位置請自行更改

1.jpg
2019-3-12 22:51


VBA控制EXCEL.rar (21.49 KB)

TOP

回復 2# zheng211016

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

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

TOP

回復 1# 502243

    參考一下這裡也許有幫助:
    http://forum.twbts.com/viewthrea ... a=pageD1&page=2

TOP

回復 4# Scott090

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

TOP

回復 5# 502243


         澄清確認一下:
        Sub newexcel() 這一段程序碼是寫在 Excel2Application.C.xlsm
         叫入 Excel1Application.A.xlsm,然後要到 A.xlsm 執行在A.xlsm 裡面的程式碼( 如按鈕在 A 工作表),
        用 A 的 程式碼 把 A 的資料拿到 C 工作表去處理、處理完的資料拿回 A。
         流程回到 C.xlsm 把 A.xlsm 關閉。
         A、C  是2個獨立的物件。

         是這樣嗎?

TOP

回復 6# Scott090

剛好相反耶…相關的流程圖如新圖所示….
005.png
2019-3-13 10:36
006.png
2019-3-13 10:36

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

回復 7# 502243


    所以版主的訴求是  A  專案程式碼 呼叫 C 專案內的 程式 碼?
     可以參考 本論壇:
            http://forum.twbts.com/thread-5960-1-1.html
                         如何用巨集呼叫巨集
                         呼叫不同專案的程序   Run "123.XLS!A01.MAIN"

     或,其他網址
               https://samlifebox.blogspot.com/2015/02/macro-macro.html
                         Excel 之 macro 呼叫 macro

       A、C 是不同的Excel.Application物件,改一改也許可行

TOP

本帖最後由 GBKEE 於 2019-3-13 14:15 編輯

回復 7# 502243
試試看
  1. '****A.xlsm 裡面
  2. '**物件類別模組 Class1 的程式碼
  3. Option Explicit
  4. Public WithEvents App  As Application
  5. Property Set T_APP(p As Application)
  6.     Set App = p     '物件類別 導入物件
  7.     App.Visible = True
  8. End Property
複製代碼
  1. 'A.xlsm
  2. '一般 Module1 的程式碼
  3. Option Explicit
  4. Public xApp As New Class1
  5. Public Ap As Object
  6. Private Sub Ex_開始()
  7.     Set Ap = New Application
  8.     Set xApp.T_APP = Ap
  9.     Ap.Workbooks.Open (ThisWorkbook.Path & "\C.XLSM")
  10.                       '** 請修正為正確檔案名稱***
  11. End Sub
  12. Sub Ex_newexcel()
  13.     Dim AR As Variant, Rng As Range, E As Range
  14.     With ThisWorkbook.Sheets(1)  '指名A檔下
  15.         Set Rng = .Range("A1", .Range("A1").End(xlDown))
  16.     End With
  17.     AR = Rng.Value  'A檔下的數值
  18.     Set Rng = Ap.Workbooks(1).Sheets(1).Range("A1") '指名C檔下
  19.     Rng.EntireColumn = ""
  20.     Set Rng = Rng.Resize(UBound(AR))
  21.     Rng.Value = AR  'A檔下的數值貼在B檔上
  22.     AR = ""           'AR 清空
  23.     For Each E In Rng
  24.         '大於5 寫上D欄的值
  25.         If E > 5 Then AR = AR & "," & E.Range("d1")
  26.     Next
  27.     Set Rng = ThisWorkbook.Sheets(1).Range("C:C")   '
  28.     Rng = ""
  29.     If AR <> "" Then
  30.         AR = Split(Mid(AR, 2), ",")
  31.         Rng(1).Resize(UBound(AR)) = Application.WorksheetFunction.Transpose(AR)
  32.         'B檔-->'大於5 寫上D欄的值 **寫在A檔C欄
  33.     End If
  34. End Sub

  35. Private Sub Ex_結束()
  36.     Ap.Workbooks(1).Close False
  37.     xApp.App.Visible = False
  38. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

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

        靜思自在 : 吃苦了苦、苦盡廿來,享福了福、福盡悲來。
返回列表 上一主題