VB如何调整excel表格行高和列宽

用ActiveSheet.PageSetup.PaperSize = xlPaperA4设置了页面大小为A4纸大小,用类似Selection.ColumnWidth = 25,这样设置4列刚好为A4纸宽,但因与A4纸的宽单位毫米不一致,一台电脑设好了换了电脑就可能不一样了,如这里的25要换成什么样的表达式才能通用ColumnWidth =?

限制了列宽,行高(RowHeight)也限制下。

还没验证是否可行,要不你试试:

Columns("A:D").AutoFit

‘AutoFit 可以根据内容调整最合适的列宽。

这可能还不够,字体大小也得控制下。

追问

说了其它代码我已写好了,包括字体大小,页面大小为A4纸,居中等等 ,现在只是设置行高和列宽,要把这部分设置为A4纸一样大,打印出来要刚好一满张A4纸,解决不了

追答

没具体代码也不好进行补充,一些想法:

    行、列值固定

    页边距固定(参考:pagesetup

    设置打印区域 (ActiveSheet.PageSetup.PrintArea ="$A$1:$D$30")

    禁止缩放(.PageSetup.Zoom = false)

    打印是允许缩放的(全部打在一张纸上,代码不知道怎么写.....)

你需要做一个debug的部分,打印相关的值(比如行高、列宽、页边距等等),在其他电脑上运行代码之后得到这些值,以便做出比较,哪些变了,哪些没变,哪些设置无效,就好控制了。

追问

我现在的问题是:
用ActiveSheet.PageSetup.PaperSize = xlPaperA4
设置了页面大小为A4纸大小,如何在VB代码里提取出这个页面的长和宽,其它不用管,只要知道怎么表示这个长和宽了什么都可以解决了
长=?
宽=?

追答

宽=行高*行数,长=列宽*列数。A4纸的长和宽全球都一样(百度下)注意单位换算。

换电脑之后不一致可能的原因:
1. 页边距不统一
2. 因分辨率导致的页面缩放
3. 字体、字号异常。

求宽高那里如果有不一样的单元格就不能那么算了,换成求所选区域的宽度和高度比较恰当。

追问

你还是没懂我的意思啊,字体字号都不影响的,不管,页边距都设的0,因为A4纸的大小为210mm*297mm,但VB表示宽高时由于单位不同,分辨率不同,打印机DPI不同,导致换电脑了就变了,就是不知道这个单位应该如何处理才能通用?
ActiveSheet.PageSetup.PaperSize=xlPaperA4设置了页面大小为A4纸大小
如果用a代表A4纸宽度,则a=?不知道如何写,这样写出来的单位就应该是一致的

追答

嗯,这确实不容易弄。

我想,打印条形码只要不发生断列或者跨行就ok的。

打印的时候把宽度锁定为始终缩放为一页纸(条形码不会断为左右两截),然后高度设置为自动,软件会自动处理减少或者增加行数,避免出现跨行打印的情况(条形码断成上下两截)。

我不知道你的条形码是一行一个,还是全部放在一格里面。如果是按行分布,那应该是可以的。

配置的代码:

' 加入到 .PageSetup 中。 这只适合列数较少刚好够一张纸容下的情形。
' 希望你的条形码均在那几列下面,通过新行来新增,而不是另起几列来新增。
.FitToPagesWide = 1 '宽度缩放为一页纸宽度。
.FitToPagesTall = False ' 高度自动

我试了下,这样设置后,没有发生跨行打印的情况,这样可以保证一个条形码不会被撕成上下两半。

追问

行高不同,row() mod 3=1 的行是班级姓名,固定较小行高,row() mod 3=2的行是条形码,固定较大行高,row() mod 3=0的行是数字考号,固定较小行高,每个人占1列3行,40个人就是4列30行,4列总宽度要等于A4纸的宽度,30行的总高度要等于A4纸的总高度,A4纸分成了40个小块不干胶打印纸,所以每块必须准确对位,每次打印有好几千张,只要对好1页后面的会自动对好的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-05-25
其实A4纸的大小是定死的,也就是210*297毫米
你的问题其实可以归结为:
1,单元格行宽与列宽的设定,(按照前边所说的A4大小,调整好单元格 列宽与行高,
行高是RowHeight 列宽是ColumnWidth)
2、打印时的页边距设定,
3、打印时纸张大小的设定(这一步你已做好)
4、打印时是否缩放的设定
------
Worksheets("Sheet1").PageSetup. CenterVertically = True’将工作表设置成垂直居中
Worksheets("Sheet1").PageSetup.CenterHorizontally = True’将工作表设置成水平居中
TopMargin:以磅为单位返回或设置上边距的大小
BottomMargin:以磅为单位返回或设置底端边距的大小
FooterMargin:以磅为单位返回或设置页脚到页面底端的距离
HeaderMargin:以磅为单位返回或设置页面顶端到页眉的距离
RightMargin:以磅为单位返回或设置右边距的大小
LeftMargin:以磅为单位返回或设置左边距的大小
禁止缩放(.PageSetup.Zoom = false)
--------------------追问

谢谢你,你提到的其它设置问题我已全部写好了的,如边距设为0,我现在的问题就是A4纸宽210mm,高297mm,如果4列平均分,则每列分得的宽为210mm/4,因为ColumnWidth的单位不是mm,ColumnWidth=?,不知道这里该如何表示,?处如何写,才能准确地给出ColumnWidth的具体值,且换了字体或是电脑或是打印机都是4列平均分,不会变化


追答

你说的这个,我认为可以这样确定,你现在的电脑用EXCEL调整好,然后用右键看一下行高,在别人电脑上的时候,也调整成这个数字,就可以了,只要调整好,页边距与行高,打印时,是不会移位的,当然了,页边距的6个参数都要设定一下的,还要注意,不能设为0,设成一个适当的数值吧

本回答被提问者采纳
第2个回答  2019-05-24
vba设置excel的行高和列宽,方法很简单 在excel环境,使用录制宏的办法,以OFFICE2010为例,过程如下: 1,使用菜单,【试图】--【宏】--【录制宏】; 2,然后,你随意设置几个行高,和列宽。追问

这方法用过了,适应不了刚好A4纸那么大。我要做到刚好A4纸那么大,打条形码用,错位一点条形码就废了,必须准确对位好,这只是我代码的一部分,其余已写好,我是要导出数据至新工作簿,同时设置新工作簿工作表的行高和列宽,4列30行,刚好A4纸那么大,并且换了电脑换了打印机要不影响。

第3个回答  2019-05-24
首先在VB中引用microsoft excel object library
假设c盘根目录下有个1.xls的文件
…………
问题补充:
你的要求很简单,
一行指令恐怕不行,
最少要三行
代码如下:
Private Sub Form_Load()
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim i As Integer
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("C:\1.xls")
Set xlSheet = xlBook.Worksheets(1) '引用第1张工作表
For i = 3 To 100 Step 3 '想到哪行就把100改成几
xlSheet.Range(Cells(i, 1), Cells(i, 2)).Merge '合并a1:b2单元格
Next
xlSheet.Rows(10).RowHeight = 100 '把第10行高度设为100
xlBook.Save
xlApp.Application.Quit
Set xlApp = Nothing '表忘释放引用
End Sub
运行一下,看看满足要求否。追问

兄弟,答非所问啊,这样会让人讨厌的哦。

第4个回答  2019-05-25
不可能正好是A4大小的,如果行高不一样,有的可能会多几行,有的会少几行。追问

我的是3行一循环,30能调成一页,那60行就是两页,90行就是3页,为什么不行?