2011-02-03 4 views
1

自分の環境内のサーバーのディスク容量に関するExcelベースのレポートを生成するVBスクリプトを作成しようとしています。私は乗り越えることができない3つのハードルが残っています。VBスクリプトで必要なヘルプとExcelワークシートの作成

  1. ワークシート内のすべての列/セルをどのように配置することができますか? 25行目でこれをやってみましたが、 "RangeクラスのHorizo​​ntalAlignmentプロパティを設定できません"というエラーがスローされます。

  2. 一部のサーバーには、複数のドライブ(たとえば、C、D、E)があります。スクリプトがレポートを生成すると、最後のドライブ(たとえばE)のみが表示されます。各サーバーのすべてのドライブを表示するにはどうすればよいですか?

  3. スクリプトを実行すると、現在の日付のディスク使用量でレポートを追加したいと思います。現時点では、既存のセルを当日のディスク使用量に置き換えます。次のように

私のスクリプトのコードは次のとおりです。

On Error Resume Next 

Const ForReading = 1 
Const HARD_DISK = 3 

x = 1 

dtmDate = Date 

strDay = Day(Date) 
strMonth = Month(Date) 
strYear = Right(Year(Date), 2) 

strFileName = "C:\Users\cvandal\Desktop\Scripts\Server_Disk_Space_Report.xlsx" 

Set objFSO = CreateObject("Scripting.FileSystemObject") 

If objFSO.FileExists("C:\Users\cvandal\Desktop\Scripts\Server_Disk_Space_Report.xlsx") Then 
    Set serverList = objFSO.OpenTextFile("servers.txt", ForReading) 

    Set objExcel = CreateObject("Excel.Application") 
    objExcel.Workbooks.Open "C:\Users\cvandal\Desktop\Scripts\Server_Disk_Space_Report.xlsx" 
    objExcel.Visible = True 
    objExcel.Columns("A:ZZ").ColumnWidth = 25 
    objExcel.Columns("A:ZZ").HorizontalAlignment = xlHAlignLeft 
    objExcel.Cells(2, 1).Value = "Server Disk Space Report" 
    objExcel.Cells(4, 1).Value = dtmDate 
    objExcel.Cells(5, 1).Value = "Drives:" 
    objExcel.Cells(6, 1).Value = "Total Capacity (in GB):" 
    objExcel.Cells(7, 1).Value = "Used Capacity (in GB):" 
    objExcel.Cells(8, 1).Value = "Free Space (in GB):" 
    objExcel.Cells(9, 1).Value = "Free Space (in %):" 

    Do Until serverList.AtEndOfStream 
     x = x + 1 

     strComputer = serverList.ReadLine 

     Set objWMIService = GetObject("winmgmts:{impersonationlevel=impersonate}!\\" & strComputer & "\root\cimv2") 
     Set colDisks = objWMIService.ExecQuery("SELECT * FROM Win32_LogicalDisk WHERE DriveType = " & HARD_DISK & "") 

     If Err.Number <> 0 Then 
      'WScript.Echo "Error: " & Err.Number 
      'WScript.Echo "Error (Hex): " & Hex(Err.Number) 
      'WScript.Echo "Source: " & Err.Source 
      'WScript.Echo "Description: " & Err.Description 

      objExcel.Cells(4, x).Value = strComputer & " - " & Err.Description 
      objExcel.Cells(4, x).Columns.AutoFit 

      Err.Clear 
     Else 
      For Each objDisk in colDisks 
       drives = "Error" 
       totalCapacity = 0 
       freeSpace1 = 0 
       usedCapacity = 0 
       freeSpace2 = 0 

       drives = objDisk.DeviceID 
       totalCapacity = Round((objDisk.Size/1073741824), 2) 
       freeSpace1 = Round((objDisk.FreeSpace/1073741824), 2) 
       usedCapacity = Round((totalCapacity - freeSpace1), 2) 
       freeSpace2 = Round((freeSpace1/totalCapacity)*100, 0) 

       If freeSpace2 > 20 Then 
        objExcel.Cells(4, x).Value = strComputer 
        objExcel.Cells(5, x).Value = drives 
        objExcel.Cells(6, x).Value = totalCapacity & " GB" 
        objExcel.Cells(7, x).Value = usedCapacity & " GB" 
        objExcel.Cells(8, x).Value = freeSpace1 & " GB" 
        objExcel.Cells(9, x).Value = freeSpace2 & "%" 
        objExcel.Cells(9, x).Interior.Color = RGB(198,239,206) 
       ElseIf freeSpace2 < 10 Then 
        objExcel.Cells(4, x).Value = strComputer 
        objExcel.Cells(5, x).Value = drives 
        objExcel.Cells(6, x).Value = totalCapacity & " GB" 
        objExcel.Cells(7, x).Value = usedCapacity & " GB" 
        objExcel.Cells(8, x).Value = freeSpace1 & " GB" 
        objExcel.Cells(9, x).Value = freeSpace2 & "%" 
        objExcel.Cells(9, x).Interior.Color = RGB(255,199,206) 
       Else 
        objExcel.Cells(4, x).Value = strComputer 
        objExcel.Cells(5, x).Value = drives 
        objExcel.Cells(6, x).Value = totalCapacity & " GB" 
        objExcel.Cells(7, x).Value = usedCapacity & " GB" 
        objExcel.Cells(8, x).Value = freeSpace1 & " GB" 
        objExcel.Cells(9, x).Value = freeSpace2 & "%" 
        objExcel.Cells(9, x).Interior.Color = RGB(255,235,156) 
       End If 
      Next 
     End If 
    Loop 
Else 
    Set objExcel = CreateObject("Excel.Application") 
    objExcel.Visible = False 

    Set objWorkbook = objExcel.Workbooks.Add() 
    objWorkbook.SaveAs(strFileName) 

    objExcel.Quit 

    WScript.Echo "Server_Disk_Space_Report.xlsx has been created. Please re-run the script." 
End If 

答えて

2
  1. xlHAlignLeftという値の定数が定義されているように見えません。

  2. あなたのディスクのループの内側にカウンターxをインクリメントする必要があります:あなたはおそらく、あなたが出力する方法にあなたが応じて、カウンタをインクリメント場所を正確にコード内でプレイする必要があります

    For Each objDisk in colDisks 
        x = x + 1 ' <-- add this line 
    

    見てください。私は私の例に置いた場所は、各マシン間に空白の行をもたらすだろうと思う。

  3. ここでは、常にデフォルトの1ではなく、xを最初の使用可能な行に初期化します。次のコードは、最初の列( 'A')で最後の空でない行を検索します。 (reference

    Const xlUp = -4162 
    x = objExcel.Cells(Rows.Count, 1).End(xlUp).Row 
    
0

はあなたが.xlsファイルにHTMLテーブルのためのマークアップを入れて、エクセルでそれを開くことができることをご存知ですか? Excel 2000でも動作します。それを試してみると、 "Excel.Application" COMオブジェクトを作成する必要がないほど幸せになれます!

関連する問題