4

名前付き範囲を削除しようとすると、「実行時エラー '1004': アプリケーション定義またはオブジェクト定義のエラー」というメッセージが表示される理由がわかりません。

.csv ファイルからデータをインポートし、範囲に「history」という名前を付けるために使用されるコードを次に示します。

With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\Users\<user name>\Downloads\history.csv", Destination:=Range(destCell))
    .Name = "history"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .TextFilePromptOnRefresh = False
    .TextFilePlatform = 437
    .TextFileStartRow = 3
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = False
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = True
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(3, 1, 2, 1, 1)
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
End With

「履歴」という名前の範囲を削除するために使用されるコードを次に示します。その直前の行は、名前付き範囲を見つけるのに問題なく機能することに注意してください。名前を削除しないだけです。

Application.Goto Reference:="history"
ActiveWorkbook.Names("history").Delete
4

1 に答える 1

5

回答:問題は、ワークブックが名前付き範囲の名前属性の一部としてワークシート名を使用していたことです。具体的には、名前に history!history を使用していました。

トラブルシューティングの方法: http://www.ozgrid.com/forum/showthread.php?t=49079&page=2の同様の質問に投稿された次のコードを使用しました。

Dim nameRng As Name 
Dim varVal As Variant 
On Error Resume Next 
For Each nameRng In ActiveWorkbook.Names 
    varVal = Range(nameRng.Name).Value 
    nameRng.Delete 
Next

VBA エディタの [ローカル] ウィンドウで、この変数の nameRng.Name が文字列 "history!history" であることがわかりました。

改訂されたコード: Application.Goto Reference:="history" 行を削除しました。これは本質的に機能しないコード行 (選択アクションに似ています) であり、インポートされた範囲の名前を削除するコードとしてこれを残しました。 :

ActiveWorkbook.Names("history!history").Delete

プラットフォーム: Windows 7 Professional で Excel 2013 を使用していました

于 2014-08-19T22:29:48.333 に答える