返回目录:excel表格制作
不打开文件是不可能获取内容的,这个要求相当于有人说麻知烦你不进入我家、把我客厅的手机道给我拿来。
另外,读一个不断增加的巨大文件的末尾部分,这个想法不太科学,效率很差,会给你的内系统带来巨大的压力。建议稍微改进一下,修改写文件的程序,生成的结果数据除了不断添加到一个长文件末尾,同时把最新数据的最后一行容不断覆盖写入一个小文件。
打开一个Excel文件,鼠标右击下面的工作表(如sheet1)。选择“查看代码”,就可以打开VBA编辑界面。
选择如下图所示的下拉菜单,选择“worksheet”。
选择如下图所示的下拉菜单,选择对应的触发模式。这里我们选择BeforeDoubleClick,意思就是说:在本工作表鼠标双击(之前),将触发下面的代码程序。(activate意思是说:在sheet表被选取的时候,就触发;Change意思是说:在这个模式下,只要sheet(工作表)发生变化,就将触发;Before Right Click是指在鼠标右击之前触发;SelectionChange是指在鼠标焦点发生变化时,触发。)
选择完成后,我们会看到下面出现了两条代码;这俩条代码其实是在声明一个函数。
将鼠标放置在这两行代码之间,我们写上执行语句:
Sheet1.Cells(1, 3) = Sheet1.Cells(1, 1) + Sheet1.Cells(1, 2)
其中:sheet1.cells(1,3)就是指第一行第三列的这个单元格;Sheet1.Cells(1, 1)就是指第一行第一列的这个单元格;Sheet1.Cells(1, 2)就是指第一行第二列e799bee5baa6e4b893e5b19e365的单元格。执行语句的意思是:将cells(1,1)和cells(1,2)的值相加,并赋值给cells(1,3)
注意的是:写语句的时候,输入法一定要是输入字母的模式。要不然你的语句会报错。
然后点击保存,回到Excel的原始界面。在cells(1,1)和cells(1,2)中输入两个数值。(楼主输入的是:125895和78954)
注意看:现在的cells(1,3)数值是空的。
在sheet1的工作表中,双击你的鼠标。你会发现,cells(1,3)的值变成了cells(1,1)和cells(1,2)的和。(204849=125895+78954)
8
总结:其实VBA主要是触发和指定单元格。
1.触发的原理其实很简单,大家可以选择不同的触发模式,试一下就知道是怎么回事了。
2.至于怎么指定到单元格,大家可以看看cells语句和Range语句。
补充说明: VBA不需要过于复杂的VB语句。你只需要知道VB怎么写怎加减乘除,怎么使用IF语句,就可以满足大部分的需求了。
最后希望大家能够驾驭VBA,顺便送大家一句话:
眼见为虚,耳听为虚,只有运行才是硬道理。
别忘了点赞哦,亲,嘿嘿。
用ExecuteExcel4Macro从未打开的Excel工作簿中读取数据(转载)
从另外一个未打开的Excel文件中读取数据的函数
下面这个函数调用XLM宏从未打开的工作簿中读取数据.
*注意: 该函e799bee5baa6e997aee7ad94e4b893e5b19e335数不能用于公式.
GetValue函数,需要以下四个变量
path: 未打开的Excel文件的路径 (e.g., "d:\test")
file: 文件名(e.g., "test.xls")
sheet: 工作表的名称 (e.g., "Sheet1")
ref: 引用的单元格 (e.g., "C4")
'*********函数如下
Private Function GetValue(path, file, sheet, ref)
' 从未打开的Excel文件中检索数据
Dim arg As String
' 确保该文件存在
If Right(path, 1) <> "\" Then path = path & "\"
If Dir(path & file) = "" Then
GetValue = "File Not Found"
Exit Function
End If
' 创建变量
arg = "'" & path & "[" & file & "]" & sheet & "'!" & _
Range(ref).Range("A1").Address(, , xlR1C1)
' 执行XLM 宏
GetValue = ExecuteExcel4Macro(arg)
End Function
使用该函数:
将该语句复制到VBA的模块中,然后,在适当的语句中调用该函数. 下面的例子显示D:\test 下的文件test.xls 的Sheet1中的单元格”A1”的内容.
Sub TestGetValue()
p = "d:\test"
f = "test.xls"
s = "Sheet1"
a = "A1"
MsgBox GetValue(p, f, s, a)
End Sub
下面还有一个例子.这个语句从一个未打开的文件中读取1200个数值(100行12列),并将结果填到当前工作表中.
Sub TestGetValue2()
p = "d:\test "
f = "test.xls"
s = "Sheet1"
Application.ScreenUpdating = False
For r = 1 To 100
For c = 1 To 12
a = Cells(r, c).Address
Cells(r, c) = GetValue(p, f, s, a)
Next c
Next r
Application.ScreenUpdating = True
End Sub
说明: 如果工作簿处于隐藏状态,或者工作表是图表工作表,将会报错.
只能给你个来几个参考,当然还有其他方源法,希望能够帮到你 望采纳
getobject函数 本质是知打开的,只是看不道到窗口
Dim wb as workbook
set wb = getobject(具体路径+文件)
with wb
.............(operation on wb)
end with
wb.close false
set wb=nothing