首页 > 解决方案 > VBA 行为怪异,无法获取存储在变量中的值

问题描述

我有一个非常奇怪的问题。如果返回值超过一个字符,我无法获得从如下简单函数返回的值。现在第二个问题是以下代码没有将“WTH”分配给 sheetName 变量。请参阅屏幕截图 2. CYRIL 评论后更新

Public Sub WTHFormatter()

    Dim sheetName As String

    sheetName = "WTH"

    Dim rng1 As Range

    'delete empty rows

    lastRowWTH = getLastRow(sheetName, 2)

    'Delete rows below the last Row
    Worksheets(sheetName).Rows(lastRowWTH + 1 & ":" & Worksheets(sheetName).Rows.Count).Delete

    ' build first range

    Set rng1 = Worksheets(sheetName).Range("B11:F" & lastRowWTH)

    Call setCellBorders(rng1)

    Set rng1 = Worksheets(sheetName).Range("H11:K" & lastRowWTH)

    Call setCellBorders(rng1)

    'determine the range for months

    For i = 13 To 24

        If Cells(7, i) = "" Then
            lastCol = i - 1
            Exit For
        End If
        lastCol = i
    Next

    ColLetter = returnLabel(lastCol)
    ColLetter2 = returnLabel(lastCol + 2)
    ColLetterX = returnLabel(lastCol + 14)

    Set rng1 = Worksheets(sheetName).Range("K17:" & ColLetter & lastRowWTH)

    Call setCellBorders(rng1)

    Set rng1 = Worksheets(sheetName).Range(ColLetter2 & lastRowWTH & ":" & ColLetter3 & lastRowWTH)

    Call setCellBorders(rng1)
End Sub
Function returnLabel(num1 As Long) As String

    Dim ColumnLetter As String

    ColumnLetter = Split(Cells(1, num1).Address, "$")(1)

    returnLabel = ColumnLetter

End Function

上述函数执行后返回空白,varTest 没有任何内容。如果我逐行执行,我看到函数中的 test1 不是“空”。如果我中断执行并探测变量,我只会按照下面的屏幕截图看到“test1 =”。这破坏了我的代码。

奇怪的是,如果我从“立即窗口”调用该函数,它会返回预期值。

我已经做过的事情:

无法理解这里的原因。任何帮助表示赞赏。

VBA 代码执行的屏幕截图

UPDATE1 我在上面的代码工作时尝试了一个新文件,但主要代码有一个新的类似问题。这已经开始发生了。它没有为变量分配字符串值。请参阅随附的屏幕截图。VBA 代码的屏幕截图。我假设系统或某些病毒存在问题。

标签: excelvba

解决方案


如果想法是有一个函数,即一个数组,则可以使用以下代码:

Function Test1() As Variant
    ReDim result(2)
    result(0) = "AJ"
    result(1) = "A"
    Test1 = result
End Function

Sub Main()

    Dim varTest As Variant
    varTest = Test1(0)
    Debug.Print varTest
    varTest = Test1(1)
    Debug.Print varTest

End Sub

在此处输入图像描述

值得怀疑的是为什么需要它,但作为“测试练习”它是可以的。


推荐阅读