vb.net 读取excel vb问题

查看: 873|回复: 35
90%的以上的VBA问题,其实根本用不着VBA来解决。。。
阅读权限20
在线时间 小时
能不用写程序,尽量不要写程序。一是写程序并不是像打几个字那么简单;二是自己写的VBA程序,运行效率与Excel内置的公式相比,不可同日而语!
现实工作中,真正需要使用VBA来解决的问题,其实不到10% 。。
阅读权限20
在线时间 小时
能不用手动操作的,我就不会去手动操作,工作都交给代码完成,哪怕是简单的复制粘贴。
阅读权限20
在线时间 小时
能不用手动操作的,我就不会去手动操作,工作都交给代码完成,哪怕是简单的复制粘贴。
像你这种情况,其实索性开发个软件,可能效率更高。
阅读权限100
在线时间 小时
我猜楼主是个函数高手!
阅读权限95
在线时间 小时
& & & & & & & &
像你这种情况,其实索性开发个软件,可能效率更高。
能不坐公交火车飞机就尽可能双腿走路。坐火车要买票,坐飞机要安检。双退走路没那么多文麻烦。
阅读权限20
在线时间 小时
我猜楼主是个函数高手!
其实我更善于编程。。。 早期用得比较多的是Delphi,现在C# .net用得较多。因为VBA是一种脚本语言,程序的执行效率相当低,几万行的循环,特别是引用到工作表单元格的话,可能要十几分钟甚至更长时间才能完成。
阅读权限20
在线时间 小时
本帖最后由 zjgzfs 于
10:30 编辑
能不坐公交火车飞机就尽可能双腿走路。坐火车要买票,坐飞机要安检。双退走路没那么多文麻烦。
呵呵,你理解错了。
尽量不用VBA,不是因为怕编程麻烦,更多的是因为VBA程序的执行效率非常低下,与Excel内置函数无法相比。
滥用VBA,这并不是微软的初衷!&&只有在没有更好的办法的情况下,才应该考虑使用VBA 。
阅读权限10
在线时间 小时
小弟在论坛里学习了一年多excel的技术。对各路大神十分佩服。经过学习各路大神的代码和公式,在工作中开发了不少实用的表格。这次遇到个问题,论坛和百度搜了很久,搜到的内容跟我想的完全不对路子,没能找到相关的解决办法。所以来求助,做回伸手党。
我有个身份证识别仪,识别仪的软件,可以实现CTRL+F9是姓名,F10是身份证号码,F11是家庭住址。
我想利用VBA,实现我点一下&&那个一键录入&&的按钮。将相关数据自动填充到那三个对应的单元格里面。
祝福大家新年快乐,身体健康,万事如意!!!!
好人一生平安!!!!
阅读权限95
在线时间 小时
呵呵,你理解错了。
尽量不用VBA,不是因为怕编程麻烦,更多的是因为VBA程序的执行效率非常低下,与Exce ...
事实上从出行总数量来比较,坐飞机火车的是很少的,90%以上的出行量是双退走出来的。
阅读权限20
在线时间 小时
像你这种情况,其实索性开发个软件,可能效率更高。
主要是做报表,数据源过来之后,一键生成报表,但报表的格式并非一成不变的,VBA修改比较方便。速度又快。
最新热点 /1
三日不读书,面目可憎!是时候下定决心了,当当网书香节大赏读者,ExcelHome编著图书全部参加满200-100活动,抢购时间:即日起至4月23日,莫失良机。
玩命加载中,请稍候
玩命加载中,请稍候
Powered by
本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任! & & 本站特聘法律顾问:徐怀玉律师 李志群律师关于用VBNET访问Excel的问题,新手求助
作者:用户
浏览:541 次
想要访问Excel中名为“转入”的sheet,写了一段往Excel添加数据的程序,总是提示,总是提示“INSERTINTO语句的语法错误”,想请明白的给指点一下,谢谢。PublicClassComeI
问题描述想要访问Excel中名为“转入”的sheet,写了一段往Excel添加数据的程序,总是提示,总是提示“INSERTINTO语句的语法错误”,想请明白的给指点一下,谢谢。PublicClassComeInPublicstrConnAsString="Provider=Microsoft.Jet.OLEDB.4.0;DataSource='"&MainForm.fileName&"';ExtendedProperties=Excel8.0;"PublicComeIn_DSAsNewDataSetPublicComeIN_ADPAsNewOleDb.OleDbDataAdapter("SELECT*FROM[转入$]",strConn)PrivateSubComeIn_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.LoadMe.MdiParent=MainForm'声明ListForm是MainForm的子窗口ComeIN_ADP.AcceptChangesDuringFill=TrueDimcmdBuilder_CIAsOleDb.OleDbCommandBuilder=NewOleDb.OleDbCommandBuilder(ComeIN_ADP)ComeIN_ADP.Fill(ComeIn_DS,"ComeInTable")EndSubPrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton2.ClickMe.Close()EndSubPrivateSubAddComeIn()Dimds_CiAsDataSet=ComeIn_DSDimnewRowAsDataRownewRow=ds_Ci.Tables("ComeInTable").NewRow()newRow("构件名称")=TB_Name.TextnewRow("构件编号")=TB_No.TextnewRow("铆焊日期")=TB_Date.TextnewRow("铆焊班组")=TB_Group.TextnewRow("经办人")=TB_Worker.TextnewRow("构件数量")=TB_Number.TextnewRow("铆焊量统计日期")=TB_TJDate.TextnewRow("铆焊量统计数量")=TB_TJNumber.Textds_Ci.Tables("ComeInTable").Rows.Add(newRow)EndSubPrivateSubSaveToDB()DimupdateDS1AsDataSetTryupdateDS1=ComeIn_DS.GetChangesIfNotupdateDS1IsNothingThenComeIN_ADP.Update(updateDS1,"ComeInTable")ComeIn_DS.AcceptChanges()EndIfCatchexAsExceptionMessageBox.Show(ex.Message.ToString,"更新数据库有错误")EndTryEndSubPrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickAddComeIn()SaveToDB()EndSubEndClass解决方案本帖最后由 wlawei 于
21:38:35 编辑解决方案二:你这里代码并没有“INSERTINTO语句阿解决方案三:看这问题是新手,我也是新手,我不帮你帮谁啊!不过VB操作EXCEL,但是老鸟了,用了6年了!不要把EXCEL当数据库使,这样虽在能用,但效果太差了!不是代码有问题,ExceL受字段格式的影响,做数据库出划率非常高VB.NET引用对象操作Excel才是正道!【项目】→『填写引用』→〖.NET选项卡〗选择[Microsoft.Office.Interop.Excel]以下是一个用OpenFileDialog打开一个EXCEL文件,写文件名以textbox1,并读取工作名称到LISTBOX1的例子ImportsExcel=Microsoft.Office.Interop.Excel''添加EXCEL引用PublicClassForm1PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click'====启动打开文件对话框OpenFileDialog1.FileName=""'OpenFileDialog1.InitialDirectory=Application.StartupPathOpenFileDialog1.Filter="MsExcel文件|*.xls*"OpenFileDialog1.FilterIndex=2OpenFileDialog1.RestoreDirectory=TrueIfOpenFileDialog1.ShowDialog()=DialogResult.OKThenTextBox1.Text=OpenFileDialog1.FileName'====启ExcelDimxlAppAsNewExcel.Application()xlApp.DisplayAlerts=FalseDimxlWorkBookAsExcel.Workbook'创建工作簿对象DimxlWorkSheetAsExcel.Worksheet'创建工作表xlWorkBook=xlApp.Workbooks.Open(TextBox1.Text)ListBox1.Items.Clear()Fori=1ToxlWorkBook.Sheets.CountxlWorkSheet=DirectCast(xlWorkBook.Worksheets(i),Excel.Worksheet)ListBox1.Items.Add(xlWorkSheet.Name)NextListBox1.SelectedIndex=0xlWorkBook.Close()xlApp.Quit()KillExcel(xlApp)xlApp=NothingEndIfEndSubEndClassForm1给单元格赋值代码:xlWorkBook.Worksheets("Sheet1").Range("A5").Value=22保存写入并关闭Excel文件xlWorkBook.savexlWorkBook.close其他的问百度或查帮助!
【云栖快讯】新手小白必看!编程语言系列讲座火爆进行中,与行业资深专家一起学习Python、C++、JavaScript、Java!从入门到进阶&&
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率
40+云计算产品,6个月免费体验
稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一
云服务器9.9元/月,大学必备VB6.0处理Office2007以上版本的Excel数据
  VB6.0刚出来那会儿,Office还是2000版的。
  VB6.0是个好软件,除了打印功能太差,别的都可以,功能也算强大。
  就是因为打印功能不行,VB的打印功能,都是靠连接Excel,用Excel表格实现的。
  VB6.0也是个老实孩子,这么多年本本分分的,也没弄什么升级的猫腻,用的习惯顺手,尽管也有更新更好的同类软件,也没有想过要换,没有必要嚒。
  Office就不一样了,马不停蹄的一路升级,从2000到2003,以后到了2007就变得更不像话了,基本功能还是那些,可是画面变了,操作方式变了,而且后缀名也变了。
  中国人的习惯,用什么都要用最好的,不管功能上需不需要,谁知道呢?万一有用呢?
  所以现在的一般人所用的Office几乎都在2010版以上,据说又有2013版了。
  所以,如果你的电脑至今还用的Office2003,也不能怪人说你Out了。
  如果用户发给你了文件,版本比你用的高,你可能就打不开。你总不能要求用户再给你转存成低版本的吧,你也只能也装一个高版本的。
  因此,VB6.0想连接Excel就变的麻烦起来。
  如果你是自己开发,还好,在自己的电脑上安装office2003,把需要处理的Excel转存为2003的格式。
  如果你是给用户开发软件,那麻烦大了。你要求用户的电脑必须安装office2003,而且还要把必须要处理的Excel转存为2003格式。那有点太矫情了吧,怎么张得开嘴说。
  最近做了一个项目,用户的原始文件是Excel,后缀名xlsm,用VB程序处理数据,加人数据库。
  这种情况,可行的办法是,
  1 电脑上首先安装office2003。
  2 然后安装office2007以上版本,但是一定要选择升级的方式。这样才能保留2003原有的,可以为VB所使用的控件。
  3 将需要处理的Excel文件转存为,后缀名为xls的2003兼容模式。
  现在就可以在VB程序里用最简单的办法连接Excel了。
