VB程序员博客

VB程序开发

例如:将1.jpg,2.jpg,3.jpg,4.jpg;1.mp3,2.mp3,3.mp3,4.mp3这8个文件合并成一个文件test.hb(“hb”是自创的后缀名),合并之后又可以编一个程序打开test.hb,并在程序中依次读取出原来的8个文件,但test.hb不改变,请问具体应该如何实现?直接用资源文件就可以了

其实用mdb文件保存就是了,不用搞那么复杂:)谢谢,合并是可以的,但有一个问题:文件拆分之后是不是又还原成原来的几个文件了?我想要的效果是在编写的程序中拆分并读取原文件,但合并后的文件(test.hb)不改变,各位再帮帮忙啊!<
<
"(如果把mdb后缀名改成新格式太牵强)"
改mdb后缀名没问题,新格式就有问题了:)


例如:将1.jpg,2.jpg,3.jpg,4.jpg;1.mp3,2.mp3,3.mp3,4.mp3这8个文件合并成一个文件test.hb(“hb”是自创的后缀名),合并之后又可以编一个程序打开test.hb,并在程序中依次读取出原来的8个文件,但test.hb不改变,请问具体应该如何实现?直接用资源文件就可以了

其实用mdb文件保存就是了,不用搞那么复杂:)谢谢,合并是可以的,但有一个问题:文件拆分之后是不是又还原成原来的几个文件了?我想要的效果是在编写的程序中拆分并读取原文件,但合并后的文件(test.hb)不改变,各位再帮帮忙啊!<
<
"(如果把mdb后缀名改成新格式太牵强)"
改mdb后缀名没问题,新格式就有问题了:)


例如:将1.jpg,2.jpg,3.jpg,4.jpg;1.mp3,2.mp3,3.mp3,4.mp3这8个文件合并成一个文件test.hb(“hb”是自创的后缀名),合并之后又可以编一个程序打开test.hb,并在程序中依次读取出原来的8个文件,但test.hb不改变,请问具体应该如何实现?直接用资源文件就可以了

其实用mdb文件保存就是了,不用搞那么复杂:)谢谢,合并是可以的,但有一个问题:文件拆分之后是不是又还原成原来的几个文件了?我想要的效果是在编写的程序中拆分并读取原文件,但合并后的文件(test.hb)不改变,各位再帮帮忙啊!<
<
"(如果把mdb后缀名改成新格式太牵强)"
改mdb后缀名没问题,新格式就有问题了:)


假如现在cells(1,1)和cells(1,2)两个单元格是合并的,值是“AAA”,请问我怎么样通过VBA从对象cells(1,2)里得到“AAA”?只能从cells(1,1)里得到“AAA”

cells(1,2)没有意义循环读取,因为合并后的单元格,默认为第一个单元格有数值,即“AAA”,循环读取(1,i),如果为空,泽(1,i)=(1,i-1).意思就是合并后只有最前面的单元格有“AAA”,通过循环,为空的就去前面的值,不为空就不去。=IF(A2="",A1,A2)如果是表格里面操作,可以这样输入公式拉下去即可

4楼 

正解


假如现在cells(1,1)和cells(1,2)两个单元格是合并的,值是“AAA”,请问我怎么样通过VBA从对象cells(1,2)里得到“AAA”?只能从cells(1,1)里得到“AAA”

cells(1,2)没有意义循环读取,因为合并后的单元格,默认为第一个单元格有数值,即“AAA”,循环读取(1,i),如果为空,泽(1,i)=(1,i-1).意思就是合并后只有最前面的单元格有“AAA”,通过循环,为空的就去前面的值,不为空就不去。=IF(A2="",A1,A2)如果是表格里面操作,可以这样输入公式拉下去即可

4楼 

正解


假如现在cells(1,1)和cells(1,2)两个单元格是合并的,值是“AAA”,请问我怎么样通过VBA从对象cells(1,2)里得到“AAA”?只能从cells(1,1)里得到“AAA”

cells(1,2)没有意义循环读取,因为合并后的单元格,默认为第一个单元格有数值,即“AAA”,循环读取(1,i),如果为空,泽(1,i)=(1,i-1).意思就是合并后只有最前面的单元格有“AAA”,通过循环,为空的就去前面的值,不为空就不去。=IF(A2="",A1,A2)如果是表格里面操作,可以这样输入公式拉下去即可

4楼 

正解


我有两张Excel做成的透视表,我想用VB写一个程序,来合并这两张透视表,使这两张表中的数据合二为一,并另存为一个新的Excel文件,请问该怎么弄,谢谢!

<

<


问题:使用合并单元格操作后,Excel进程不能释放;造成在连续进行多次生成报表操作时,只有第一个报表能够生成,后面的报表由于Excel进程不能释放的原因而不能生成;只有完全退出程序才能正常释放Excel进程。

在网上搜了N久,看了N多帖子,自己实验了N次(N>40),终于解决了问题,有感于解决该问题的艰辛,特发此帖。

这个问题的本质是如何使用正确Excel.Range方法

实例:

    Set xlsApp = CreateObject("Excel.Application")

    Set xlsBook = xlsApp.Workbooks.Add

    Set xlsSheet = xlsBook.Worksheets(1)

================================================================================================

重点:

错误的写法

    xlsSheet.Range(Cells(xlsiRow - RepRs.RecordCount, 1), Cells(xlsiRow - 1, 1)).Merge '合并县区单元格

    xlsSheet.Range(Cells(xlsiRow, 1), Cells(xlsiRow, 2)).Merge '合并合计单元格

正确的写法:

    xlsSheet.Range(xlsSheet.Cells(xlsiRow - RepRs.RecordCount, 1), xlsSheet.Cells(xlsiRow - 1, 1)).Merge '合并县区单元格

    xlsSheet.Range(xlsSheet.Cells(xlsiRow, 1), xlsSheet.Cells(xlsiRow, 2)).Merge '合并合计单元格

  红色带下划线部分(即Excel工作表对象实例),一定要写;否则,就会造成Excel进程不能被释放

================================================================================================

’  释放Excel进程

    xlsBook.Close

    xlsApp.Quit

    Set xlsSheet = Nothing

    Set xlsBook = Nothing

    Set xlsApp = Nothing


信息:
两个数据库:A.mdb和B.mdb,都带有密码(123),都有3个表,且表的结构完全一样!
目的:将两个数据库中相同的表添加到A.mdb中,重复记录不添加。
请问怎么使用VB+ADO实现?

insert  into  [;database=a.mdb].c  select  *  from  c不能用,因为存在密码!

insert  into  [;database=a.mdb;pwd=123].c  select  *  from  c

现在是按照1楼的朋友做的!
但是当数据量很大的时候就会花费过多的时间!
我试试2楼朋友的SQL,OK了马上给分!

2楼朋友OK了,运行通过!
分马上给!

另外在接着问一个问题!
比如说这个表只有一个字段(姓名),且添加了无重复的索引!将另外一个数据库中的表合并过来,如果存在重复记录,使用这个SQL将不能成功运行,目前是通过.AddNew方法的。那么能不能通过SQL来解决呢?

try:

insert into  [;database=a.mdb;pwd=123].c
select * from c
where 姓名 not in (select 姓名 from [;database=a.mdb;pwd=123].c)


目的:合并第5列(表格共12行)
代码:
            MSFlexGrid1.MergeCells = 3
            For i = 1 To MSFlexGrid1.Row
                  If i <= 12 Then MSFlexGrid1.MergeCol(5) = True
            Next

合并不了,大家看看什么问题,谢谢!

引用 1 楼 of123 的回复:

必要条件是这些单元格的内容相同。

第5列是合计,我想把真个列合并然后填入合计值,思路没问题吧?

1 把第 5 列的所有单元格都填上合计值
2 设置

    .MergeCells = flexMergeFree(或 .MergeCells = flexMergeRestrictColumns)
    .MergeCol(5) = True

MergeCells 属性
返回或设置一个值,决定包含相同内容的单元是否应该跨越多行或多列分组在一个单个单元中

引用 3 楼 of123 的回复:

1 把第 5 列的所有单元格都填上合计值
2 设置

    .MergeCells = flexMergeFree(或 .MergeCells = flexMergeRestrictColumns)
    .MergeCol(5) = True

用你的方法解决了,谢谢!