簡體   English   中英

按表中的名稱循環瀏覽一行中的每一列

[英]Cycle through each column in a row by name in a table

我有一個包含七個包含日期的列的表。 每列都有使用不同公式為各列分配的日期。 我的最終目標是將日期與今天進行比較,如果在一定時間內,則發出電子郵件,然后更新日期。 我的首要問題是試圖占據每一行,並遍歷每一列。 我一直在嘗試着在黑暗中刺傷

Dim ColWeekly, ColBiWeekly, ColMonthly, ColThMonth, _
ColSxMonth, ColYearly, ColBiYearly As Range
Dim ColVar As Variant
Dim PMTime As Long
Set ColWeekly = Range("PM[Weekly]")   

 For Each Row In [PM].Rows
    For Each Column In [PM].Columns
    Set ColVar = Column.Name
    Select Case ColVar

    Case ColWeekly
        If Date - Cell.Value = 1 Then
        Call Email
        Set Cell.Value = TODAY + 8
        End If

但是當到達Case ColWeekly行時,我仍然收到“類型不匹配錯誤”。 如果我也使用Case ColWeekly.nameCase ColWeekly.name 我敢肯定這實際上是一個非常簡單的任務,但是我一直在圈子里工作,所以您能提供的任何東西都將不勝感激。

您的示例存在許多問題。 如果沒有您工作簿格式的更多詳細信息,我將無法糾正它們。

相反,我將提供一個簡單示例,說明如何正確使用Select Case並進行簡單的列比較。 為了使用此示例,將WeeklyMonthly的范圍名稱分配給A:C列中A:C某個位置。

Option Explicit
Public Sub IterateThroughColumns()
    ' Create some variables
    Dim col As Range, colWeekly As Long, colMonthly As Long

    ' Assigns the column number for each range
    colWeekly = Range("Weekly").Column
    colMonthly = Range("Monthly").Column

    For Each col In Sheet1.Range("A:C").Columns
        Select Case col.Column
            Case colWeekly
                MsgBox "Found Weekly range in column " & col.Column
            Case colMonthly
                MsgBox "Found Monthly range in column " & col.Column
            Case Else
                MsgBox "No range was found in column " & col.Column
        End Select
    Next
End Sub

這應該使您了解如何設置一個簡單的For Each循環以遍歷列,但是要按列號進行比較,而不是直接比較范圍對象。

如果標題行是靜態的,並且您的數據集很小(假設您要發送電子郵件,我假設是),則可以使用這種檢查方法。
在我的示例中, 標頭位於第5行,並且使用了Like參數。

For i = 6 To LastRow
    For j = 1 To LastColumn
        Select Case True
            Case CStr(Cells(5, j).Value2) Like "*megjegyzés*" 'megjegyzések sortöréseinek eltüntetése
                Cells(i, j).Value = Replace(CStr(Cells(i, j).Value2), vbLf, "")
                Cells(i, j).Value = Replace(CStr(Cells(i, j).Value2), vbCr, "")
                Cells(i, j).Value = Trim(CStr(Cells(i, j).Value2))
            Case CStr(Cells(5, j).Value2) Like "*Tárgy*"
                Cells(i, j).Value = Replace(CStr(Cells(i, j).Value2), vbLf, "")
                Cells(i, j).Value = Replace(CStr(Cells(i, j).Value2), vbCr, "")
                Cells(i, j).Value = Trim(CStr(Cells(i, j).Value2))
            Case CStr(Cells(5, j).Value2) Like "*Kiállítás*" 'dátumok formátumváltása
                Cells(i, j).Value = Year(Cells(i, j).Value) & IIf(Len(Month(Cells(i, j).Value)) = 1, "0" & Month(Cells(i, j).Value), Month(Cells(i, j).Value)) & IIf(Len(Day(Cells(i, j).Value)) = 1, "0" & Day(Cells(i, j).Value), Day(Cells(i, j).Value))
                Cells(i, j).NumberFormat = "General"
            Case CStr(Cells(5, j).Value2) Like "*Esedékes*"
                Cells(i, j).Value = Year(Cells(i, j).Value) & IIf(Len(Month(Cells(i, j).Value)) = 1, "0" & Month(Cells(i, j).Value), Month(Cells(i, j).Value)) & IIf(Len(Day(Cells(i, j).Value)) = 1, "0" & Day(Cells(i, j).Value), Day(Cells(i, j).Value))
                Cells(i, j).NumberFormat = "General"
            Case CStr(Cells(5, j).Value2) Like "*Teljesítés*"
                Cells(i, j).Value = Year(Cells(i, j).Value) & IIf(Len(Month(Cells(i, j).Value)) = 1, "0" & Month(Cells(i, j).Value), Month(Cells(i, j).Value)) & IIf(Len(Day(Cells(i, j).Value)) = 1, "0" & Day(Cells(i, j).Value), Day(Cells(i, j).Value))
                Cells(i, j).NumberFormat = "General"
        End Select
    Next
Next

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM