szuki 发表于 2009-8-14 19:46:00

[求助]如何点击一按钮获取excel中的内容?

<p>我是想点按钮,弹出打开excel文件对话框,选择我要选取的xls文件,读取特定的内容。</p><p>但是打开excel文件对话框 和 如何引用这个选取的xls文件不是很会,谁来帮忙指点下</p><p>用 Set ExcelApp = Excel.Application.Dialogs.Item(xlDialogOpen).Show 好像出错。。&nbsp;&nbsp;&nbsp; - -!</p><p></p>

StartMe 发表于 2009-8-14 23:53:00

<p>用GetObject就可以获取选择的文件source_file</p><p>Set SourceFile = getObject(source_file)</p><p>sourceFile 定义为 new workbook</p><p>sourceFile.sheets(cc$).Range("a1")就可以获取文件source_file中电子表为cc$中的a1单元格的数据。</p>

szuki 发表于 2009-8-15 12:13:00

<p>帮忙看看,这个第一次允许还马马虎虎,第二次允许就报错</p><p>我的最终需要是将 ComboBox_BTNK&nbsp; 等下拉框取 excel里对应的值,程序中需要打开excel以获得内容,能否不打开excel文件获取信息?</p><p></p><p>Private Sub CMD_InputExcelData_Click()</p><p>Dim ExcelPath As Variant, ExcelName As String, m As Integer<br/>Dim ExcelApp As Excel.Application<br/>Dim ExcelSheet As Excel.Worksheet</p><p>On Error GoTo Err_Control</p><p><font color="#ff0000">ExcelPath = Excel.Application.GetOpenFilename("Excel Files (*.xls), *.xlsx")&nbsp;&nbsp;&nbsp; '获取打开文件全路径<br/></font>If ExcelPath = False Then Exit Sub&nbsp; '未选择文件时退出</p><p>For m = Len(ExcelPath) To 1 Step -1<br/>&nbsp;&nbsp;&nbsp; If Mid(ExcelPath, m, 1) = "\" Then Exit For<br/>Next m</p><p>ExcelName = Right(ExcelPath, Len(ExcelPath) - m)</p><p><font color="#ff0000">Set ExcelApp = CreateObject("excel.application")</font><br/>ExcelApp.Visible = True</p><p>ExcelApp.Workbooks.Open (ExcelPath)<br/>Set ExcelSheet = ExcelApp.Workbooks(ExcelName).Sheets(1)&nbsp; '指定excel中唯一的一个sheet</p><p>Dim FCATs As Variant, Fcodes As String<br/>Dim FcatSearch As Range, i As Integer</p><p>FCATs = Array("BTNK", "CDHR", "COMM", "EVLT", "FRPR", "HRTZ")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#d52b2b">&nbsp; '这个缩略了,实际有好几十个</font></p><p>For i = LBound(FCATs) To UBound(FCATs)<br/>&nbsp;&nbsp;&nbsp; Set FcatSearch = ExcelSheet.Range("B:B").Find(FCATs(i), , , xlWhole)<br/>&nbsp;&nbsp;&nbsp; Fcodes = "ComboBox_" &amp; FCATs(i)<br/>&nbsp;&nbsp;&nbsp; Names.Add Name:=Fcodes, RefersTo:="=" &amp; FcatSearch.Offset(, 1).Address&nbsp;&nbsp;&nbsp; '命名excel名称以方便调用&nbsp;&nbsp;&nbsp; '这个还有其他更方便的调用方法吗?通过名称好像比较偏门。<br/>Next i</p><p>ComboBox_BTNK.Value = Names("ComboBox_BTNK").RefersToRange.Value<br/>ComboBox_CDHR.Value = Names("ComboBox_CDHR").RefersToRange.Value<br/>ComboBox_COMM.Value = Names("ComboBox_COMM").RefersToRange.Value<br/>ComboBox_EVLT.Value = Names("ComboBox_EVLT").RefersToRange.Value<br/>ComboBox_FRPR.Value = Names("ComboBox_FRPR").RefersToRange.Value<br/>ComboBox_HRTZ.Value = Names("ComboBox_HRTZ").RefersToRange.Value</p><p></p><p>ExcelApp.ActiveWorkbook.Close SaveChanges:=False<br/>ExcelApp.Quit</p><p>Set ExcelApp = Nothing</p><p>Exit Sub<br/>Err_Control:<br/>&nbsp; Debug.Print Err.Number<br/>&nbsp; MsgBox Err.Description</p><p>End Sub</p>

StartMe 发表于 2009-8-15 21:34:00

<p>用获取的ExcelPath进行对对象的引用</p><p>Dim SourceFile As New Workbook&nbsp;&nbsp;&nbsp;&nbsp;<br/>Set SourceFile = GetObject(ExcelPath)<br/>Set ExcelSheet = SourceFile.Sheets(1)&nbsp; '引用第一个工作表</p><p>然后对B列遍历,ExcelSheet.Range("B"&amp;n).Value读,返回需要列的对应值ExcelSheet.Range("XXX"&amp;n).Value,储存。在下拉框里增加响应值。</p>

szuki 发表于 2009-8-15 22:03:00

本帖最后由 作者 于 2009-8-16 0:44:19 编辑 <br /><br /> <p>Set SourceFile = GetObject(ExcelPath)<br/>Set ExcelSheet = SourceFile.Sheets(1)&nbsp; '指定唯一sheet</p><p>。。。</p><p>。。。</p><p>SourceFile.Close SaveChanges:=False<br/></p><p>最后 怎么引用excel程序的退出?&nbsp; </p>

StartMe 发表于 2009-8-16 20:23:00

<p>sourcefile.close<br/>消去对象的引用set sourcefile = nothing</p><p>其实你最好别用<font color="#000000">Excel的GetOpenFilename,没发现弹出个打开文件的对话框都很慢么?用Vb本身的打开文件。</font></p>

szuki 发表于 2009-8-16 22:09:00

StartMe发表于2009-8-16 20:23:00static/image/common/back.gifsourcefile.close消去对象的引用set sourcefile = nothing其实你最好别用Excel的GetOpenFilename,没发现弹出个打开文件的对话框都很慢么?用Vb本身的打开文件。

<p>怎么用vb本身的?</p>

szuki 发表于 2009-11-23 12:47:00

szuki发表于2009-8-16 22:09:00static/image/common/back.gif怎么用vb本身的?

<p></p><p>好几个月了,继续求问。</p>

wuyunpeng888 发表于 2009-11-23 20:31:00

用commondialog控件
页: [1]
查看完整版本: [求助]如何点击一按钮获取excel中的内容?