2017-08-10 9 views
1

Outlook vbaで特定の列を非表示にする方法が見つからない場合があります。私はすべてを試みた。Outlook vbaでExcelの列を非表示にしない

Sub ExportToExcel() 
    Dim xlApp As Object 
    Dim xlWB As Object 
    Dim xlSheet As Object 
    Dim enviro As String 
    Dim strPath As String 
    Dim ns As NameSpace 
    Dim item As Object 
    Dim inbox As MAPIFolder 
    Dim i As Long 
    Dim j As Long 

    ' Get Excel set up 
enviro = CStr(Environ("USERPROFILE")) 
'the path of the workbook 
strPath = enviro & "\Documents\test.xlsx" 
    On Error Resume Next 
    Set xlApp = GetObject(, "Excel.Application") 
    If Err <> 0 Then 
     Application.StatusBar = "Please wait while Excel source is opened ... " 
     Set xlApp = CreateObject("Excel.Application") 
     bXStarted = True 
    End If 
    On Error GoTo 0 
    'Open the workbook to input the data 
    Set xlWB = xlApp.Workbooks.Open(strPath) 
    Set xlSheet = xlWB.Sheets("Sheet1") 
    ' Process the message record 
    `On Error Resume Next 
    For j = 2 To 367 
     If xlSheet.cells(1, j).Value <> Date And xlSheet.cells(1, j).Interior.ColorIndex = 4 Then 
      xlSheet.Columns(j).Interior.ColorIndex = 0 
     End If 
     If xlSheet.cells(1, j).Value = Date Then 
      xlSheet.Columns(j).Interior.ColorIndex = 4 
      For i = 2 To j - 1 
       xlSheet.Columns(i).EntireColumn.Hidden = True 
       Debug.Print xlSheet.cells(1, i).Value 
      Next i 
     Exit For 
     End If 
    Next j 
    xlWB.Worksheets("Sheet1").Columns("A:NB").EntireColumn.AutoFit 
    xlWB.Close 1 
    If bXStarted Then 
     xlApp.Quit 
    End If 
End Sub 

1行目、2017年12月31日に2017年1月1日からと立ち上げた日付が移入され、私のExcelシートの2列目からスタート:私の現在のコードは次のようです。

マクロに、現在の日付より前のすべての日付を非表示にします。 ご覧のとおり、隠れテスト用のdebug.printは意図したとおりに動作し、すべての日付を01.01.2017から現在の日付-1に出力します。

補足として、xlSheet.Columns(i).Color = 5287936も機能しませんでした。

コメントのforの前にOn Error Resume Nextを配置すると、「アプリケーション定義またはオブジェクト定義のエラー」というエラーが表示されます。

すべてのエラーテストを削除した場合、「ActiveXコンポーネントはオブジェクトを作成できません」というエラーが発生します。

もし私がdebug.print xlsheet.columns(i).hiddenならば、新しい発見は、直接のウィンドウに "真の"メッセージを得ます。明らかに、コードはそれが想定していたものとまったく同じですが、有効にならないだけです。

+1

**コメントは、拡張されたディスカッションやデバッグセッションではありません。**コメントにコードを投稿しないでください。誰かがコードや説明を求めたら、それをあなたの質問に編集する必要があります。以前の会話は[チャットに移動]されています(http://chat.stackoverflow.com/rooms/151709/discussion-on-question-by-nalexp-hide-excel-columns-doesnt-work-in-outlook-vba )。 –

+0

実行中のオフィスはどれですか? – 0m3r

+0

私はオフィス2010を使用しています。 – NAlexP

答えて

0

Autofitを手動でお試しください。あなたは隠れた列を隠すことがわかるはずです。

Autofitを移動すると、列が非表示になる前に移動するか、自動調整する列についてより正確になります。

Set xlWB = xlApp.Workbooks.Open(strPath) 
Set xlSheet = xlWB.Sheets("Sheet1") 

xlWB.Worksheets("Sheet1").Columns("A:NB").EntireColumn.AutoFit 

' Process the message record 
For j = 2 To 367 
    If xlSheet.Cells(1, j).Value <> Date And xlSheet.Cells(1, j).Interior.ColorIndex = 4 Then 
     xlSheet.Columns(j).Interior.ColorIndex = 0 
    End If 

    If xlSheet.Cells(1, j).Value <> Date And xlSheet.Cells(1, j).Interior.ColorIndex <> 0 Then 
     xlSheet.Columns(j).Interior.ColorIndex = 4 
    End If 

    If xlSheet.Cells(1, j).Value = Date Then 
     xlSheet.Columns(j).Interior.ColorIndex = 4 
     For i = 2 To j - 1 
      xlSheet.Columns(i).EntireColumn.Hidden = True 
      Debug.Print xlSheet.Cells(1, i).Value 
     Next i 
     Exit For 
    End If 

Next j 
関連する問題