我已经打开了excel的test.xlsx文件. 目的是想让VBS macro 更新其中的一个CELL, 比如 cells(2,2)
Set objExcel = GetObject("", "Excel.Application") -- okay 可以定义application, 但workbook却遇到问题
我不想用workbooks.add 或workbook.open 因为我必须用"已经"打开的一个固定的workbook (test.xlsx),不想用一个新的workbook.
我试过active workbook, this workbook, work activate (看下面例子) 但都出现错误. 请帮助一下!
谢谢
' Workbooks(sfname).Sheets("Sheets1").Activate
' objExcel.Application.Workbooks(sfname).Activate()
' set wkb = objExcel.Excel.Workbooks(1)
' objExcel.ActiveWorkbook.Sheets(1).Select
' objExcel.ActiveWorkbook.Activesheet
' Set wkb = objExcel.Workbooks(1)
Set wkb = Workbooks(1).Worksheets(1)
' wkb.Activate
' Set wks = wkb.ActiveSheet
' objExcel.Visible = True
' wks.Activate
' set wkbname = ActiveWorkbook.Name
' objExcel.Workbooks(sfname).Activate
' activeworkbook.sheets(1).select()
worksheets("Sheet1").Activate
'set xlBook = objExcel.WorkBooks.Open(filename)
'set xlSht = objExcel.activesheet
' objExcel.WorksSheets( "Sheet1" ).Activate
' Dim wkb As Workbook
' set wkb = objExcel.Workbooks(1)
objExcel.Visible = True
' set objExcel.Workbooks(1).Sheets(1).Cells(2,2).Value = 100
' Set wkb = objExcel.Application.Workbooks(1)
' wkb.Activate
' objExcel.WorkBooks.Add
实际上我想做的就是每当海龟系统发出信号时,让金字塔在“已经”打开的excel文件中如何写入一个简单的“1”字。关键是excel文件必须打开,因为别的程序需要用它。
谢谢
VBA技术问题比较复杂,不可能马上就能给出你答案,我们正在跟踪解决你的问题,请耐心等待
Public MyXL
Sub APPLICATION_VBAStart()
Call Application.SetTimer(10, 500)
GetExcelFile("D:\XXXXX.xls") '打开指定的excel文件xxxxx.xls
End Sub
'打开某个excel文件
Sub GetExcelFile(sFileName)
'此过程暂停使用,替代过程为:GetExcel
Dim sWinName '窗口名
Dim iPos
'测试 Microsoft Excel 的副本是否在运行。
On Error Resume Next '延迟错误捕获。
'不带第一个参数调用 Getobject 函数将
'返回对该应用程序的实例的引用。
'如果该应用程序不在运行,则会产生错误。
Set MyXL = GetObject(, "Excel.Application")
If Err.Number <> 0 Then
Set MyXL = CreateObject("Excel.Application")
End if
'将对象变量设为对要看的文件的引用。
Set MyXL = GetObject(sFileName)
iPos = InStrRev(sFileName, "\", -1, vbTextCompare)
sWinName = Mid(sFileName, iPos + 1, Len(sFileName) - iPos - 4)
'设置其 Application 属性,显示 Microsoft Excel。
'然后使用 MyXL 对象引用的 Windows 集合
'显示包含该文件的实际窗口。
MyXL.Application.Visible = True
MyXL.Application.ScreenUpdating = True
MyXL.Parent.Windows(1).Activate
MyXl.Application.Sheets(1).Visible=true
End Sub
'关闭Excel
Sub CloseExcel()
On Error Resume Next
MyXL.Application.DisplayAlerts = False
'MyXL.Application.Save
MyXL.Application.Quit
' Set MyXL = Nothing '释放对该应用程序
End Sub
Sub Application_Timer(ID)
on error resume next
application.MsgOut "正在导出行情..."
Set Report1 = marketdata.GetReportData("IF00","ZJ")
MyXL.Application.activesheet.Range("C1") = report1.label
MyXL.Application.activesheet.Range("D1") = report1.BuyPrice1
End Sub

非常感谢你的回复, 我刚刚试过,但它说该excel文件已经打开了被锁住。
strSheet = "Sheet1"
filename = "C:\Users\Public\test2.xlsx"
sfname = "test2.xlsx"
Set objExcel = GetObject("", "Excel.Application")
Set objExcel = GetObject(filename)
objExcel.Application.Visible = True
objExcel.Application.ScreenUpdating = True
objExcel.Parent.Windows(1).Activate
objExcel.Application.Sheets(1).Visible=true
objExcel.Cells(2, 2) = "1"
谢谢
你好好看getExcelFile那个过程,你修改了,变成每次都打开文件,当然就会出现你上面的错误了,应该是判断有没有打开那个文件,有,就直接定位到该文件,没有才打开。
也罢,我直接给你做好吧,你自己在d:\建立一个excel文件test.xlsx,这个肯定会吧,然后导入这个项目文件,运行就看到结果了。
[此贴子已经被作者于2014/6/14 21:17:47编辑过]
谢谢你的程序,直接写出程序反映你对用户的认真负责的态度,多谢!!!
我导入了你的vbs文件,同时打开我的test.xlsx,和打开金字塔IF价格但还是看到一个新的标有”excel“名字的excel文件,原来的test.xlxs还是没有被更新,新的excel也只是灰色的界面看不到任何cells。
请看我的屏幕截图。多谢

此主题相关图片如下:截图20140616120913446.jpg