繁体   English   中英

动态设置范围到VBA中的列

[英]Dynamically set Ranges to the columns in VBA

我正在向工作表中导入一些日期,该日期需要在其他工作表中进行验证和参考。

假设我在工作表(WS1)中有4列,但是每次导入时行数都是动态的。 我如何排列列(A:D)?

请帮忙。

问候,玛尼

使用lastRow变量确定最后一行。 我列举了一些例子。 此示例上还包含一个lastCol变量。如果列数也是动态的,则可以使用此变量。

Private Sub lastRow()

Dim lastRow As Long
Dim lastCol As Long
Dim sheet As String

    sheet = "WS1"

    lastRow = Sheets(sheet).Range("A" & Rows.Count).End(xlUp).row   'Using Range()
    lastRow = Sheets(sheet).Cells(Rows.Count, "A").End(xlUp).row    'Using Cells()

    lastCol = Sheets(sheet).Cells(2, Columns.Count).End(xlToLeft).Column
End Sub

您还可以使用变量轻松地遍历工作表。 使用Cells(row,col)代替Range(A1)。 您可以为该列使用数字或带引号的字母,如示例所示。

此示例查看WS1并匹配someValue。 如果WS1的A列中的值= somevalue,则将该记录复制到“主”表中。

Sub LoopExample()
Dim mRow As Long  'used for a master row
    For lRow = 2 To lastRow
        If Sheets(sheet).Cells(lRow, 1) = someValue Then
            'perform something here like this.  Copy columns A:D to the Master Sheet if match
            For lCol = 1 To 4   'or you could go 1 to lastCol if you needed it dynamic
                Sheets("MASTER").Cells(mRow, lCol) = Sheets(sheet).Cells(lRow, lCol) 'mRow as Row on Master
            Next lCol
            mRow = mRow + 1   'Increment the Master Row
        End If
    Next lRow
End Sub

不管怎么说,多谢拉。 但是我想要的只是命名工作表中的列。

我已经完成了复制和粘贴(加载数据黑白工作表)。

这就是我想要的。

vRowCount = DestWorkSheet.Cells(1, 1).SpecialCells(xlCellTypeLastCell).Row
vColCount = DestWorkSheet.Cells(1, 1).SpecialCells(xlCellTypeLastCell).Column

DestWorkSheet.usedRange.Columns.AutoFit
AddNamedRange Dest_RATES, DATA_Dest_RATES

如果AddNamedRange是一个函数,

    Public Sub AddNamedRange(ByVal sheetCodeName As String, ByVal namedRange As String)
    Dim rngToBeNamed As Range
    Dim ws As Worksheet

   On Error GoTo AddNamedRange_Error

   Set rngToBeNamed = GetUsedRange(sheetCodeName)
   Set ws = rngToBeNamed.Worksheet
   ws.Names.Add name:=namedRange, RefersTo:=ws.Range(rngToBeNamed.Address)

   On Error GoTo 0
   Exit Sub


  AddNamedRange_Error:

    MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure AddNamedRange of Module     UtilitiesRange"

    End Sub

问候,

玛尼

似乎您可以只在工作表模块中使用以下内容:

    Private Sub Worksheet_Change(ByVal target As Range)
        Dim i As Long
        Dim NamesOfNames(1 To 4) As String

            NamesOfNames(1) = "NameOfColumn1"
            NamesOfNames(2) = "NameOfColumn2"   
            NamesOfNames(3) = "NameOfColumn3"
            NamesOfNames(4) = "NameOfColumn4" 

        For i = 1 To 4
            ThisWorkbook.Names.Add Name:=NamesOfNames(i), _ 
                RefersTo:=Range(Cells(1, i), Cells(Cells(Rows.Count, i).End(xlUp).Row, i))
        Next i
    End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM