Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在电子表格中使用VBA函数和变量_Vba - Fatal编程技术网

在电子表格中使用VBA函数和变量

在电子表格中使用VBA函数和变量,vba,Vba,我是Excel VBA新手。我正在尝试使用我在网上找到的VBA函数,该函数允许用户一次在多个单元格上使用goalseek。如何在电子表格中调用函数,以及如何指向应该与函数中的变量关联的单元格(例如Taddr、Aaddr、gval)。我是否必须在代码本身中写入单元格值和范围,然后以这种方式运行它 也许我应该重新定义这个函数,让它把这些变量作为输入,这样我就可以编写一个公式,比如=GSeekA(Taddr,Aaddr,gval) GSeekA是一个子过程,而不是一个函数。不能像函数一样从工作表单元格

我是Excel VBA新手。我正在尝试使用我在网上找到的VBA函数,该函数允许用户一次在多个单元格上使用goalseek。如何在电子表格中调用函数,以及如何指向应该与函数中的变量关联的单元格(例如Taddr、Aaddr、gval)。我是否必须在代码本身中写入单元格值和范围,然后以这种方式运行它

也许我应该重新定义这个函数,让它把这些变量作为输入,这样我就可以编写一个公式,比如=GSeekA(Taddr,Aaddr,gval)


GSeekA是一个子过程,而不是一个函数。不能像函数一样从工作表单元格调用子流程。你不想把GSeekA转换成一个函数。函数应用于将值返回到调用它们的单元格。他们不应该(而且通常不能)改变工作表上的其他内容

您需要将GSeekA作为sub运行。现在的问题是如何将用户提供的信息输入sub。您可以使用InputBox提示用户输入一条信息。如果输入框太多,输入框就会变得很麻烦

您可以在电子表格中创建用户必须输入信息的区域,然后从该区域读取信息。现在就是这样设置的。它正在读取名为asheet和tsheet的单元格。只要这些命名范围存在,代码就可以工作

最后,您可以创建一个用户将填写的用户表单。这就像把一堆输入框放在一个表单上

更新这里有一个简单的过程,你可以开始和加强

Public Sub GSeekA()

    Dim rAdjust As Range
    Dim rTarget As Range
    Dim dGoal As Double
    Dim i As Long

    'Set these three lines to what you want
    Set rAdjust = Sheet1.Range("I2:I322")
    Set rTarget = Sheet1.Range("J2:J322")
    dGoal = 12.1

    For i = 1 To rAdjust.Count
        rTarget.Cells(i).GoalSeek dGoal, rAdjust.Cells(i)
    Next i

End Sub

请花点时间复习。至于调用函数时传递的变量,我知道如何传递变量,但上面的函数不会将变量传递到函数中。在我看来,如果我想使用函数,我必须手动将单元格值输入到代码中,以便使用这些变量为函数提供一些参数。子GSeekA(Aaddr作为字符串)查看此Dick的
solverRok
SolverSolve
函数sthx。如何在电子表格中定义asheet、tsheet等单元格?我应该能够通过在代码中插入Aaddr=Range(“I2:I322”).Value Taddr=Range(“J2:J322”).值来运行子流程,然后运行它?不,我不这么认为。Aaddr和Taddr是看起来像单元格引用的字符串。你需要的是一个更简单的程序开始,然后你可以增强。我正在更新我的答案。
Public Sub GSeekA()

    Dim rAdjust As Range
    Dim rTarget As Range
    Dim dGoal As Double
    Dim i As Long

    'Set these three lines to what you want
    Set rAdjust = Sheet1.Range("I2:I322")
    Set rTarget = Sheet1.Range("J2:J322")
    dGoal = 12.1

    For i = 1 To rAdjust.Count
        rTarget.Cells(i).GoalSeek dGoal, rAdjust.Cells(i)
    Next i

End Sub