【问题标题】:Create UDF in VBA Generated Workbook在 VBA 生成的工作簿中创建 UDF
【发布时间】:2016-04-12 08:09:49
【问题描述】:

我正在用 VBA 构建一个应用程序来解析机器生成的文件。作为该项目的一部分,我需要将机器格式转换为整数,因为固定宽度的列不容纳负数。我使用宏记录器来解析文本文件:

Workbooks.OpenText Filename:= _
    *FILE NAME HERE*, Origin:= _
    437, StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 2), _
    Array(6, 2), Array(10, 2), Array(14, 2), Array(19, 2), Array(25, 2), Array(27, 2), Array(34 _
    , 2), Array(39, 2), Array(43, 2), Array(44, 2), Array(52, 2)), TrailingMinusNumbers:= _
    True

但这会创建一个新工作簿,因为它正在打开一个新文件。问题是我需要在将固定宽度值转换为整数的最后一列上运行 UDF。例如,假设最后一列是 0000000E 我知道 E 表示最后一位数字是 5 并且数字是负数。我的 UDF 会相应地转换它:

Public Function ConvertCodeToInteger(inputString As String) As Long


If inputString <> vbNullString Then
    Select Case Right(inputString, 1)
        Case "E" 'Negative 5
            ConvertCodeToInteger = -1 * (Left(inputString, Len(inputString) - 1) & 5)

        Case Else 'Error Case'
            MsgBox ("An error has occurred.")
            End
    End Select
Else
    ConvertCodeToInteger = vbNullString
End If

End Function

Private Sub TESTConvertCodeToInteger()

Debug.Print ConvertCodeToInteger("000001E")

End Sub

但由于文件在新工作簿中打开,我无法访问我的 UDF。有没有一种简单的方法可以使用 VBA 使 UDF 可用于新工作簿?通过以某种方式使用 VBA 直接将功能代码复制到新工作簿的模块中,或者只是访问原始代码?或者有没有办法在当前工作簿中打开文本文件?

这需要可移植,因此不能选择使用个人工作簿。

【问题讨论】:

  • 为什么不直接从脚本中调用函数呢? for i = 1 to lastrow cells(columnnum,i) = ConvertCodeToInteger(cells(columnnum,i)) Next i
  • 这需要可部署,以便最终用户可以使用它并在必要时直接访问功能。
  • 录制宏并使用 Data->From Text 导入您的文本文件。这将导入您当前的工作簿。
  • 这似乎适用于我的应用程序。如果您将其添加为答案,我会批准它。

标签: vba excel excel-2007


【解决方案1】:

录制宏并使用 Data->From Text 导入您的文本文件。这将导入到您当前的工作簿中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多