当前位置:编程学习 > VB >>

我想写一个vb修改单元格行高和列宽(用CM计算的)的小程序


Option Explicit
Private Sub cmd1_Click()
Dim xlsxapp As Excel.Application
Dim xlsxbook As Excel.Workbook
Dim xlsxsheet As Excel.Worksheet
Dim sheetname, excelpath As String
Dim rowheight, columnwidth As Single '申明b为单精度
Set xlsxapp = CreateObject("Excel.Application") '创建EXCEL对象
xlsxapp.Visible = False '设置EXCEL对象可见(或不可见)
sheetname = txt3.Text
excelpath = txt4.Text
Debug.Print excelpath
Debug.Print sheetname
Set xlsxbook = xlsxapp.Workbooks.Open(excelpath) '打开已经存在的EXCEL工件簿文件,打开的excel必须与应用程序一个文件夹
Set xlsxsheet = xlsxbook.Worksheets(sheetname)
xlsxbook.Worksheets(sheetname).Activate
MsgBox "请选择需要改变列宽行高的交叉单元格"
If txt1.Text <> "" Then
  rowheight = CSng(txt1.Text) '把text1.text的数值转换为单精度数并赋值给rowheight
  rowheight = rowheight * 28.45
  xlsxbook.xlsxsheet.Rows(ActiveCell).rowheight = rowheight
End If
If txt2.Text <> "" Then
   columnwidth = CSng(txt2.Text)
   columnwidth = columnwidth * 83.8 / 1.9
  xlsxbook.xlsxsheet.Rows(ActiveCell).columnwidth = columnwidth
End If
Set xlsxbook = Nothing
Set xlsxsheet = Nothing
xlsxapp.Quit
End Sub
Private Sub txt4_Click()
CommonDialog1.Action = 1
CommonDialog1.Filter = "EXCEL(*.xlsx)|(*.xlsx)"
txt4.Text = CommonDialog1.FileName
End Sub

其中总是xlsxbook.xlsxsheet.Rows(ActiveCell).columnwidth = columnwidth这句代码有错误,求指导,新人! --------------------编程问答-------------------- 我用窗体获得文件的路径名和工作表名称!vb能不能自动获得一打开excel表的路径和激活的工作表名称?
另外,vb与vba语法有哪些不一样啊! --------------------编程问答-------------------- 你的 ActiveCell 没有赋值吧!

引用 1 楼 u012394283 的回复:
我用窗体获得文件的路径名和工作表名称!vb能不能自动获得一打开excel表的路径和激活的工作表名称?
另外,vb与vba语法有哪些不一样啊!

看样子,你的代码是引用了 Office对象库的。
引用了之后,写起来两者基本上没区别了。
--------------------编程问答--------------------
引用 1 楼 u012394283 的回复:
............vb能不能自动获得一打开excel表的路径和激活的工作表名称?
另外,vb与vba语法有哪些不一样啊!

创建对象,然后用 Excel.Application对象调用 .Workbooks.Open( )
第一个参数传文件的完整路径。
文件在磁盘任意目录中都可以打开,不一定要放在应用程序的目录中。
--------------------编程问答-------------------- 没有复制?activecell不就是活动单元格的意思吗?需要复制?
创建对象,然后用 Excel.Application对象调用 .Workbooks.Open( )
第一个参数传文件的完整路径。
文件在磁盘任意目录中都可以打开,不一定要放在应用程序的目录中。
是啊!我用commondiaog获取文件路径名,再用个字符串传递文件路径名,有更好的方法,求修正代码? --------------------编程问答--------------------
引用 4 楼 u012394283 的回复:
没有复制?activecell不就是活动单元格的意思吗?需要复制?
..........

你要弄清楚: 变量名(标识符)跟“对象”的区别啊……
xlsxbook.xlsxsheet.Rows(ActiveCell).columnwidth = columnwidth
在这儿, ActiveCell 是变量名,而不是对象。
并且, .Rows( ) 需要的参数也不对是对象。
xlsxbook.xlsxsheet.Rows( ) 的“返回结果”才是一个 对象(引用)!

你打开工作簿的方法,在一般情况下,基本上就是那样用了,也谈不上什么“更好的方法”。

顺便说下的是,你的 Private Sub txt4_Click() 内的语句,第1行与第2行要互换一下位置。
要不然,你目前的第2行就是多余的了。
--------------------编程问答-------------------- 我只是看到你的注释中写着“打开已经存在的EXCEL工件簿文件,打开的excel必须与应用程序一个文件夹”

才跟你说一下, .Open( )那儿传文档的完整路径,随便放哪都行,不用“必须与应用程序一个文件夹”。
--------------------编程问答--------------------
引用
其中总是xlsxbook.xlsxsheet.Rows(ActiveCell).columnwidth = columnwidth这句代码有错误,求指导,新人!


可能是以下几方面的问题:
1、既然已经对xlsxsheet赋值了,就不要用“定语”了。直接使用xlsxsheet.rows(....)
2、Rows方法与columnwidth不匹配。Row==>Rowheight   Columns==>columnwidth
3、如果代码不是在excel环境中,应该是不能直接使用ActiveCell的,而应该是xlsxapp.ActiveCell
补充:VB ,  VBA
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,