对text文本框的分段操作(会VBA API的朋友也可进来看看)

angelli03 2010-01-05 09:56:15
我直接在vb text文本框里复制一段文本,比如(//后全为注释):
1. aaa asdfafas daf //.后有空格 下同
2. bbb adfsafasdf asdfasfa
3. ccc safdfds asdf a sdaf
...
20. ddd adsfasf
21. eee dsafafas asfsdf
22. fff afsf
...
现在我需要的是,我点一个command按钮 可以将text文本框里的内容变成
aaa
bbb
ccc
...
ddd
part1 //原文本第20个位置 需要加part + 序号(即 到20行数据加一行:part1 ;40行时 加prat2;... 以此类推,并且后面空出一行区分)

eee
fff
...
end//最后加一行end 表示结尾

总的说来就是:每行数据只要开始的'. '到' '(点 空格 到 空格 之间的数据),且没到20行加part序号(序号可以理解为 如果每20个算一页的话 序号即页数) 在最后一行加上end(不管到不到20行)

公司需要这么做 但我这方面不熟悉 只要请教各位了

另外,我可以让他们现在excel中将诸如“aaa” “bbb” 之类的选好 但后面如何加part序号 (如果可以直接在excel中完成 导出到一个文本文件里也可以)我还是不会

上面2种形式(无论是在vb中转换 还是在excel中转换) 都可以 不知哪位高手可以帮忙解决下这类问题 谢谢!

...全文
545 40 打赏 收藏 转发到动态 举报
写回复
用AI写文章
40 条回复
切换为时间正序
请发表友善的回复…
发表回复
aspxlover1 2010-12-15
  • 打赏
  • 举报
回复
用正则表达式最简单 \d+\.\s+(\w+).*
舉杯邀明月 2010-01-09
  • 打赏
  • 举报
回复
有什么问题就在这里说吧。大家一起交流探讨好些。

难道是秘密吗?
舉杯邀明月 2010-01-09
  • 打赏
  • 举报
回复
[Quote=引用 34 楼 angelli03 的回复:]
......................

关于VBA的资料我所知很少 看你对这方面很熟悉 不知可否给些资料学习一下 我自己很难找到相关资料
[/Quote]

在 VBA 方面,我知道的东西,大部分都是从 ms 那儿学来滴…………
感到奇怪吧!
其实很简单:基本的程序设计水平 + ‘录制宏’。

很多时候,要进行什么操作,录个宏来看一下,“取其精华,去其糟粕”,能学到不少的知识!
(录制的宏,垃圾代码很多,但我也佩服 Excel宏 的强大!)


还有,要 VBA 的资料,搜索一下“VBA 手册”,应该不少。
angelli03 2010-01-09
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 patrickkong 的回复:]
msdn还不够好,加句测验
if ubound(strItem) > 1 then

[/Quote]

知道了 加里这句确实可以了 谢谢
结贴 谢谢各位的帮助了
xingmin 2010-01-09
  • 打赏
  • 举报
回复
是不是每个都是最后一行是空白,如果是这样,可以在循环里面减1,不读取最后一行就是。或者设置错误处理。当然比较合理的方法是检查读取的每行数据,如果不是空白就取值,这样可以避免你文件当中任意一行出现空白时的处理。
angelli03 2010-01-09
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 patrickkong 的回复:]
msdn还不够好,加句测验
if ubound(strItem) > 1 then

[/Quote]
msdn 不是不够好 是太好 资料太全不知怎么找 另外完整的msdn中文文档 我好像还真没 呵呵

你说的测验那条语句加哪?测验什么东西?我好给你结果
  • 打赏
  • 举报
回复
msdn还不够好,加句测验
if ubound(strItem) > 1 then
angelli03 2010-01-09
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 chen8013 的回复:]
有什么问题就在这里说吧。大家一起交流探讨好些。

难道是秘密吗?

[/Quote]

额 秘密倒不是 只是和本帖可能无太大关系
关于VBA的资料我所知很少 看你对这方面很熟悉 不知可否给些资料学习一下 我自己很难找到相关资料
angelli03 2010-01-08
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 chen8013 的回复:]
楼主搞清楚没?


其实我的代码,你还可以简单的更改一下。比如(如果每个要处理的文档格式有点差异的话):
界面上增加一个 TextBox ,可以输入起始行号;
增加一个 TextBox ,可以输入导出哪列数据。
等等……。

只要在导出数据时,从相应的 TextBox 中读取输入值就行了。

[/Quote]

有些问题还需私下请教 已PM你了 谢谢
angelli03 2010-01-08
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 stayor 的回复:]
引用 5 楼 of123 的回复:
Dim strLine() As String, strItem() As String
Dim i As Long

strLine = Split(Text1, vbCrLf)
Text1 = ""

For i = 0 ToUbound(strLine)
    strItem = Split(strLine(i), " ")
    Text1 = Text1 &strItem(1) & vbCrLf

    If (i + 1) Mod 20 = 0 Then Text1 = Text1 & "Part" & ((i + 1) / 20 ) & vbCrLf & vbCrlf
Next i

Text1 = Text1 & "End"


引用 25 楼 angelli03 的回复:
引用 22 楼 patrickkong 的回复:
楼主,5楼的代码是正确的,调式不了是因为你的数据不符合。
sugar!


我用的测试数据如下:
1. aaa  asdfafas daf  //.后有空格 下同
2. bbb  adfsafasdf    asdfasfa
3. ccc safdfds asdf a sdaf
4. aaa  asdfafas daf  //.后有空格 下同
5. bbb  adfsafasdf    asdfasfa
6. ccc safdfds asdf a sdaf
7. aaa  asdfafas daf  //.后有空格 下同
8. bbb  adfsafasdf    asdfasfa
9. ccc safdfds asdf a sdaf
10. aaa  asdfafas daf  //.后有空格 下同
11. bbb  adfsafasdf    asdfasfa
12. ccc safdfds asdf a sdaf
13. aaa  asdfafas daf  //.后有空格 下同
14. bbb  adfsafasdf    asdfasfa
15. ccc safdfds asdf a sdaf
16. aaa  asdfafas daf  //.后有空格 下同
17. bbb  adfsafasdf    asdfasfa
18. ccc safdfds asdf a sdaf
19. aaa  asdfafas daf  //.后有空格 下同
20. bbb  adfsafasdf    asdfasfa
21. ccc safdfds asdf a sdaf

提示下标越界
建的调试程序就一个text文本框 和一个command按钮
5楼朋友的代码我无修改的复制command-clink 下有此提示

是代码还需要小修改后使用,还是我什么地方出错了,请指教



提示下标越界,应该是最后一行的问题。
字符串第1次以“回车符”分割后,会分割出22个字符串,而不是21个,最后一个字符串为是"",也就是长度为0的字符串,在for循环中第2次以“空格”分割时,生成的数组维数为-1,所以绿色部分会出错。
[/Quote]

这位仁兄说的不错 不知可有修改办法
stayor 2010-01-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 of123 的回复:]
Dim strLine() As String, strItem() As String
Dim i As Long

strLine = Split(Text1, vbCrLf)
Text1 = ""

For i = 0 To Ubound(strLine)
strItem = Split(strLine(i), " ")
Text1 = Text1 & strItem(1) & vbCrLf

If (i + 1) Mod 20 = 0 Then Text1 = Text1 & "Part" & ((i + 1) / 20 ) & vbCrLf & vbCrlf
Next i

Text1 = Text1 & "End"

[/Quote]
[Quote=引用 25 楼 angelli03 的回复:]
引用 22 楼 patrickkong 的回复:
楼主,5楼的代码是正确的,调式不了是因为你的数据不符合。
sugar!


我用的测试数据如下:
1. aaa  asdfafas daf  //.后有空格 下同
2. bbb  adfsafasdf    asdfasfa
3. ccc safdfds asdf a sdaf
4. aaa  asdfafas daf  //.后有空格 下同
5. bbb  adfsafasdf    asdfasfa
6. ccc safdfds asdf a sdaf
7. aaa  asdfafas daf  //.后有空格 下同
8. bbb  adfsafasdf    asdfasfa
9. ccc safdfds asdf a sdaf
10. aaa  asdfafas daf  //.后有空格 下同
11. bbb  adfsafasdf    asdfasfa
12. ccc safdfds asdf a sdaf
13. aaa  asdfafas daf  //.后有空格 下同
14. bbb  adfsafasdf    asdfasfa
15. ccc safdfds asdf a sdaf
16. aaa  asdfafas daf  //.后有空格 下同
17. bbb  adfsafasdf    asdfasfa
18. ccc safdfds asdf a sdaf
19. aaa  asdfafas daf  //.后有空格 下同
20. bbb  adfsafasdf    asdfasfa
21. ccc safdfds asdf a sdaf

提示下标越界
建的调试程序就一个text文本框 和一个command按钮
5楼朋友的代码我无修改的复制command-clink 下有此提示

是代码还需要小修改后使用,还是我什么地方出错了,请指教

[/Quote]

提示下标越界,应该是最后一行的问题。
字符串第1次以“回车符”分割后,会分割出22个字符串,而不是21个,最后一个字符串为是"",也就是长度为0的字符串,在for循环中第2次以“空格”分割时,生成的数组维数为-1,所以绿色部分会出错。
  • 打赏
  • 举报
回复
你有没有debug? 是什么值?
舉杯邀明月 2010-01-08
  • 打赏
  • 举报
回复
楼主搞清楚没?


其实我的代码,你还可以简单的更改一下。比如(如果每个要处理的文档格式有点差异的话):
界面上增加一个 TextBox ,可以输入起始行号;
增加一个 TextBox ,可以输入导出哪列数据。
等等……。

只要在导出数据时,从相应的 TextBox 中读取输入值就行了。
贝隆 2010-01-07
  • 打赏
  • 举报
回复
舉杯邀明月 2010-01-07
  • 打赏
  • 举报
回复
今天上午写了一个。
楼主参考一下吧。


进入这个网页下载:用VBA导出Excel文本.rar(12.2K)

angelli03 2010-01-07
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 patrickkong 的回复:]
谁来渔?
[/Quote]
?? 啥意思?
  • 打赏
  • 举报
回复
谁来渔?
angelli03 2010-01-07
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 patrickkong 的回复:]
楼主,5楼的代码是正确的,调式不了是因为你的数据不符合。
sugar!
[/Quote]

我用的测试数据如下:
1. aaa asdfafas daf //.后有空格 下同
2. bbb adfsafasdf asdfasfa
3. ccc safdfds asdf a sdaf
4. aaa asdfafas daf //.后有空格 下同
5. bbb adfsafasdf asdfasfa
6. ccc safdfds asdf a sdaf
7. aaa asdfafas daf //.后有空格 下同
8. bbb adfsafasdf asdfasfa
9. ccc safdfds asdf a sdaf
10. aaa asdfafas daf //.后有空格 下同
11. bbb adfsafasdf asdfasfa
12. ccc safdfds asdf a sdaf
13. aaa asdfafas daf //.后有空格 下同
14. bbb adfsafasdf asdfasfa
15. ccc safdfds asdf a sdaf
16. aaa asdfafas daf //.后有空格 下同
17. bbb adfsafasdf asdfasfa
18. ccc safdfds asdf a sdaf
19. aaa asdfafas daf //.后有空格 下同
20. bbb adfsafasdf asdfasfa
21. ccc safdfds asdf a sdaf

提示下标越界
建的调试程序就一个text文本框 和一个command按钮
5楼朋友的代码我无修改的复制command-clink 下有此提示

是代码还需要小修改后使用,还是我什么地方出错了,请指教
angelli03 2010-01-07
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 chen8013 的回复:]
引用 21 楼 angelli03 的回复:
引用 18 楼 chen8013 的回复:
今天上午写了一个。
楼主参考一下吧。


进入这个网页下载:用VBA导出Excel文本.rar(12.2K)


我试了下 不知为什么 导出的文本只有end 没有其他内容

你的数据内容在 B列 吗!

你在 8F 说 “只取 B列数据就行”,出现这种现象只有两种可能:
①你的数据全部在 A列 中。你可以把原始工作簿直接打开,调整 A列 的宽度,看看要导出的文本是否在B列内。
②我的代码有个地方要按实际情况更改一下。
 在 lstSheets_DblClick() 事件代码中:
  i = 2  ' 文本数据从哪行开始
这里你要按实现起始行赋值。



[/Quote]

是我的原因 不好意思 呵呵
测试一下是对的 以后在宏方面还请多指教 谢谢帮助
舉杯邀明月 2010-01-07
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 angelli03 的回复:]
引用 18 楼 chen8013 的回复:
今天上午写了一个。
楼主参考一下吧。


进入这个网页下载:用VBA导出Excel文本.rar(12.2K)




我试了下 不知为什么 导出的文本只有end 没有其他内容
[/Quote]
你的数据内容在 B列 吗!

你在 8F 说 “只取 B列数据就行”,出现这种现象只有两种可能:
①你的数据全部在 A列 中。你可以把原始工作簿直接打开,调整 A列 的宽度,看看要导出的文本是否在B列内。
②我的代码有个地方要按实际情况更改一下。
 在 lstSheets_DblClick() 事件代码中:
  i = 2 ' 文本数据从哪行开始
这里你要按实现起始行赋值。


加载更多回复(20)

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