2017-07-14 45 views
0

我对编程非常陌生,但一直在尝试学习。我遇到了一个问题,我试图将股票价格从雅虎金融中提取出来,但我需要它跳过第4,6,20,34,41行。这些单元格在C列中也是空白的。我曾尝试使用if语句,其中 如果ws.Range(“K6,K20,K34,K41”)。value =“”然后退出子
但是,这使得整个程序没有运行。 另外,当它运行时,它将创建一个新列,其中前面的“K”列是,而不是只覆盖K,这正是我正在尝试做的。VBA - 跳过行并覆盖该行

谢谢你的帮助!对不起,如果这个问题似乎令人困惑,我在这里澄清任何问题! :)

Sub BtnRefresh() 

Dim ws As Worksheet 
Dim qt As QueryTable 
Dim URL As String  
Dim Symbol As String 
Dim i As Integer 
Dim Last As Integer 
Set ws = Worksheets("Current Portfolio") 



Last = ws.Range("C100").End(xlUp).Row 

For i = 1 To Last 
    Symbol = Symbol & ws.Range("C" & i).Value & "+" 

Next i 


URL = "http://download.finance.yahoo.com/d/quotes.csv?s=" & Symbol & "&f=l1" 

Set qt = ws.QueryTables.Add(_ 
    Connection:="URL;" & URL, _ 
    Destination:=Range("K5")) 
     qt.BackgroundQuery = True 
     qt.SaveData = True 

     qt.Refresh BackgroundQuery:=False 
     qt.RefreshStyle = xlOverwriteCells 



End Sub 

回答

0

你可以跳过它们,或者你可以改变的空白为零,如:

Last = ws.Range("C100").End(xlUp).Row 

For i = 1 To Last 
    If Cells(i,3).Value="" 
     Cells(i,3).Value="0" 
     Else 
     End If 

    Symbol = Symbol & ws.Range("C" & i).Value & "+" 

Next i 

Range("C4,C6,C20,C34,C41").ClearContents 

这可以让你保持你的符号公式原样。

C中的空白单元格是否需要保持空白?如果是这样,我可以重新工作。

编辑:重新确定这些单元格的内容已被删除。如果你不需要,就不要将该行添加到.ClearContents。

+0

嘿!感谢您的回应,这是一种有效的工作方式,但现在我正在将“N/A”粘贴到“K4:K7”以及K9,K23,K37中 –

+0

嘿!这在我为'我= ** 5 **到最后'谢谢你! –

+0

你碰巧知道如何摆脱出现在细胞中的N/A?我尝试了'Cells.Replace'N/A“,”'',但现在每次运行宏时,整个工作表都会高亮显示。谢谢! –

0

这应该适用于跳过步骤。

Sub BtnRefresh() 

    Dim ws As Worksheet 
    Dim qt As QueryTable 
    Dim URL As String 
    Dim Symbol As String 
    Dim i As Integer 
    Dim Last As Integer 
    Set ws = Worksheets("Current Portfolio") 



    Last = ws.Range("C100").End(xlUp).Row 

    For i = 1 To Last 

     If i = 4 Or i = 6 Or i = 20 Or i = 34 Then 
      'do nothing! 
     Else 
     Symbol = Symbol & ws.Range("C" & i).Value & "+" 

     End If 
    Next i 


    URL = "http://download.finance.yahoo.com/d/quotes.csv?s=" & Symbol & "&f=l1" 

    Set qt = ws.QueryTables.Add(_ 
     Connection:="URL;" & URL, _ 
     Destination:=Range("K5")) 
      qt.BackgroundQuery = True 
      qt.SaveData = True 

      qt.Refresh BackgroundQuery:=False 
      qt.RefreshStyle = xlOverwriteCells 



    End Sub 
+0

嘿!感谢你的回应,但我仍然遇到同样的问题,它仍然粘贴在这些单元格内。 –

+0

我明白了。由于您基本上正在进行复制/粘贴,因此这有点复杂。为了简单起见,为什么不先在Excel中的其他地方写表你的表格(隐藏表格或其他东西),然后开始使用类似于我上面的示例的方式将值或公式写入到你想要的单元格中。有更有效的方法来做到这一点,但这可能会帮助您获得至少可行的方法,然后您可以对其进行优化。 – PGCodeRider

+0

感谢您的建议,我一定会这么做的!我是复制和粘贴的,所以我可以更快地回复这些反应,但我会花更多时间真正查看这些答案并尝试改进它们。 –

0

对于一个易于维护的排除列表为基础的方法,以取代你FOR.. NEXT循环:

exclude = "4/6/20/34" 

For i = 1 To Last 
    If InStr(1, "/" & exclude & "/", "/" & Trim(Str(i)) & "/") = 0 Then Symbol = Symbol & ws.Range("C" & i).Value & "+" 
Next 

至于塔K的问题,如果你不能只是发出一个Refresh为挑数据增长的循环可能改变,那么如何只清除表:

Range("K:K").ClearContents ' or ("K:N") or whatever depending on width of the table? 
+0

嘿CLR,感谢您的回复,但它仍然没有跳过细胞。 –