Vba 代码帮助:查找列,并格式化单元格

Vba 代码帮助:查找列,并格式化单元格,vba,excel,excel-2010,Vba,Excel,Excel 2010,我的宏代码有点问题,需要你的建议。这里是我的基本宏代码: Option Explicit Sub NurZumUeben() 'oberste Zeile löschen, fixieren und linksbündig ausrichten Rows("1:1").Select Selection.Delete Shift:=xlUp With ActiveWindow .SplitColumn = 0 .SplitRow = 1 End With ActiveWindow.

我的宏代码有点问题,需要你的建议。这里是我的基本宏代码:

Option Explicit

Sub NurZumUeben()

'oberste Zeile löschen, fixieren und linksbündig ausrichten
Rows("1:1").Select
Selection.Delete Shift:=xlUp
With ActiveWindow
   .SplitColumn = 0
   .SplitRow = 1
End With
ActiveWindow.FreezePanes = True

'Jede zweite Zeile schattieren
Application.ScreenUpdating = False
Dim Zeile, ZeilenNr As Integer
With ActiveSheet.UsedRange.Rows
   .Interior.ColorIndex = xlNone
   .Borders.ColorIndex = xlNone
End With
ZeilenNr = 2
For Zeile = 2 To ActiveSheet.UsedRange.Rows.Count
    With Rows(Zeile)
        If .Hidden = False Then
            If ZeilenNr Mod 2 = 0 Then
                .Interior.ColorIndex = 15
                .Borders.Weight = xlThin
                .Borders.ColorIndex = 16
                ZeilenNr = ZeilenNr + 1
            Else
                ZeilenNr = ZeilenNr + 1
            End If
        End If
    End With
Next Zeile
Application.ScreenUpdating = True


'oberste Zeile einfärben
Rows("1:1").Select
With Selection.Interior
    .Pattern = xlSolid
    .PatternColorIndex = xlAutomatic
    .Color = 65535
    .TintAndShade = 0
    .PatternTintAndShade = 0
End With




'Spalte_suchen&formatieren
Dim iLeSpa     As Integer
Dim iSpalte    As Integer
Dim bGefunden  As Boolean

iLeSpa = IIf(IsEmpty(Cells(1, Columns.Count)), Cells(1, _
  Columns.Count).End(xlToLeft).Column, Columns.Count)

For iSpalte = 1 To iLeSpa
   If Cells(1, iSpalte).Value = "click_thru_pct" Then
     bGefunden = True
     Exit For
  End If
Next iSpalte

If bGefunden Then
  With Range(Cells(2, iSpalte), Cells(5000, iSpalte))
     .Replace What:="%", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows
     Range("K1") = 100
     Range("K1").Copy
     .PasteSpecial Paste:=xlPasteAll, Operation:=xlDivide
     .NumberFormat = "0.00%"
     Range("K1").Clear
  End With
Else
  MsgBox "Die Überschrift  ""click_thru_pct""  wurde nicht gefunden.", _
     48, "   Hinweis für " & Application.UserName
End If

End Sub
谢谢所有能帮忙的人。不幸的是,我得到的最终格式不是很顺利

结果如下:

我不想给整个列上色,只想给顶行上色。此外,0.00%的低空字段会不断格式化

此外,我注意到在第一行着色之后,字段K1是可见的。不幸的是,这对我来说是不切实际的,因为这些Excel文档在行中的位置也可能不同

这是一份文档,如果需要,您可以在上面进行测试。


非常感谢

更改模块函数以计算for循环变量。我认为使用单独的变量没有任何意义。更改此项:

ZeilenNr = 2
    For Zeile = 2 To ActiveSheet.UsedRange.Rows.Count
        With Rows(Zeile)
            If .Hidden = False Then
                If ZeilenNr Mod 2 = 0 Then
                    .Interior.ColorIndex = 15
                    .Borders.Weight = xlThin
                    .Borders.ColorIndex = 16
                    ZeilenNr = ZeilenNr + 1
                Else
                    ZeilenNr = ZeilenNr + 1
                End If
            End If
        End With
    Next Zeile
为此:

    For Zeile = 2 To ActiveSheet.UsedRange.Rows.Count
        With Rows(Zeile)
            If .Hidden = False Then
                If Zeile Mod 2 = 0 Then
                    .Interior.ColorIndex = 15
                    .Borders.Weight = xlThin
                    .Borders.ColorIndex = 16
                End If
            End If
        End With
    Next Zeile

如果我遗漏了什么,我道歉。此外,我无法查看您提供的示例,因为该站点需要登录,而且不是英文的。再次抱歉。

在您现有的代码中

  • 5000
    替换为
    ActiveSheet.UsedRange.Rows.Count

  • Range(“K1”)替换
    Range(“K1”)。ClearContents


  • 您可以使用

    For Zeile = 2 To ActiveSheet.Range("A1").CurrentRegion.Rows.Count-1
    

    .UsedRange
    并不总是正确重置。您的样本似乎是
    .CurrentRegion

    的一个很好的候选样本。感谢您的建议和指出我的样本文件。我马上换。如果您能在我的Excel电子表格上测试它,我将不胜感激。您还需要实现Erik的答案。格式化单元格将导致它包含在usedrange中(我之前没有看到代码的底部)。很抱歉,我认为我没有正确地表达自己。执行埃里克的建议,两个想法仍然是错误的。1) 我不会浏览整列,只浏览第一行。2) 将删除最后一个顶部柱k。我想我没有恰当地表达我自己。执行你的建议,两个想法仍然是错误的。1) 我不会浏览整列,只浏览第一行。2) 将删除最后一个顶部柱k。非常感谢