可变范围作为输入

时间:2016-07-20 14:38:05

标签: arrays excel vba excel-vba

我是VBA for Excel(2013)的新用户,我一直在努力解决问题。

我想创建一个函数,该函数在用户必须提供的其他输入变量中具有多个单元格范围,这些单元格应该是可变的并且由用户自己“容易选择”。 它应该类似于(例如)Excel“SUM”公式,您可以在其中输入多个范围,例如“A1:C1,F1:H1,...”,用鼠标选择它们。

此外,我必须在2D阵列中传输用户选择的值。用户选择的每个范围都必须成为我的2D数组的一行。

除了我到目前为止所说的,用户输入的范围数应该是任何人,只有第一个应该是强制性的。

鉴于我的电子表格的“结构”,用户必须选择的所有数据按行排列。 (如果按行或列排列,会有什么不同吗?)

请注意,我不应该使用“输入框”,因为当我“向下拖动”一行以将公式应用于活动的下方的许多行时,它会减慢很多程序。

下面,我报告了我能写的代码的唯一部分(不是很多......)

Function Trial_Version(MyRange1 As Range, MyRange2 As Range, MyRange3 As Range) As Double
''' The number of ranges that the user is be able to input
'''should be anyone. Only the first Range should be mandatory

    Dim TotalArray()() As Double

'''The user should be able to input as many "sub-arrays" as they want,
'''so I do not know how many parentheses to write

    TotalArray = (MyRange1)(MyRange2)

'''here, the same problem as the previous line

    RANGE_TO_ARRAY = TotalArray
'''This is the output of my function

End Function

非常感谢您提前, 奥兰多

1 个答案:

答案 0 :(得分:0)

不是完整的答案,但希望能指出正确的方向。

  • 标准的Range对象已经可以容纳多个'区域' (例如C5:D9,G9:H16,B14:D18)。您可以使用.Areas属性循环遍历这些。

  • 通过使用Variant变量(例如Dim a as Variant,a = SomeRange),您可以轻松地从Range对象获取2D数组值。但是,如果选择了多个区域,则此方法仅获取第一个区域,因此您需要遍历每个区域以获取所有值。

  • 以下代码需要添加验证,并可能处理任何列/行偏移(即请参阅与索引相关的循环注释)。

Public Function ProcessRange(ByRef rng As Range)

form_titles = ["3.08 Incident Estimates", "3.09 Quotation by the Consultant", "3.10 Employer's Assessment"] for form in form_titles: try: WebDriverWait(browser, 60).until(EC.presence_of_element_located((By.XPATH, "//td[contains(text(),'%s')]" % (form)))) finally: browser.find_element_by_xpath("//td[contains(text(),'%s')]/following-sibling::td/a[contains(@onclick, 'editProjectFormType')]" % (form)).click() time.sleep(30)