2016-05-20 19 views
0

Yahooの金融Webサイトから会社の名前に基づいて情報を取得し、Excelに配置するマクロがあります。私はF8を使用してそれを実行すると、マクロとExcelは正常に実行されます。しかし、F5(ブレークなし)を使用して実行しようとすると、5回目の反復を超えることはありません(5.5k回の反復が行われます)。VBAの実行中にMS Excelがクラッシュする

私が実行しているラップトップは、2.2GHzのi-7 2670QMチップ、8GB RAM、64ビットOS(Win 7)を搭載したDell XPSです。それはマクロが動作するように動作するように取得する方法について

Sub Yahoo_Company_List() 

Application.ScreenUpdating = False 

On Error GoTo ErrorHandler 

a = 3 

'While Worksheets("Storage Sheet").Cells(a, 1) <> vbNullString 
While a < 10 

    Worksheets("Downloads").Activate 
    Columns.Select 
    Selection.ClearContents 

    Symbol = Worksheets("Storage Sheet").Cells(a, 1) 

    With ActiveSheet.QueryTables.Add(Connection:= _ 
     "URL;https://uk.finance.yahoo.com/q/is?s=" & Symbol & "&annual", Destination:=Range(_ 
     "$A$1")) 
     .Name = "is?s=" & Symbol & "&annual" 
     .FieldNames = True 
     .RowNumbers = False 
     .FillAdjacentFormulas = False 
     .PreserveFormatting = True 
     .RefreshOnFileOpen = False 
     .BackgroundQuery = True 
     .RefreshStyle = xlInsertDeleteCells 
     .SavePassword = False 
     .SaveData = True 
     .AdjustColumnWidth = True 
     .RefreshPeriod = 0 
     .WebSelectionType = xlSpecifiedTables 
     .WebFormatting = xlWebFormattingNone 
     .WebTables = "9" 
     .WebPreFormattedTextToColumns = True 
     .WebConsecutiveDelimitersAsOne = True 
     .WebSingleBlockTextImport = False 
     .WebDisableDateRecognition = False 
     .WebDisableRedirections = False 
     .Refresh BackgroundQuery:=False 
    End With 

    With ActiveSheet.QueryTables.Add(Connection:= _ 
     "URL;http://finance.yahoo.com/q/bs?s=" & Symbol & "+Balance+Sheet&annual", Destination _ 
     :=Range("$A$41")) 
     .Name = "bs?s=" & Symbol & "+Balance+Sheet&annual" 
     .FieldNames = True 
     .RowNumbers = False 
     .FillAdjacentFormulas = False 
     .PreserveFormatting = True 
     .RefreshOnFileOpen = False 
     .BackgroundQuery = True 
     .RefreshStyle = xlInsertDeleteCells 
     .SavePassword = False 
     .SaveData = True 
     .AdjustColumnWidth = True 
     .RefreshPeriod = 0 
     .WebSelectionType = xlSpecifiedTables 
     .WebFormatting = xlWebFormattingNone 
     .WebTables = "9" 
     .WebPreFormattedTextToColumns = True 
     .WebConsecutiveDelimitersAsOne = True 
     .WebSingleBlockTextImport = False 
     .WebDisableDateRecognition = False 
     .WebDisableRedirections = False 
     .Refresh BackgroundQuery:=False 
    End With 

    Range("A91").Select 
    With ActiveSheet.QueryTables.Add(Connection:= _ 
     "URL;http://finance.yahoo.com/q/cf?s=" & Symbol & "+Cash+Flow&annual", Destination:= _ 
     Range("$A$91")) 
     .Name = "cf?s=" & Symbol & "+Cash+Flow&annual" 
     .FieldNames = True 
     .RowNumbers = False 
     .FillAdjacentFormulas = False 
     .PreserveFormatting = True 
     .RefreshOnFileOpen = False 
     .BackgroundQuery = True 
     .RefreshStyle = xlInsertDeleteCells 
     .SavePassword = False 
     .SaveData = True 
     .AdjustColumnWidth = True 
     .RefreshPeriod = 0 
     .WebSelectionType = xlSpecifiedTables 
     .WebFormatting = xlWebFormattingNone 
     .WebTables = "9" 
     .WebPreFormattedTextToColumns = True 
     .WebConsecutiveDelimitersAsOne = True 
     .WebSingleBlockTextImport = False 
     .WebDisableDateRecognition = False 
     .WebDisableRedirections = False 
     .Refresh BackgroundQuery:=False 
    End With 

    With ActiveSheet.QueryTables.Add(Connection:= _ 
     "URL;https://uk.finance.yahoo.com/q?s=" & Symbol & "&ql=1", Destination:=Range("$A$122")) 
     .Name = "q?s=" & Symbol & "&ql=1_1" 
     .FieldNames = True 
     .RowNumbers = False 
     .FillAdjacentFormulas = False 
     .PreserveFormatting = True 
     .RefreshOnFileOpen = False 
     .BackgroundQuery = True 
     .RefreshStyle = xlInsertDeleteCells 
     .SavePassword = False 
     .SaveData = True 
     .AdjustColumnWidth = True 
     .RefreshPeriod = 0 
     .WebSelectionType = xlSpecifiedTables 
     .WebFormatting = xlWebFormattingNone 
     .WebTables = """table1"",""table2""" 
     .WebPreFormattedTextToColumns = True 
     .WebConsecutiveDelimitersAsOne = True 
     .WebSingleBlockTextImport = False 
     .WebDisableDateRecognition = False 
     .WebDisableRedirections = False 
     .Refresh BackgroundQuery:=False 
    End With 

    Call Reformatting_m.reformatting 

    Worksheets("Calculations").Activate 

    Range("B:F").Select 
    Selection.ClearContents 

    i = 1 

    While i < 109 
     m = 1 
     If Cells(i, 1) <> vbNullString Then 
      While m <= 3 
       DataValue = WorksheetFunction.VLookup(Cells(i, 1), Worksheets("Downloads").Range("A1:F200"), 1 + m, False) 
       If Not IsError(DataValue) Then 
        Cells(i, 1 + m) = DataValue 
       End If 

       If Cells(i, 1) = "Period Ending" Then 
        Cells(i, 1 + m).NumberFormat = "m/d/yyyy" 
       Else 
        Cells(i, 1 + m).NumberFormat = 0 
       End If 
       m = m + 1 
      Wend 
     End If 
     i = i + 1 
    Wend 

    Call FScore_m.FScoreCalc 