& & Set MyExcel =
CreateObject("Excel.Application")
& & Set MyBook =
MyExcel.Workbooks.Open(FileName)
&   Set MySheet = MyBook.Sheets(1)
&然后,你就可以自由的读写Excel里各单元的值。
  这种办法用在XP的操作系统上没问题,在更高版本上,就不一定,时好时坏,不知哪里,但是知道肯定是控件的兼容性问题,系统还是要提示你“自动化连接错误“。
  虽然有可行方案,但是向用户提这样的要求,不是要找挨骂吗?而且一旦有了版本冲突的问题,你还要喋喋不休的向用户解释,澄清,说这不是程序的错,是版本兼容问题,以后说不尽的烦恼等着呢。
  如果不值得去换一个更高版本的VB软件,有一个很简单的解决方法。  
  在Excel里面编写一段宏指令程序,把Excel表格,以行为单位,保存成普通顺序文件。
  只要用户的表格的格式固定的,这个程序就可以固定下来。
  程序运行以后,可以在C盘下看见刚才保存的“”abc“”文件。
  OK,处理这个底层的文件系统,是VB的最基本功能,轻车熟路。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。查看: 1252|回复: 9
vba中if ....else问题
请大师帮忙,谢谢
阅读权限20
在线时间 小时
本帖最后由 从兴开始 于
10:51 编辑
& && &&&我用VBA做一个表,目标:键盘输入总箱数后在工作表中依次显示箱号和总箱号。每行只能用三列(否则一张纸打不下了)。& &比如输入& &“ 4&&”&&那么&&A1单元格显示& && &&&1 of&&4& &&&B1单元格显示& & 2 of 4& && &C1单元格 显示& &&&3 of 4
A2单元格显示& && && &4 of&&4& && &其它单元格都为空
1 of&&4 2 of 4
我的代码如下,在这里& &b的值为5& & 而y的值为4& && && && && && &可是我运行的结果是出现了& && &5 of&&4& & 这是不对的,
& && &If b &= y Then& && && && && & '第二列(第X行第二个单元格)的值
& && & Cells(x, 2) = b & & of & & y
& && &&&Else
& && &&&Cells(x, 2) = &&
& && &&&End If
这段代码为什么 不能判断出&&5 &4&&从而执行& &else&&后面的语句& &cells(x,2)=&&
现在的问题是:输入值为&&4,7,11,14,17。。。。。。都在相应的第二列出现& & 5 of 4& & ,& &&&8 of 7& & ,& &12 of 11
全部代码如下
Sub 打印箱号()
Dim x, y, a, b, c, d As Integer
&&y = InputBox(&请输入总数&, &输入总数&)& &&&'输入总箱数
& &d = IIf(Int(y / 3) = y / 3, Int(y / 3), Int(y / 3) + 1)&&'算出行数,每行三列
& & a = 1& && & '赋初值,第一列的初值
&&For x = 1 To d
& && &b = a + 1& &&&'第二列的开头数值等于第一列的开头数值加1
& && &c = b + 1& &&&'第三列的开头数值等于第二列的开头数值加1
& && &Cells(x, 1) = a & & of & & y& &'第一列(第X行第一个单元格)的值
& && &If b &= y Then& && && && && & '第二列(第X行第二个单元格)的值
& && & Cells(x, 2) = b & & of & & y
& && &&&Else
& && &&&Cells(x, 2) = &&
& && &&&End If
& && & If c &= y Then& && && && && &'第三列(第X行第三个单元格)的值
& && &&&Cells(x, 3) = c & & of & & y
& && && & Else
& && && & Cells(x, 3) = &&
& && &&&End If
& &&&a = a + 3
e = MsgBox(&确认打印&, vbYesNo, &提示&)
If e = vbNo Then Exit Sub
'ActiveWindow.SelectedSheets.PrintOut '用打印命令打当前
阅读权限20
在线时间 小时
截图是这样的
(154.08 KB, 下载次数: 0)
09:49 上传
阅读权限50
在线时间 小时
首先,你知道这句:Dim x, y, a, b, c, d As Integer定义的变量分别是什么类型吗?(只有d是integer类型,其他都是Variant)
其次,你知道y = InputBox的返回值是什么类型吗?(string类型)
字符串4和整数4比大小,哪个大哪个小呢?......
改正地方:
在y = InputBox下面加一句
阅读权限20
在线时间 小时
加那一句,问题就解决,非常感谢&&“我是来讨说法的”老师
阅读权限20
在线时间 小时
受到“我是来讨说法的”老师指点的启发,意思到这是声明变量时的问题,只要声明变量时,
Dim x, a, b, c, d As Integer
Dim y as integer& &
就OK了。这样就可以不要& &&&y=cint(y)&&这一句了。
阅读权限10
在线时间 小时
Sub test123()
Dim i%, j%, x%
x = InputBox(&叫块璶ゴ絚计:&, &羆絚计&)
If x & 0 Then
For i = 1 To Int((x + 2) / 3)
&&For j = 1 To 3
&&If ((i - 1) * 3 + j) &= x Then
Cells(i, j) = ((i - 1) * 3 + j) & & of & & x
Cells(i, j) = &&
阅读权限10
在线时间 小时
我的電腦沒有簡體字,內容自己知道就行了。
可以用數組的算法。
阅读权限20
在线时间 小时
Sub test123()
Dim i%, j%, x%
x = InputBox(&叫块璶ゴ絚计:&, &羆絚计&)
谢谢laisw01
这代码简练,明了。利索。
阅读权限20
在线时间 小时
在网上看到的一个关于声明变量的文章。& & 我复制过来了。
一个在VBA中声明变量时经常会犯的错误
|浏览:59|更新: 19:15
下面这行声明语句经常被误读:
Dim Col, Row, Sheet As Integer
许多人认为这样会将每个变量都声明为整型,事实上是错误的。 那正确的理解,以及正确的声明方法是怎样的呢,下面进行介绍。
Office Excel
其实简介中的变量声明语句中Col和 Row是Variant型,因为没有为它们提供数据类型。在VBA中 如果未声明变量的类型,则默认为Variant类型。
如果要将3个变量都声明为整型,则应写为:
Dim Col As Integer, Row As Integer, Sheet As Integer
那Variant型变量是什么呢?
可简单地将Variant型变量分为两类:
1.Variant(使用数字),存储大小为16字节,可以是任何数字值,最大可达Double的范围;
2. Variant(使用字符),存储大小为22字节+字符串长度,与变长字符串有相同的范围,0~约2亿个字符。
按照Variant型变量的介绍,简介中的变量声明也能使程序正常运行,不会出现错误,那为什么一般不这样进行变量声明呢?原因如下:
Variant要比其他的类型占用更多的内存,因为每个Variant都必须在存储数据的同时向VBA传递信息,已告知当前存储的数据类型。当处理Variant类型的数据时,将使用更多的计算机资源。为了处理数值,VBA必须判断所处理的类型,并决定是否需要在类型之间转换。如果应用程序需要最大的处理速度,则应声明变量类型,以使用尽可能少的内存。
上述就是我们在使用VBA过程中,声明变量时经常会犯的其中一个错误,希望能够对大家有所帮助!
阅读权限20
在线时间 小时
使用数据类型的符号来声明变量可以省事明了。
数据类型& && && &符号& && & 说明
Integer& && && &&&%& && && &整形
Long& && && && && & && && && &长整形
Single& && && && && &!& && && &&&单精度浮点型
Double& && && && & #& && && & 双精度浮点型
String& && && && && &$& && && &&&字符型
Currency& && && &&&@& && && & 货币型
最新热点 /1
三日不读书,面目可憎!是时候下定决心了,当当网书香节大赏读者,ExcelHome编著图书全部参加满200-100活动,抢购时间:即日起至4月23日,莫失良机。
玩命加载中,请稍候
玩命加载中,请稍候
Powered by
本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任! & & 本站特聘法律顾问:徐怀玉律师 李志群律师在excel中如何用VB实现以下内容_百度知道
在excel中如何用VB实现以下内容
比如在A1中输入“中国”就会在B2中显示“111”,在A1中输入“美国”就会在B2中显示“1123”?
注:本人是菜鸟,请详细说明,谢谢
我有更好的答案
sub main()if cells(1,&A&).value=&中国& then cells(1,&B&)=&111&if cells(1,&A&).value=&美国& then cells(1,&B&)=&1123&end sub以此为例,在Excel中调用VBA程序的操作步骤如下(Excel2007为例):1.选择”开发工具“选项卡,点击”Visual Basic“(或者用快捷键Alt+F11)2.出现VBA编辑界面,注意看左侧,选择需要运行代码的工作表,此例为Sheet1;双击进入Sheet1相关程序编辑界面3.在程序编辑区域,复制上上述代码4.点击上面的三角号,运行程序5.关闭VBA界面,返回工作表,就可以看到程序运行结果,如下图:6.如果再次运行程序,可以用快捷键Alt+F8(或者步骤1中的”宏“),出现如下图界面,选择要运行的宏,点击执行即可。
歌尔声学工业工程师
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim wkst As Worksheet
Dim content As String
Set wkst = ThisWorkbook.Worksheets(&Sheet1&)
content = wkst.Range(&A1&).Value
Select Case content
Case &中国&:
wkst.Range(&B1&).Value = &111&
Case &美国&:
wkst.Range(&B1&).Value = &222&
End Select
Set wkst = NothingEnd Sub
麻烦详细说明代码写在什么地方,如何才能实现!!谢谢
写在WorkSheet后台代码里面,全部copy过去就好了,上面的代码是针对Sheet1的。
Alt+F11没有找到WorkSheet后台代码啊,求,求,
你右键点Sheet1,然后中文版的选择“查看代码”,因为版的选“View Source”,然后把上面的代码复制进去。我上头说的WorkSheet,不是“WorkSheet”这个名字,而是工作表的后台。建立VBA程序,可以有Module(模块),和非模块。
很遗憾还是没有实现,我太菜了
本回答被提问者采纳
我使用的办法有两种:第一种办法:使用WorkSheet的SelectionChange事件Private Sub Worksheet_SelectionChange(ByVal Target As Range)
此处放置事件处理程序,该事件处理程序之外,设置两个全局变量,记录上一次Range行列号及对应的文本内容,如果上次Range对应的行号是1、列号是1并且单元格内容是“中国”则用程序将B1格的内容设置为“111”,若上次Range对应的行号是1、列号是1并且单元格内容是“美国”则用程序将B1格的内容设置为“1123”。End Sub这种办法需要你了解WorkSheet的事件处理、Range对象的操作及其VBA语言,我以前使用过该技术实现过比较复杂的查表工作。我在一个Access数据表中有一个词典,当在第一列中某一单元格输入一个字符串时,就在SelectionChange事件中,从词典中查找该关键词,找到后,将词典条目对应的内容填入第二列对应的单元格内。不过,可以不使用VB,直接使用Excel的两个函数实现类似的功能,这就是第二种办法。第二种办法:使用match和index函数使用这种你需要额外使用一个sheet作为当作一个词典,假设我们将Sheet2作为词典使用,Sheet1作为输入表格使用。假如我们已经在Sheet2中输入数据如下A1:中国
B1:111A2:美国
B2:1123A3:日本
B3:japanA4:俄罗斯
B4:莫斯科......为了说明清楚,我们在Sheet1中插入一个中间列(辅助列),假设为C列。C2单元格中输入公式:=MATCH(A1,Sheet2!A:A,0)B2单元格中输入公式:=INDEX(Sheet2!B:B,Sheet1!C2,0)这样,你在A1中输入“中国”就会在B2中显示“111&,输入“美国”就会显示“1123”,输入“日本”就会显示“japan&,输入“俄罗斯”就会显示“莫斯科”
死百度、臭百度、笨百度,还不改改自己的错误!
其他1条回答
为您推荐:
其他类似问题
excel的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 vb excel编程实例 的文章

 

随机推荐