5

本当にこれは不思議です。何が起こっているのか説明してみましょう。エクセルファイルのマクロを呼んでいるマクロを言葉で書いた

Set excel = CreateObject("excel.application")
excel.Visible = True
excel.workbooks.Open FileName:=tablePath
IDcolumn = excel.Application.Run("main", generatedExelPath)

マクロという単語から呼び出される「メイン」関数は、呼び出されたExcelファイルから特定のデータをコピーすることによって「単に」新しいExcelファイルを生成することです。

つまり、1つの単語と2つのExcelドキュメントを取得しました。excel1の一部のシートをexcel2にコピーする必要があります。

したがって、私は使用します:

For i = 0 To UBound(copySheets)
    Windows(srcWinName).Activate
    Sheets(copySheets(i)).Activate
    Set AcSh = ActiveSheet
    Windows(destWinName).Activate
    If copySheets(i) = "config" Then
        AcSh.Copy Before:=Sheets(1)
    Else
        AcSh.Copy After:=ActiveSheet
    End If
Next i

ここで、copySheetsには、コピーする必要のあるシートが含まれています。ただし、コピーコマンドはエラーをスローします。「ソースから宛先にコピーできないため、宛先の行と列がソースファイルよりも少ない」のようなもの

Atm excel1は、このエラーが発生しなかっxlsmたファイルであるためです。xlsexcel2を追加するこの行がprobであるかどうか疑問に思います

Workbooks.Add Template:="Workbook"

別のテンプレートを使用する必要があるかもしれませんが、どれかわかりません。

空のxlsmファイルを作成した場合は、それを保存してxlsmから、エラーが発生しないようにする前に、コマンドの代わりにこの空のファイルを開いてください。誰かが私を助けてくれることを願っています。

ああ、私が言及しなければならないことの1つは、Wordマクロから上記のようにExcelマクロを実行するとエラーが発生しますが、Wordを閉じて手動でExcelマクロを実行すると機能します。

編集:それは動作します

アランが言ったように、私はちょうどエクセルオプションを変更しました。ここに彼の投稿。

ああ、なぜそれが起こっているのか知っています。デフォルトのExcel形式を変更する必要があります:Orb>Excelオプション>|保存| >ファイルを「Excelワークブック(.xlsx)」の形式で保存します。現在の設定はExcel97-2003ワークブック(.xls)になります。–アラン8月29日12:09

4

1 に答える 1

3

拡張機能は、.xlsExcel2003ブック形式です。これらは65,536行と256列のみをサポートします。

.xlsx、、.xlsb.xlsmExcel2007ワークブックです。これらは、最大1,048,576行と16,384列をサポートします。

このエラーは、ワークシートを2007年のブックから2003年のブックにコピーしようとしているために発生しています。コピーされるシートの余分な行と列を実際に使用していなくても、行と列の数に制限があるため、これを行うことはできません。

解決策は、.xlsmブックを.xlsファイルとして保存するか、またはその逆で、シートをコピーすることです。または、シート全体をコピーするのではなく、UsedRangeだけをあるシートから別のシートにコピーすることもできますが、行の高さや列の幅などの重要な書式が失われるリスクがあります。


新しいワークブックを追加すると、デフォルトの保存形式でワークブックが作成されます。これをプログラムで.xlsxファイルに設定するには、VBAでデフォルトの保存形式を強制し、ユーザーを混乱させないように元に戻します。

Dim prevSaveFormat As Long 
prevSaveFormat = Application.DefaultSaveFormat 
Application.DefaultSaveFormat = 51  'xlsx
Workbooks.Add 
Application.DefaultSaveFormat = prevSaveFormat

ファイル形式定数の完全なリストはXlFileFormatEnumerationで入手できますが、一般的なものは次のとおりです。

  • 51 = xlOpenXMLWorkbook(2007〜2010年のマクロなし、xlsx

  • 52 = xlOpenXMLWorkbookMacroEnabled(2007〜2010年のマクロありまたはなし、xlsm

  • 50 = xlExcel12(マクロの有無にかかわらず2007-2010年のExcelバイナリワークブック、xlsb

  • 56 = xlExcel8(Excel 2007-2010の97-2003形式、xls

于 2012-08-28T15:15:48.177 に答える