假设我有以下示例表
我有一个贯穿整个if (response && response.data.Success) {
var arrayBufferedPdf = base64ToArrayBuffer(response.data.Document);
PDFJS.workerSrc = "./scripts/pdf.worker.js";
PDFJS.getDocument({ data: arrayBufferedPdf }).then(function (pdf) {
var pageNum = 1;
var numPages = pdf.numPages;
for (pageNum; pageNum <= numPages; pageNum++) {
pdf.getPage(pageNum).then(function (page) {
var scale = 1.25;
var viewport = page.getViewport(scale);
var canvasContainer = document.getElementById('canvas_container');
var canvas = document.createElement('canvas');
canvas.height = viewport.height;
canvas.width = viewport.width;
canvasContainer.appendChild(canvas);
var context = canvas.getContext('2d');
page.render({ canvasContext: context, viewport: viewport });
});
}
});
}
(C / 3列)的for循环,并根据谁拥有最多的苹果对“用户”进行排名(例如,Michael将是1,Robert 2等。 )
但是,我想说的是,我只想参考表格的特定范围
(例如,让我们说ListColumn(2)
)
我怎么能这样做?
我有以下代码:
Range("C7:C9") <=> ListRows(3,4,5)
基本上,我需要以某种方式将 Private Sub CommandButton1_Click()
Dim tbl As ListObject: Set tbl = Sheets("Sheet1").ListObjects("Table1")
Dim my_range As Range
For Each my_range In tbl.ListColumns(2).DataBodyRange
' ^ this runs through entire column instead of the specified range I want!
my_range.Offset(0, 1) = WorksheetFunction.Rank(my_range, tbl.ListColumns(2).DataBodyRange)
' ^ again, isntead of entire DataBodyRange we should be rather referencing the specific Range
Next my_range
End Sub
本身限制在特定范围内,问题是,.DataBodyRange
被指定为从整个ListObject中取整个Column / Row或只有1个Cell作为{{ 1}}。
因此,在选择Robert,Michael,Laurel .DataBodyRange
的假定例子中,预期结果将是:
有任何建议怎么做?
答案 0 :(得分:1)
我知道我迟到了,但为了后代......
使用 .Offset
和 .Resize
方法可以在 tbl.Range
或 tbl.DataBodyRange
...
仅迭代选择行:
...
Set my_range1 = tbl.Listcolumns(2).DataBodyRange
For LoopControl = StartRow To EndRow
my_range1.Resize(1).Offset(LoopControl - 1).Value2 = 'your code here
'Alternate code
tbl.ListRows(LoopControl).Resize(, 1).Offset(, 2).Value2 = 'your code here
'Or even:
tbl.DataBodyRange.Resize(1, 1).Offset(2, LoopControl).Value2 = 'your code here
Next LoopControl
请注意,如果列在事后重新排列,您可以使用 .ListColumns("Apples")
。此外,您可以.Offset(, tbl.ListColumns("Apples").Index)
以适应不断变化的表结构。
或者将行的子集称为单个范围:
Set my_range = tbl.ListColumns(2).DataBodyRange.Offset(StartRow - 1).Resize(EndRow - StartRow + 1)
'Alternately:
Set my_Range = tbl.ListColumns(2).Range.Offset(StartRow).Resize(EndRow - StartRow + 1)
答案 1 :(得分:0)
您可以使用类似以下内容的列来引用连续的单元格:
With tbl.ListColumns(2).DataBodyRange
For Each my_range in Range(.Cells(3), .Cells(5))
' Code here.
Next my_range
End With
这是你的意思吗?