Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3117|回复: 9

[已解决]谢谢爱疯老师,代码解释

[复制链接]
发表于 2010-11-9 20:07 | 显示全部楼层 |阅读模式

sArr = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbLf)

请问这一句是什么意思?

[此贴子已经被作者于2010-11-10 20:21:13编辑过]
最佳答案
2010-11-9 22:22
QUOTE:
以下是引用lhj323323在2010-11-9 20:07:00的发言:

sArr = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbLf)

请问这一句是什么意思?

    sArr = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbLf)
    
    'LOF(1):表示文件(1)的大小,该大小以字节为单位。
    'InputB(LOF(1), 1):返回它所读出的所有字符
    'StrConv:将字符串转成 Unicode
    'Split:这里以回车符为分隔符,将字符串转为一个下标从零开始的一维数组sArr。
发表于 2010-11-9 22:22 | 显示全部楼层    本楼为最佳答案   

QUOTE:
以下是引用lhj323323在2010-11-9 20:07:00的发言:

sArr = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbLf)

请问这一句是什么意思?

    sArr = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbLf)
    
    'LOF(1):表示文件(1)的大小,该大小以字节为单位。
    'InputB(LOF(1), 1):返回它所读出的所有字符
    'StrConv:将字符串转成 Unicode
    'Split:这里以回车符为分隔符,将字符串转为一个下标从零开始的一维数组sArr。
回复

使用道具 举报

 楼主| 发表于 2010-11-10 00:02 | 显示全部楼层

回复:(爱疯)以下是引用lhj323323在2010-11-9 20:07...

QUOTE:
以下是引用爱疯在2010-11-9 22:22:00的发言:
    sArr = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbLf)
    
    'LOF(1):表示文件(1)的大小,该大小以字节为单位。
    'InputB(LOF(1), 1):返回它所读出的所有字符
    'StrConv:将字符串转成 Unicode
    'Split:这里以回车符为分隔符,将字符串转为一个下标从零开始的一维数组sArr。

爱疯老师:

以回车符vbLf为分隔符,不知我的外部数据源是不是以空格为分隔符,我试着将vbLf改为空格的表示,结果导不出数据来,不知该怎么改

回复

使用道具 举报

发表于 2010-11-10 00:07 | 显示全部楼层

你的原数据是以什么分隔的就改成什么

回复

使用道具 举报

 楼主| 发表于 2010-11-10 00:10 | 显示全部楼层

回复:(fjmxwrs)你的原数据是以什么分隔的就改成什么...

QUOTE:
以下是引用fjmxwrs在2010-11-10 0:07:00的发言:

你的原数据是以什么分隔的就改成什么

老师:我目测那个数据源应是以空格分隔的,但是试了不行,数据源在下面贴子内,请看看,谢谢了

http://www.excelpx.com/forum.php?mod=viewthread&tid=147995

回复

使用道具 举报

发表于 2010-11-10 00:31 | 显示全部楼层

相当于,


Sub a()
    Dim Str As String
    Dim arr

    Str = "abc" & vbLf & "def"
    MsgBox Str
    arr = Split(Str, " ")
    MsgBox UBound(arr)

End Sub

原理我说不上,我只是觉得可以接受这样的结果:只有符合条件(是空格),就分1个自字符串到数组arr中去。但是str里不包含空格。所以,数组始终没有数组元素,是空数组。

回复

使用道具 举报

发表于 2010-11-10 00:38 | 显示全部楼层

跟爱疯老师学习来了

[此贴子已经被作者于2010-11-10 0:39:02编辑过]
回复

使用道具 举报

 楼主| 发表于 2010-11-10 01:44 | 显示全部楼层

回复:(爱疯)相当于,Sub a()    Di...

QUOTE:
以下是引用爱疯在2010-11-10 0:31:00的发言:

相当于,


Sub a()
    Dim Str As String
    Dim arr

    Str = "abc" & vbLf & "def"
    MsgBox Str
    arr = Split(Str, " ")
    MsgBox UBound(arr)

End Sub

原理我说不上,我只是觉得可以接受这样的结果:只有符合条件(是空格),就分1个自字符串到数组arr中去。但是str里不包含空格。所以,数组始终没有数组元素,是空数组。

爱疯老师:

是否可以理解成,我上传的附件中的那种VB办法是不能将导出的各字段分别导入到不同的列中,而只能用您写的那个VB吗?

回复

使用道具 举报

发表于 2010-11-10 10:34 | 显示全部楼层

能将导出的各字段分别导入到不同的列中。但比较两种方法后发现,原方法有两个问题:

  1. 比较会发现,原方法对数字有舍入处理,而外部数据导入的,没有。例如:sheets("科目日报").range("I53")和sheets("HISSUBD").range("I52")
  2. 原方法输出少了最后一行。见科目日报的L列公式,对比用的。但没找着原因[em11]

HXmlogmL.rar (46.32 KB, 下载次数: 1)
回复

使用道具 举报

 楼主| 发表于 2010-11-10 20:16 | 显示全部楼层

回复:(爱疯)能将导出的各字段分别导入到不同的列中...

谢谢爱疯老师

这种导入方法是我在论坛上看到一位老师写的,当时没有发觉还存在数据不对的情况,现在知道了。

您在另一贴子中说的

Sub aa() '爱疯第二次,模板内在导入数据前只删除该数据在上期时生成的工作表,本次导入时重新生成两个数据源工作表
    Dim p As String, f As String, s As String

    Application.ScreenUpdating = False
    p = ThisWorkbook.Path
    f = Dir(p & "\*.txt")
    Do While f <> ""
        s = Left(f, Len(f) - 4)
        On Error Resume Next
        Application.DisplayAlerts = False
        Sheets(s).Delete
        Application.DisplayAlerts = True
        On Error GoTo 0
        Sheets.Add after:=Sheets(Sheets.Count)
        ActiveSheet.Name = s
        With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & p & "\" & f, Destination:=[A1])
            .Refresh BackgroundQuery:=False
        End With
        f = Dir
    Loop
    Sheets(1).Select
    Application.ScreenUpdating = True
End Sub

这段VB,会导致模板中原有的存放两张外部数据的工作表的(vb中的名称)不断改变

我想请问,有没有语句能将每次生成的新的工作表的(vb中的名称)进行修改

我说的工作表的(vb中的名称)是指选定一张工作表后,用鼠标点控件工具箱中的属性,框内第一排中的(名称),不知我描述清楚没有?

[此贴子已经被作者于2010-11-10 20:20:44编辑过]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-19 11:59 , Processed in 0.307434 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表