2017-12-02 6 views
-1

私はこのvbaコードを持っています。私はこのモジュールを1分ごとにリフレッシュして、セルの値を変更したいと思っています。毎分VBAアップデートモジュール

私はApplication.Volatileで試しましたが、それは役に立たないです。 Ctrl + Alt + F9をクリックしたときに表示されます。

ありがとうございました。

Function CryptoQuote() 
Dim strURL As String, strCSV As String 
strURL = "https://min-api.cryptocompare.com/data/price?fsym=BTC&tsyms=USD" 
Set http = CreateObject("msxml2.xmlhttp") 
http.Open "GET", strURL, False 
http.send 
strCSV = http.responsetext 
CryptoQuote = Val(onlydigits(strCSV)) 
Set http = Nothing 

End Function 


Function onlydigits(s As String) As String 

Dim retval As String 
Dim i As Integer 
retval = "" 
For i = 1 To Len(s) 
If Mid(s, i, 1) >= "0" And Mid(s, i, 1) <= "9" Or Mid(s, i, 1) = "." Then 
retval = retval + Mid(s, i, 1) 
End If 
Next 
onlydigits = retval 
End Function 
+0

私はCryptoQuoteをUDF(ユーザ定義関数)として呼び出しているとします。 Sheet1!A1 to = CryptoQuote()。これは正しいです? UDFには通常のSubに比べていくつかの制限があります。 – z32a7ul

+0

https://drive.google.com/file/d/1z91TP2TFxc-QnDuDTu4rUzK7dBuTVIsa/view?usp=sharing –

答えて

0

VBA用のOnTime関数を使用します。 (これはオンライン上の多くの情報)。例:

Application.OnTime Now + TimeValue("00:01:00"), "my_Procedure" 

毎分コードが実行されます。

+0

私はこれをCryptoQuoteに追加して変更しましたが、まだ動作していません。 –

+0

Application.OnTime Now + TimeValue( "00:01:00")、 "CryptoQuote" –

+0

あなたはそれがうまくいきませんでしたか?間違いましたか?あなたはontime関数をトリガするコードを一度実行する必要があります。 –

0

UDFは、この問題のために適切ではありませんので、私はあなたのコードを変更:

Option Explicit 

Public Sub CryptoQuote() 
    Debug.Print Now & " CryptoQuote called" ' In case the value does not change, we will know if it is because this Sub is not called again or because cryptocompare.com sent the same answer 
    Dim strURL As String: strURL = "https://min-api.cryptocompare.com/data/price?fsym=BTC&tsyms=USD" 
    Dim http As Object: Set http = CreateObject("msxml2.xmlhttp") 
    http.Open "GET", strURL, False 
    http.send 
    Dim strCSV As String: strCSV = http.responsetext 
    ThisWorkbook.Worksheets(1).Cells(1, 1).Value = Val(onlydigits(strCSV)) ' Change this to refer to the cell where you would like to see the value 
    Application.OnTime DateAdd("s", 1, Now), "CryptoQuote" 
End Sub 

Function onlydigits(s As String) As String 
    Dim retval As String: retval = "" 
    Dim i As Integer: For i = 1 To Len(s) 
     If Mid(s, i, 1) >= "0" And Mid(s, i, 1) <= "9" Or Mid(s, i, 1) = "." Then 
      retval = retval + Mid(s, i, 1) 
     End If 
    Next 
    onlydigits = retval 
End Function 

一度CryptoQuoteを実行した場合、それが継続的に値を更新します。

ワークブックを開いた後で自動的に更新を開始するには、ThisWorkbookモジュールにModule121を追加します(通常はコードを挿入しますが、VBA画面の左側にMicrosoft Excel Objects/ThisWorkbookを配置します)。

Private Sub Workbook_Open() 
    CryptoQuote 
End Sub 
+0

私は、vba経由ではなく、機能するようにセルを呼びたい –

+0

@MaximBaranFurman:不可能です。 – z32a7ul

+0

最も近いことは、UDF +を使用してサブを繰り返し呼び出すことです(私のソリューションと同じように)、そのセルを再計算します。 – z32a7ul