-1

いくつかのコンテキスト: - 大きなテーブル (1000x1000) を構築しています - いくつかのケースに値 1 を入力したい - このケースのそれぞれの行と列を別のシートに持っています

これは、テーブルを埋めるために使用するコードです。ご覧のとおり、For ループで Range を使用しています。以前は、より小さなデータセットで機能していました。問題を引き起こしている行は次のとおりです: Sheets("Feuil1.csv").Cells(rng.Value, rng.Offset(, 1).Value) = "1"

Sub FillEdges()
Dim rng As Range
For Each rng In Sheets("Feuil2").Range("A1:A53498")
    Sheets("Feuil1.csv").Cells(rng.Value, rng.Offset(, 1).Value) = "1"    
Next rng
End Sub

いくつかの調査を行うと、時々ワークブックを保存し、閉じて、再度開く必要があることがわかりました。私はそれを試しましたが、VBAは「保存、閉じて、再度開く」コードを考慮していないようです。このヘルプページで何かを理解しようとしました:

http://support.microsoft.com/kb/210684/en-us

これにより、このコードでエラー 91 が発生しました。エラーは 3 行目にあります。

    Sub FillEdges()
        Dim rng As Range, mybook As Workbook

mybook.SaveAs "Macintosh HD:Users:Nicolas:test.xslm", FileFormat:=53
    For Each rng In Sheets("Feuil2").Range("A1:A53498")
    If rng Mod 2500 = 0 Then
                mybook.Close SaveChanges:=True
                Set mybook = Nothing
                Set mybook = Application.Workbooks.Open("Macintosh HD:Users:Nicolas:test.xslm")
            End If
        Sheets("Feuil1.csv").Cells(rng.Value, rng.Offset(, 1).Value) = "1"

    Next rng
    End Sub

このエラー 91 を修正する方法を知っていますか?

したがって、これでエラー 1004 が完全に修正されるかどうかはわかりませんが、正しい方法だと思います。それとも、何か他のことをアドバイスしますか... ?

お時間をいただきありがとうございます。良い一日を過ごしてください。ニコラス。

4

1 に答える 1

0

これが私がやった方法です。ここで重要なのは、コーディングの前にVBAについてさらに学ぶことです。特にファイルのオープン、保存、クローズについて。

結局、私は上で引用したマイクロソフトのWebサイトの例にほとんど触れなかったことに注意してください。

Sub remplir()

Application.ScreenUpdating = False

Dim rng As Range
Dim worksheet1 As Worksheet

Dim iTemp As Integer
Dim oBook As Workbook
Dim iCounter As Long


Set worksheet1 = ActiveWorkbook.ActiveSheet
iCounter = 1

    ' Open the new full of zeros workbook:

    Application.Workbooks.Open "Macintosh HD:Users:Nicolas:vba:test.xlsm"
    Set oBook = ActiveWorkbook



    'iTemp = Application.SheetsInNewWorkbook
    'Application.SheetsInNewWorkbook = 1
    'Set oBook = Application.Workbooks.Add
    'Application.SheetsInNewWorkbook = iTemp

    ' Add a defined name to the workbook
    ' that RefersTo a range:
    oBook.Names.Add Name:="tempRange", _
        RefersTo:="=Sheet1!$A$1"

    ' Save the workbook: (attention extension fausse, mais ça n'empeche rien !)
    oBook.SaveAs "Macintosh HD:Users:Nicolas:vba:test.xslm", FileFormat:=53

    ' Work the sheet in a loop. Eventually,
    ' you get error 1004: Copy Method of
    ' Worksheet class failed.
  For Each rng In worksheet1.Range("A1:A5038")

  If rng.Value > 0 And rng.Row <> 1 Then
  If rng.Value <> rng.Offset(-1, 0).Value Then
  iCounter = iCounter + 1
  End If
  End If

    Sheets("Feuil1").Cells(iCounter, rng.Offset(0, 1).Value + 1) = "1"
    Sheets("Feuil1").Cells(iCounter, 1) = rng.Value
        'Uncomment this code for the workaround:
        'Save, close, and reopen after every 100 iterations:
        If rng Mod 1000 = 0 Then
            oBook.Close SaveChanges:=True
            Set oBook = Nothing
            '(attention extension fausse, mais ça n'empeche rien !)
            Set oBook = Application.Workbooks.Open("Macintosh HD:Users:Nicolas:vba:test.xslm")
        End If

Next rng
于 2013-03-20T04:11:21.767 に答える