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年
コードがあるのですか?
ベスト私はどのポイントがクラッシュするのかを確認するためにコード内にブレークを設定すると言うことができます。そのコードは十分なメモリではないのでエラーになりますが、行を見つけた後、あなたが問題を解決することができるか、またはそれ以上に助けることができるかのいずれかで問題を引き起こしているコード –
'Symbol = Worksheets(" Storage Sheet ")の特定の値に対してクエリが失敗する可能性がありますCells(a、1)'、おそらく6番目の値。 Symbolの不正な/空の値でコードを実行するとコードが失敗しました –