【问题标题】:Excel range loop with variable in name名称中有变量的Excel范围循环
【发布时间】:2014-04-08 06:23:28
【问题描述】:

我有一个函数可以解析文本和单元格值以生成 HTML 表格的代码。

这是我的代码:

Function Html(Rng1 As Range, Rng2 As Range, Head As Boolean) As String
' this function will take columns of data and properly format them for html table
Dim retVal As String
Dim i, j, p As Integer
p = 1
'if ranges doesn't contains one column and same rows count - return #VALUE error
If Rng1.Rows.count <> Rng2.Rows.count Or _
    Rng1.Columns.count <> 1 Or Rng2.Columns.count <> 1 Then
    Html = CVErr(xlErrValue)
    Exit Function
End If

retVal = ""

For j = 1 To 2

If Head = True Then
retVal = retVal & "<th>" & Rng1.Cells(1, j)& "</th>"
  If j = 2 Then
    retVal = retVal & "<th>" & Rng2.Cells(1, j) & "</th>"
  End If
p = 2
End If

retVal = retVal & "<tr>"

For i = p To Rng1.Rows.count
    retVal = retVal & "<td>" & Rng & j & .Cells(i, 1) & "</td>"

Next i

retVal = retVal & "</tr>"
Next j


Html = "<table>" & retVal & "</table>"
End Function

问题是我想在两个范围内循环。这些范围称为Rng1Rng2。我想将 :Rng" 和循环标识符 j 组合成 Rng1.Cells(i,1) 但由于它位于该对象的中间,我不知道如何组合它。

有什么帮助吗?

【问题讨论】:

  • 您是否试图将两个范围并排放置在一个 html 表中?换句话说 - 你想逐行处理它们吗?
  • 是的,两行数据就是我想要的

标签: html excel html-table vba


【解决方案1】:

我想我明白你现在想要做什么了。您可以创建一个范围对象数组:

dim rangeArray
set rangeArray = array(Rng1, Rng2)

并像这样使用它:

retVal = retVal & "<td>" & rangeArray(j).Cells(i, 1) & "</td>"

【讨论】:

  • 这是一个好方法...谢谢!总是想精简我的代码。
【解决方案2】:

我在代码中添加了一条 if 语句以使其引用 Rng2,从而得到正确的输出。

但是,如果有人能告诉我如何在一个对象中进行组合,那会很有帮助。

Function Html(Rng1 As Range, Rng2 As Range, Head As Boolean) As String
' this function will take columns of data and properly format them for highcharts scatter pairs
Dim retVal As String
Dim i, j, p As Integer
p = 1
'if ranges doesn't contains one column and same rows count - return #VALUE error
If Rng1.Rows.count <> Rng2.Rows.count Or _
    Rng1.Columns.count <> 1 Or Rng2.Columns.count <> 1 Then
    Html = CVErr(xlErrValue)
    Exit Function
End If

retVal = ""

For j = 1 To 2

If Head = True Then
retVal = retVal & "<th>" & Rng1.Cells(1, 1) & "</th>"
  If j = 2 Then
    retVal = retVal & "<th>" & Rng2.Cells(1, 1) & "</th>"
  End If
p = 2
End If

retVal = retVal & "<tr>"

For i = p To Rng1.Rows.count
    retVal = retVal & "<td>" & Rng1.Cells(i, 1) & "</td>"
    If j = 2 Then
    retVal = retVal & "<td>" & Rng2.Cells(i, 1) & "</td>"
    End If
Next i

retVal = retVal & "</tr>"
Next j

'remove last comma
If retVal <> "" Then retVal = Left(retVal, Len(retVal) - 1)

Html = "<table>" & retVal & "</table>"
End Function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-30
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    • 2013-06-12
    • 1970-01-01
    相关资源
    最近更新 更多