使用变量';在VBA中将值从一个子系统转换为另一个子系统

使用变量';在VBA中将值从一个子系统转换为另一个子系统,vba,excel,Vba,Excel,请注意,我正在尝试使用一个变量的值从一个子到另一个子,但不幸的是,我没有得到它。请遵循以下代码: Sub get_value() Dim area2 As Range Set area2 = Range(Cells(8, 2), Cells(linha, 2)) f = area2.Count s = x - f End Sub Sub get_value_s() Worksheets(2).Activate Range("A3").Sele

请注意,我正在尝试使用一个变量的值从一个子到另一个子,但不幸的是,我没有得到它。请遵循以下代码:

Sub get_value()
    Dim area2 As Range

    Set area2 = Range(Cells(8, 2), Cells(linha, 2))
    f = area2.Count
    s = x - f
End Sub

Sub get_value_s()
    Worksheets(2).Activate

    Range("A3").Select
    Selection.End(xlDown).Select
    linha = Selection.Row
    linha2 = linha + s

    Rows(linha2).Select
    Selection.Insert Shift:=xlDown
End Sub
另外,我已经将S设置为全局整数。(公共s为整数)


非常感谢

如果没有更多的代码,就很难知道错误是什么,因为您还有其他几个全局变量,我们无法看到它们是如何设置的。我的猜测是,在调用变量之前,您没有设置变量。例如,您是否确定在调用
get\u value()
之前调用了
get\u value()
,并且
x
&
linha
在调用时是正确的值

我建议不要使用Globals,除非你真的有。我只能将您的代码压缩到一个全局(
x
),这是因为我不知道这是从哪里来的

请尝试以下方法:

Public x As Integer

Function get_value(linha As Integer, wks As Worksheet)
    Dim area2 As Range
    Set area2 = wks.Range(Cells(8, 2), Cells(linha, 2))

    Dim f As Long
    f = area2.Count
    get_value = x - f
End Function

Sub get_value_s()
    Dim wks As Worksheet
    Set wks = Worksheets(2)

    Dim linha As Integer, linha2 As Integer

    linha = wks.Range("A3").End(xlDown).Row
    linha2 = linha + get_value(linha, wks)

    wks.Rows(linha2).Insert Shift:=xlDown
End Sub


并确保在调用
获取值之前设置了
X

就像波特兰跑步者建议的那样,你可以这样做

Function get_value()
    Dim area2 As Range

    Set area2 = Range(Cells(8, 2), Cells(linha, 2))
    f = area2.Count
    get_value = x - f
End Function

Sub get_value_s()
    Worksheets(2).Activate

    Range("A3").Select
    Selection.End(xlDown).Select
    linha = Selection.Row
    linha2 = linha + get_value()

    Rows(linha2).Select
    Selection.Insert Shift:=xlDown
End Sub

请注意,我重构了您的代码以避免激活&选择see了解更多有关原因的信息。