' Application.Calculate 

    Worksheets("Storage Sheet").Activate 

    n = 5 
    k = 8 
    p = 2 


    While n < 67 
     If ((p = 9 Or p = 10 Or p = 11 Or p = 12 Or p = 13 Or p = 27) And k = 10) Or k = 11 Or _ 
      ((p = 21 Or p = 22 Or p = 23 Or p = 24 Or p = 25 Or p = 26) And k = 9) Then 
      k = 8 
      p = p + 1 
     ElseIf k < 11 Then 
      Cells(a, n) = Worksheets("Calculations").Cells(p, k) 
      k = k + 1 
      n = n + 1 
     End If 
    Wend 

    a = a + 1 

Wend 

Application.ScreenUpdating = True 

ErrorHandler: 
Application.ScreenUpdating = True 
Exit Sub 

End Sub 

任意の提案を:MS Excelは、次のように2013年

コードがあるのですか?

+0

ベスト私はどのポイントがクラッシュするのかを確認するためにコード内にブレークを設定すると言うことができます。そのコードは十分なメモリではないのでエラーになりますが、行を見つけた後、あなたが問題を解決することができるか、またはそれ以上に助けることができるかのいずれかで問題を引き起こしているコード –

+0

'Symbol = Worksheets(" Storage Sheet ")の特定の値に対してクエリが失敗する可能性がありますCells(a、1)'、おそらく6番目の値。 Symbolの不正な/空の値でコードを実行するとコードが失敗しました –

答えて

1

Callの手順(例:Reformatting_m.reformatting)のコードにアクセスすることができないため、完全な回答を得ることはできません。問題が発生している可能性がありますが、それは記憶が不足していて、「無作為に」クラッシュするようなものでした。

変数を作成して作業することをお勧めします。例: -

このように作業すると、ブックへの接続が少なくなるため、リソースが解放され、クラッシュが発生しない可能性があります。

関連する問題