0

以下のようにvbscriptでコードを書きましたが、スクリプトを実行すると、「範囲」が未定義であるというエラーが表示されます。エラーが何であるかを言って、ここで私を助けることができますか?

For TaskCounter = 1 to 35    
  TaskRangeFrom="Task"&TaskCounter&" Start Date"    
  TaskRangeTo="Task"&(TaskCounter+1)&" Name"    
  objSheet6.Range(Range(TaskRangeFrom).Offset(,1), _ 
  Range(TaskRangeTo).Offset(,-1)).EntireColumn.Delete
Next 

前もって感謝します。

4

3 に答える 3

0

@NickSlashが昨日述べたように、列に「ビジネスプロセスID」(スペースを含む)のような範囲名を付けているとは思えません。ただし、これはバージョンの問題である可能性があるため、「TaskB」という名前の列の「列全体」範囲オブジェクトを取得する方法を示します(「名前の定義」ダイアログを使用)。

' Range by Name
Set oRng = oWs.Range("TaskB")

(列)番号で2番目の列の範囲を取得するには、次を使用します。

' Range by Number
Set oRng = oWs.Cells(1, 2).EntireColumn

注意:行番号と列番号は1で始まります。したがって、「。Offset(、1)」コードは非常に怪しげに見えます。「不明なランタイムエラー」が発生した可能性があります。

私が思うに、最初の行に列のタイトルを書き込んだ場合は、その行の列をループして値を確認する必要があります。

' Range by Lookup
Set oRng = Nothing
For nCol = 1 To 5
    If "Title B" = oWs.Cells(1, nCol).Value Then
       Set oRng = oWs.Cells(1, nCol).EntireColumn
       Exit For
    End If
Next

実験したい場合は、これらのスニペットを次のようなテストコードに挿入します。

Dim oFS    : Set oFS = CreateObject("Scripting.FileSystemObject")
Dim sDir   : sDir    = oFS.GetAbsolutePathname("..\xls")
Dim sFSpec : sFSpec  = oFS.BuildPath(sDir, "work.xls")
' Start clean
oFS.CopyFile oFS.BuildPath(sDir, "13763603.xls"), sFSpec

' Open .XLS
Dim oXls : Set oXls = CreateObject("Excel.Application")
Dim oWb  : Set oWb  = oXls.Workbooks.Open(sFSpec)
Dim oWs  : Set oWs  = oWb.Worksheets(1)
Dim oRng, nCol

' Range by XXX
...

oXls.Visible = True
WScript.Stdin.ReadLine
If Not oRng Is Nothing Then
   oRng.Delete
   WScript.Stdin.ReadLine
End If
oXls.Visible = False
oWb.Close False
oXls.Quit

証拠を与えるための写真:

前

後

于 2012-12-08T18:33:18.897 に答える
0

VBScript比較していくつかの複雑さが見られVBAたので、次のかなり怠惰な方法をお勧めします。

ほとんどのオフィス アプリ (Excel もその 1 つ) で VBScript 関連の処理を実行する最も簡単な方法は、マクロの記録を開始し、必要に応じて手動で実行し、生成された VBA を読み取り、その VBA を VBScript に変換することです。

とにかく、ここに役立つコードがあります。列 E を削除します。

Const xltoLeft = -4131
StrName as string
StrName = "myfield"
Set NewWorkBook = objExcel.workbooks.add()
With objExcel
  .Sheets("Sheet1").Select '-- select is a very bad practice, I'll update it later
  '-- run your for loop
       'for i= blah blah
            If range.offset(0,i) = StrName then
                 Range.offset(0,i).Entirecolumn.delete xltoLeft
                 Msgbox "magical deletion"
                 Exit for
            End if
       'next i
 End With

参考:VBSCRIPTでEXCEL COLUMNを削除

于 2012-12-07T13:12:26.437 に答える
0

VBScript で列全体を削除するには、次のようにします。これにより、列A全体が削除されます

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open _
    ("C:\myworkbook.xlsx")

objExcel.Visible = True
objWorkbook.Worksheets("Sheet1").Range("A:A").Delete

VBA (マクロ) では、以下のコードを呼び出すだけです。これにより、アクティブ シートの A 列が削除されます。

Range("A:A").Delete
于 2012-12-07T15:18:50.403 に答える