返回列表 上一主題 發帖

[發問] 兩個獨立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
爬文找了很久..只找到很多雷同上面一段..
還請大大指點一下….

回復 22# quickfixer

感謝quickfixer大..一語驚醒夢中人..
還在想說怎麼拆分...
現在已經順利將建成物件..和A檔copy到C檔..C檔copy回A檔 ..分成3個副程式框架
剩下再把其餘的副程式加入其中...
調整一些流程步驟..

感謝回應這篇主題的各位前輩點醒...

TOP

Sub readData()

'数据读取
'----------------------------------------------
    Dim dataExcel, Workbook, sheet
    Dim totalRow  As Integer
    Set dataExcel = CreateObject("Excel.Application")
    Set Workbook = dataExcel.Workbooks.Open("E:\要读取数据的源文件.xlsx")
    Set sheet = Workbook.Worksheets(1)     '读取第一个sheet页的数据
    totalRow = sheet.UsedRange.Find(what:="*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row
    For i = 2 To totalRow
         
         Sheets("sheet1").Cells(i, 3) = sheet.Cells(i, 4)
        
    Next i
    Workbook.Close
    MsgBox "读取成功!", vbSystemModal '读取完后弹框提醒
'----------------------------------------------
End Sub

TOP

回復 20# 502243


    dim 改 public,像 gbkee  #16 那像寫,就可以把關閉放到另一個sub
Public app1 As Object, book1 As Excel.Workbook

TOP

回復 17# quickfixer


    謝謝點明了 application.run  --> app1.Run "test"

TOP

本帖最後由 502243 於 2019-3-15 08:43 編輯

回復 18# GBKEE
  1.   '一般 Module 的程式碼
  2. Option Explicit
  3.     Public Ap As Object, Aa As Object
  4.    Sub Ex_開始( )
  5.          '新開2個Excel 程式
  6.          Set Ap = New Application
  7.           Set Aa = New Application
  8.             Stop '開啟工作管理員看看
  9.              Ap.Visible = True
  10.             Stop '開啟工作管理員看看
  11.              Aa.Visible = True
  12.       '  Stop '開啟工作管理員看看         
  13.     End Sub

  14.      Sub Ex_結束( )
  15.           Stop '開啟工作管理員看看
  16.           Ap.Quit
  17.           Stop '開啟工作管理員看看
  18.           Aa.Qui
  19.           Stop '開啟工作管理員看看
  20.     End Sub

  21.     Sub test( )
  22.         Dim app1 As Object, book1 As Excel.Workbook
  23.         Set app1 = CreateObject("Excel.Application")
  24.         app1.Visible = True                 
  25.         app1.Quit
  26.         Set app1 = Nothing
  27.     End Sub
複製代碼
剛試了一下 test可以完全關閉新建立excel.exe  與上面的差異 多了一個set app1=Nothing
所以新建excel物件   建立與關閉不能拆分成兩個副程式?
恩...我在多試幾個看看

TOP

回復 17# quickfixer


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

TOP

回復 16# 502243
    '一般 Module 的程式碼
  1.     Option Explicit
  2.     Public Ap As Object, Aa As Object
  3.    Sub Ex_開始()
  4.          '新開2個Excel 程式
  5.          Set Ap = New Application
  6.         Set Aa = New Application
  7.          Stop '開啟工作管理員看看
  8.         Ap.Visible = True
  9.        Stop '開啟工作管理員看看
  10.         Aa.Visible = True
  11.         Stop '開啟工作管理員看看
  12.          
  13.     End Sub
  14.      Sub Ex_結束()
  15.           Stop '開啟工作管理員看看
  16.           Ap.Quit
  17.           Stop '開啟工作管理員看看
  18.           Aa.Quit
  19.           Stop '開啟工作管理員看看
  20.     End Sub
  21.    
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 quickfixer 於 2019-3-15 04:18 編輯

回復 16# 502243

你要的不是同一個excel開2個檔互傳,而是2個不同excel.exe互傳資料,對嗎?

參考資料來源
https://www.mobile01.com/topicdetail.php?f=511&t=4737630&p=1
(#244f)
我試過工作管理員不會殘存excel.exe
1.xlsm
  1. Sub test()

  2.     Dim app1 As Object, book1 As Excel.Workbook
  3.     Set app1 = CreateObject("Excel.Application")
  4.     Set book1 = app1.Workbooks.Open(ThisWorkbook.Path & "\" & "2.xlsm")
  5.     app1.Visible = True
  6.    
  7.     Dim sourcedata As Range, targetdata As Range, temp() As Variant
  8.     Set sourcedata = Sheets("a").Range("a1:a5")
  9.     Set targetdata = book1.Sheets("b").Range("a1:a5")
  10.     temp = sourcedata
  11.     targetdata.Value = temp
  12.    
  13.     app1.Run "test"
  14.    
  15.     Set sourcedata = book1.Sheets("b").Range("b1:b5")
  16.     Set targetdata = Sheets("a").Range("c1:c5")
  17.     temp = sourcedata
  18.     targetdata.Value = temp
  19.    
  20.     book1.Close SaveChanges:=False
  21.     app1.Quit
  22.     Set app1 = Nothing
  23.     Set book1 = Nothing
  24.    

  25. End Sub
複製代碼
2.xlsm
  1. Sub test()
  2.    
  3.     For i = 1 To 5
  4.         Sheets("b").Cells(i, 2) = Sheets("b").Cells(i, 1) + Rnd()
  5.     Next i
  6.    
  7. End Sub
複製代碼
excel.zip (24.51 KB)

TOP

回復 15# GBKEE

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

TOP

        靜思自在 : 脾氣嘴巴不好,心地再好也不能算是好人。
返回列表 上一主題