2016-03-20 9 views
0

Bir sayfa dışında birden çok sayfada kullanmak istediğim bir kod var. Ancak kodu alel levhalara uygulamak da iyidir. Ayarlamak istediğim kod İşte. Şu anda OS X'te Excel 2011'e uyguladım, ancak Windows'da Excel 2010 için kullanmak istiyorum. Aşağıdaki kod var modülde Aşağıdaki kodu birden çok Excel sayfasında nasıl çalıştırabilirsiniz?

Private Sub Worksheet_Change(ByVal Target As Range) 
If Target.Address = "$A$1" Then 

Dim the_selection As String 
Dim month_in_review As String 

the_selection = Sheet1.Range("A1") 

    Dim Rep As Integer 
    For Rep = 2 To 379 
     the_column = GetColumnLetter_ByInteger(Rep) 
     month_in_review = Sheet1.Range(the_column & "1") 
      If the_selection = month_in_review Then 
      Sheet1.Range(the_column & ":" & the_column).EntireColumn.Hidden = False 
      Else 
      Sheet1.Range(the_column & ":" & the_column).EntireColumn.Hidden = True 
      End If 
    Next Rep 

End If 
End Sub 

:

Public Function GetColumnLetter_ByInteger(what_number As Integer) As String 
GetColumnLetter_ByInteger = "" 

MyColumn_Integer = what_number 

    If MyColumn_Ineger <= 26 Then 
     column_letter = ChrW(64 + MyColumn_Integer) 
    End If 


If MyColumn_Integer > 26 Then 
    column_letter = ChrW(Int((MyColumn_Integer - 1)/26) + 64) & ChrW(((MyColumn_Integer - 1) Mod 26) + 65) 

End If 

GetColumnLetter_ByInteger = column_letter 

End Function 

cevap

0

' Bir sayfanın "A1" hücresindeki değişikliği algılamasını ve ardından birden fazla sayfadaki sütunları gizlemesini/göstermesini istemeniz halinde, sorunuza verilen önceki yanıtlar size güzel bir şekilde hizmet edecektir.

Diğer taraftan, herhangi bir sayfada "A1" hücresinde bir değişiklik saptamak ve ardından yalnızca değiştirilen sayfadaki sütunları gizlemek/göstermek için, aşağıdaki kod sizin için çalışacaktır. Çalışma Kitabı düzeyinde Workbook_SheetChanged olayına erişir. Kuralların

birkaç nokta: Sen .Cell özelliğiyle kendi tamsayı veya adres değerlerini kullanarak hücreleri başvurabilir

  1. yüzden Sheet1.Cells(1, 1)Sheet1.Cells(1, "A") aynıdır. Aynı şey .Columns özelliği için geçerlidir. Dolayısıyla, tamsayı değerlerinizi bir dizgeye dönüştürmek için gerçek bir ihtiyaç yoktur. Bunun iyi bir örneği için bkz.
  2. Mümkün olan yerlerde, çok zaman alıcı olduğundan döngü sayfası etkileşimlerini en aza indirin. Bu nedenle, sütunlar arasında dolaşmak ve her birini ayrı ayrı gizlemek/göstermek yerine, bunları döngünüzdeki aralıklara atayabilir ve ardından döngülerinizin sonunda tek seferde aralıkları gizleyebilir/gösterebilirsiniz. Döngünün her yinelemesinde sayfala etkileşimde bulunmanız gerekiyorsa, döngünüzün başlangıcından önce Application.ScreenUpdating özelliğini false olarak ayarlayın. Aşağıdaki örnek kodda bu mülkün bir örneği var. senin Workbook modülünde

koyun bu:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 
    Const TARGET_ADDRESS As String = "A1" 
    Dim cell As Range 
    Dim hiddenCols As Range 
    Dim unhiddenCols As Range 
    Dim selectedMonth As String 
    Dim monthInReview As String 
    Dim c As Integer 

    'Ignore event if not a target worksheet 
    If Sh.Name = "Not Wanted" Then Exit Sub 

    'Ignore event if not in target range 
    Set cell = Target.Cells(1) 
    If cell.Address(False, False) <> TARGET_ADDRESS Then Exit Sub 

    'Criteria met, so handle event 
    selectedMonth = CStr(cell.Value) 
    For c = 2 To 379 
     Set cell = Sh.Cells(1, c) 
     monthInReview = CStr(cell.Value) 
     'Add cell to hidden or unhidden ranges 
     If monthInReview = selectedMonth Then 
      If unhiddenCols Is Nothing Then 
       Set unhiddenCols = cell 
      Else 
       Set unhiddenCols = Union(unhiddenCols, cell) 
      End If 
     Else 
      If hiddenCols Is Nothing Then 
       Set hiddenCols = cell 
      Else 
       Set hiddenCols = Union(hiddenCols, cell) 
      End If 
     End If 
    Next 

    'Hide and unhide the cells 
    Application.ScreenUpdating = False 'not really needed here but given as example 
    If Not unhiddenCols Is Nothing Then 
     unhiddenCols.EntireColumn.Hidden = False 
    End If 
    If Not hiddenCols Is Nothing Then 
     hiddenCols.EntireColumn.Hidden = True 
    End If 
    Application.ScreenUpdating = True 

End Sub 
0

Tüm Çalışma Sayfaları arasında döngü için bir for each loop kullanmak ve atlanır gerekip gerekmediğini çalışma sayfası adını kontrol edebilirsiniz. Ardından, kodunuzu seçilen sayfaya uygulayın. gibi

şey:

Sub Worksheet_Change(ByVal Target As Range) 
If Target.Address = "$A$1" Then 
    Dim ws As Worksheet 
    For Each ws In ActiveWorkbook.Worksheets 
     If ws.Name <> "Skip Sheet" Then 
      Dim the_selection As String 
      Dim month_in_review As String 

      the_selection = ws.Range("A1") 

      Dim Rep As Integer 
      For Rep = 2 To 379 
       the_column = GetColumnLetter_ByInteger(Rep) 
       month_in_review = ws.Range(the_column & "1") 
       If the_selection = month_in_review Then 
        ws.Range(the_column & ":" & the_column).EntireColumn.Hidden = False 
        Else 
        ws.Range(the_column & ":" & the_column).EntireColumn.Hidden = True 
        End If 
      Next Rep 
     End If 
    Next ws 
End If 
End Sub 

Sana ulaşmak istediğimiz nokta tamamen emin değildi, bu yüzden Sheet1 yerine ws koydu.

0

Bu örnek göstermek/sütun maçın/ilk hücre bu kodunun yerleştirildiği tabakanın hücresine A1 ile farklı ise tüm diğer sayfalarında sütunları gizler: Eğer

Private Sub Worksheet_Change(ByVal Target As Range) 

    ' exit if not cell A1 
    If Target.row <> 1 Or Target.column <> 1 Then Exit Sub 

    Dim sheet As Worksheet 
    Dim the_selection As String 
    Dim month_in_review As String 
    Dim column As Integer 

    the_selection = Target.Value 

    ' iterate all the sheets 
    For Each sheet In ThisWorkbook.Worksheets 

    ' skip this sheet 
    If Not sheet Is Me Then 

     ' iterate the columns 
     For column = 2 To 379 

     ' get the first cell of the column 
     month_in_review = sheet.Cells(1, column).Value 

     ' hide or show the column if it's a match or not 
     sheet.Columns(column).Hidden = month_in_review <> the_selection 
     Next 

    End If 
    Next 

End Sub 
İlgili konular