2012-12-16 49 views
0

我的宏代碼有點問題,需要您的建議。這裏我的基地宏碼:Codehelp:尋找列,並格式化單元格

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 

一旦謝謝所有誰可以幫忙。不幸的是,我得到的最終格式不走相當

下面是結果:example

我不想顏色在整個列,但只有前行。此外,較低的空字段不確定格式不確定。

此外,我注意到在第一行着色後,字段K1是可見的。不幸的是,這對我來說是不切實際的,因爲這些Excel文檔在行中也可能有所不同。

這裏是您可以根據需要對其進行測試的文檔。 example

非常感謝您

回答

1

更改模塊函數來計算的循環變量。我沒有看到爲此使用單獨的變量的目的。更改此:

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 

我道歉,如果我在這裏失去了一些東西。另外,我無法查看您提供的示例,因爲該網站需要登錄並且不是英文的。再次抱歉。

+0

我感謝您的意見和指出我的示例文件。我會立即改變它。 如果您可以在我的Excel電子表格上進行測試,我將非常感激。 –

+0

您還需要實現Erik的答案。格式化單元格會導致它被包含在usedrange中(我之前沒有看到代碼的底部)。 – Lopsided

+0

對不起,我覺得我沒有正確表達自己。兩位認爲執行埃裏克的建議仍然是錯誤的。 1)我不會對整列,只有第一行着色。 2)最後一個Colum k被刪除。非常感謝 –

0

在現有的代碼,

  1. 替代5000ActiveSheet.UsedRange.Rows.Count

  2. 替代Range("K1").ClearRange("K1").ClearContents

+0

對不起,我認爲我沒有正確表達自己。兩個人認爲執行你的建議仍然是錯誤的。 1)我不會對整列,只有第一行着色。 2)最後一個Colum k被刪除。非常感謝 –

0

相反的For Zeile = 2 To ActiveSheet.UsedRange.Rows.Count,你可以使用

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

.UsedRange並不總是正確重置。你樣本似乎是一個很好的候選人.CurrentRegion