标题:vfp 控制 excel 问题
只看楼主
panpende
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:528
专家分:963
注 册:2009-4-27
得分:0 
进来学习学习
2014-10-03 09:19
厨师王德榜
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:183
帖 子:942
专家分:4724
注 册:2013-2-16
得分:0 
4楼的办法,如果列为两个字母的列,好像有点不对应。我以前用EXCEL写小程序时,被这个问题困扰过,后来写了一个Func解决的,可能参考一下我的VBA代码:

Function gotcolu(ByVal liename As String) As Integer
'根据字母,返回列序号。
    gotcolu = Range(liename & "8").Column
End Function

对不起,刚仔细看了你的需求,我的函数是根据字母,返回数字,而你要的是根据数字,返回列名字,那么我的方向反了。Orz

另外8楼的方法不错,但列序号超过702时会错。
这里完善一下我的代码,都是用VBA做在EXCEL里的函数,可以完善的互相转换:
程序代码:
Function GotColNoXLS(ByVal liename As String) As Integer
Dim i As Integer, isLalpha As Boolean
'根据字母,返回列序号。本模块直接利用EXCEL单元格Column属性值,非数学方式计算。
isLalpha = True
If Len(Trim(liename)) = 0 Then  '处理空值、空白
    GotColNoXLS = 0
Else
'避免用户恶意输入,先确保用户输入的是纯字母,其它字符则直接给出错误提示。
    liename = UCase(Trim(liename))
    For i = 1 To Len(liename) Step 1
        If Not (Asc(Mid(liename, i, 1)) >= 65 And Asc(Mid(liename, i, 1)) <= 90) Then
            isLalpha = False
        End If
        If isLalpha = False Then Exit For
    Next i
    If isLalpha = False Then
        GotColNoXLS = 0
    Else
        GotColNoXLS = Range(liename & "1").Column
    End If
End If
End Function
再来一个根据列序号,返回列字母名称的:
程序代码:
Function GetColNameXLS(LXH As Integer) As String
'根据列序号,返回列字母名,本模块利用Excel本身的AddressLocal转换,非数学方式计算。
Dim ad1 As String
'净化LXH,避免用户恶意输入
If LXH > 0 And LXH <= 16384 Then
    ad1 = Range(Cells(1, LXH), Cells(1, LXH)).AddressLocal
    ad1 = Mid(ad1, 2, Len(ad1) - 1)
    GetColNameXLS = Mid(ad1, 1, InStr(1, ad1, "$", vbTextCompare) - 1)
Else
    GetColNameXLS = "不合理的值(≤0或>16384)"
End If
End Function




[ 本帖最后由 厨师王德榜 于 2014-10-11 10:53 编辑 ]
2014-10-10 16:15



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-436523-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.368755 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved