我有一个根据特定标准生成细胞范围的程序。 我还有一个函数,它将单元格范围对象作为输入并返回一个数组。但是,如果我在一个过程中调用该函数,我会收到此错误。 “编译错误:无法分配给数组”我的语法有问题吗?感谢。
var trElements = driver.FindElements(By.TagName("tr"));
List<string> strrr = new List<string>();
foreach (var tr in trElements)
{
IWait<IWebElement> wait = new DefaultWait<IWebElement>(tr);
wait.Timeout = TimeSpan.FromSeconds(10);
try
{
wait.Until(element => element.Text.Trim().Length > 1);
strrr.Add(element.Text.Trim());
}
catch (WebDriverTimeoutException)
{
strrr.Add("");
}
}
程序有点长,所以我只会显示相关的行
int SCROLL_PAUSE_TIME = 1;
int SCROLL_LENGTH = 500;
var jsExecutor = driver as IJavaScriptExecutor;
int pageHeight = Int32.Parse((string)jsExecutor.ExecuteScript("return document.body.scrollHeight"));
int scrollPosition = 0;
while (scrollPosition < pageHeight)
{
scrollPosition = scrollPosition + SCROLL_LENGTH;
jsExecutor.ExecuteScript("window.scrollTo(0, " + scrollPosition + ");");
System.Threading.Thread.Sleep(SCROLL_PAUSE_TIME);
}
var trElements = driver.FindElements(By.TagName("tr"));
答案 0 :(得分:2)
试一试......
Function DBReader(DBMarker As Range) As Variant
Dim arr(5) As String
'Read data
arr(0) = DBMarker.Value
arr(1) = DBMarker.Offset(1, 1).Value
arr(2) = DBMarker.Offset(2, 1).Value
arr(3) = DBMarker.Offset(0, 2).Value
arr(4) = DBMarker.Offset(1, 2).Value
arr(5) = DBMarker.Offset(2, 2).Value
DBReader = arr()
End Function
Public Sub LogSum()
'Declare variables
Dim CellDB As Range
Dim DBInfo() As String 'Stores info from function
Set CellDB = bookLOG.Worksheets(j).UsedRange.Find("Ref:", LookIn:=xlValues)
DBInfo = DBReader(CellDB) 'Returns Array from function???
End Sub
答案 1 :(得分:1)
我怀疑问题是你试图将你的函数设置为刚刚在DBReader函数的最后一行填充的数组。
DBReader = arr()可能失败,因为DBReader是一个函数,而不是一个数组。
答案 2 :(得分:1)
因此,您需要考虑几个问题。
首先,让我们从您的子程序开始。
在分配之前,您正在声明一个包含6个元素的数组。让我们将Dim DBInfo(5)
更改为Dim DBInfo()
您还应该在子例程中添加一个检查,以确保您没有CellDB
的空对象。在该行之后添加如下内容:
If CellDB Is Nothing Then...
为Nothing
{/ p>>创建规则。
Public Sub LogSum()
'Declare variables
...
Dim DBInfo() As String
...
Set CellDB = bookLOG.Worksheets(j).UsedRange.Find("Ref:", LookIn:=xlValues)
...
DBInfo = DBReader(CellDB)
...
End Sub
接下来,我们可以查看您的功能本身。在声明As String
的末尾,您希望将其作为数组传递,以便您可以使用As String()
指定为数组。
此外,您的行DBReader = arr()
的语法拼写错误。您应该将其保留为DBReader = arr
。
Function DBReader(DBMarker As Range) As String()
Dim arr(5) As String
'Read data
arr(0) = ActiveWorksheet.DBMarker.Value
arr(1) = ActiveWorksheet.DBMarker.Offset(1, 1).Value
arr(2) = ActiveWorksheet.DBMarker.Offset(2, 1).Value
arr(3) = ActiveWorksheet.DBMarker.Offset(0, 2).Value
arr(4) = ActiveWorksheet.DBMarker.Offset(1, 2).Value
arr(5) = ActiveWorksheet.DBMarker.Offset(2, 2).Value
DBReader = arr
End Function
此外,一般情况下,不建议您使用ActiveWorksheet
来声明工作表。您可以通过添加另一个参数来将其传递给您的函数,例如:
Function DBReader(DBMarker As Range, ws As WorkSheet)...
你的功能还能运作吗?也许吧。
您是否希望稍后在开始将其用于其他工作表时进行调试?值得怀疑的。
现在让你自己头疼,这样你以后就不必进行不必要的调试了。
最后,我并不完全确定你对DBInfo
的意图,但那是一维数组。这意味着如果您要将此数组粘贴到工作表中,除非您要转置它,否则它将会水平显示。
你现在可以通过将它变成二维数组来使自己变得更容易。