• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAのUserformのボタンからwebクエリ)

VBAのUserformのボタンからwebクエリ

end-uの回答

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

>.Refresh .Refresh BackgroundQuery:=False Refreshメソッドの引数BackgroundQueryを指定してください。 現状はデフォルトのBackgroundQuery:=Trueになっているのでしょう。 Refreshメソッドのヘルプ<引用> ..クエリが実行されると直ちに制御をプロシージャに返す場合は True を設定します。 QueryTables はバックグランドで更新されます。 すべてのデータをシートに取り出した後でのみ、制御をプロシージャに返す場合は False を設定します。 </引用> モーダルのUserformの場合、 BackgroundQuery:=Trueでクエリ実行命令を出して、シート上に結果が表示されないまま、 Userformに制御が返ってしまうと、Userformを開いている間はシート上のデータ更新が待機状態になります。 BackgroundQuery:=Falseだと、シート上のデータ更新後にUserformに制御が返ります。 Userformがモードレスの場合はBackgroundQuery:=Trueでもデータ更新されます。 BackgroundQuery:=Falseにするか、UserformをvbModelessにするか、で対応できます。

master817199
質問者

お礼

完璧な解決法でした。 自力では見つけられない情報だったと思います。 助かりました ありがとうございます。

関連するQ&A

  • VBA Webクエリについて

    VBA初心者です。 VBAを使い、下記「やりたいこと」をしたいのですが、 「質問内容」にありますように、上手くできません…。 基礎がわかっていない為、お粗末な内容かもしれませんが、 教えてください。何卒よろしくお願い致します。 ■やりたいこと シート「1」にあるURLアドレスのリスト(C列)に沿って WEBクエリを実行し、シート「2」に取得したデータを 連続して末行に入力したいです。 ■質問内容 見よう見真似で、下記VBAを作成しました。(1To3は仮の回数です) WEBクエリが実行され、末行に取得データが入力されますが、 1回目、2回目の取得データは消え(長い空白行ができ)、 ラストの3回目のデータのみが残るかたちになります。 取得したデータが消えず、連続してWEBクエリを実行できるよう 下記を添削して頂けませんでしょうか。 ---------------------------------------------------------------- Sub Macro2() Dim Lrow As Long For カウンタ = 1 To 3 Lrow = Worksheets("2").Range("A" & CStr(Rows.Count)).End(xlUp).Row セル範囲 = "C" & カウンタ With ActiveSheet.QueryTables.Add(Connection:= _ "URL;" & Worksheets("1").Range(セル範囲).Value, Destination:=Worksheets("2").Range("A" & Lrow)) .Name = Worksheets("1").Range(セル範囲).Value .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .WebSelectionType = xlEntirePage .WebFormatting = xlWebFormattingNone .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = False .WebDisableRedirections = False .Refresh BackgroundQuery:=False End With Next End Sub

  • Webクエリで困っています

    以下のマクロを作りました。Webクエリで、セルA1に入力してあるURLを読み込んで表を取り込み、必要なところを選択してコピーするようにしたいのです。しかし、実行すると上から3行目まで黄色になってエラーになります。特に3行目には矢印が表示されています。いろいろ調べましたが結局分かりませんでした。宜しくお願いします。 ------------------------------------------------------ Sub クエリで取得() ' ' クエリで取得 Macro ' マクロ記録日 : 2009/7/30 ユーザー名 : charlie ' ' With ActiveSheet.QueryTables.Add(Connection:= _ Range("A1").Value _ , Destination:=Range("A2")) .Name = "resultlist?tbws=x0p01a&hd=20090716&jcd=01_2" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = False .RefreshOnFileOpen = False .BackgroundQuery = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = False .RefreshPeriod = 0 .WebSelectionType = xlEntirePage .WebFormatting = xlWebFormattingNone .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = True .WebDisableRedirections = False .Refresh BackgroundQuery:=False End With Range("A19:Q54").Select Selection.Copy End Sub ----------------------------------------------------------

  • Excel webクエリ データ抽出に時間がかかる

    エクセルのwebクエリを使ってヤフーファイナンスよりデータをダウンロードしたいと考えています。 ネットで調べて以下のようなマクロを組みましたが、実行してから完了するまで1秒ほどかかります。 Sub データ抽出() With Worksheets("test") With .QueryTables.Add(Connection:="URL;http://stocks.finance.yahoo.co.jp/stocks/history/?code=1301.T", Destination:=Range("$A$1")) .WebSelectionType = xlSpecifiedTables .WebTables = "2" .Refresh BackgroundQuery:=False .Parent.Names(.Name).Delete .Delete End With End With End Sub 上のものは【1301】(株)極洋のものですが、これを全銘柄で実行したいのですが、時間がかかりすぎます。 みなさんもそのくらいのスピードで行っているのでしょうか。 改善するところがあれば教えていただきたいです。 OSはwindows7, Excelは2010です。 宜しくお願いします。

  • 複数のユーザーフォームをコマンドボタンにて表示・非表示させるには

    VBA勉強中のものです。 複数のユーザーフォームをコマンドボタンを使用して画面への表示切替を考えております。 例)ユーザーフォーム1,ユーザーフォーム2,ユーザーフォーム3のそれぞれにコマンドボタン1,コマンドボタン2,コマンドボタン3を作成し、   コマンドボタン1→ユーザーフォーム1を表示   コマンドボタン2→ユーザーフォーム2を表示   コマンドボタン3→ユーザーフォーム3を表示 とするようなことを考えおります。  そこで、下記のようにコードを作成したのでですが,一度表示させたユーザーフォームを再度表示させようとコマンドボタンをクリックしたら、「フォームはすでに表示させているのでモーダル表示はできません」とエラーがでてしまいます。   どなたか、どのようにしたらいいかご教授ねがいます。 サンプルコード) --------------------------------------------------- 'UserForm1のコード Private Sub CommandButton2_Click() Call UserForm2_show UserForm1.Hide End Sub Private Sub CommandButton3_Click() Call UserForm3_show UserForm1.Hide End Sub ---------------------------------------------------- 'UserForm2のコード Private Sub CommandButton1_Click() Call UserForm1_show UserForm2.Hide End Sub Private Sub CommandButton3_Click() Call UserForm3_show UserForm2.Hide End Sub ------------------------------------------------------- 'UserForm3のコード Private Sub CommandButton1_Click() Call UserForm1_show UserForm3.Hide End Sub Private Sub CommandButton2_Click() Call UserForm2_show UserForm3.Hide End Sub ------------------------------------------------------------ '標準モジュール コード Sub UserForm1_show() UserForm1.Show End Sub Sub UserForm2_show() UserForm2.Show End Sub Sub UserForm3_show() UserForm3.Show End Sub

  • WEBクエリ

    WEBクエリでヤフーから、時系列で株価を取得するマクロを作っています。 シートAの左に、次々と1銘柄1シートで読み込む場合、下のコードをもっと短くする方法はあるのでしょうか?コードは同じで、銘柄の番号のみ違います。よろしくお願いします。 Sheets("A").Select Sheets.Add ActiveSheet.Name = "2002" With ActiveSheet.QueryTables.Add(Connection:="URL;http://table.yahoo.co.jp/t?s=2002.T&g=d", Destination:=Range("A2")) .Refresh BackgroundQuery:=False End With Range("A1").Select ActiveCell.FormulaR1C1 = "2002" Sheets("A").Select Sheets.Add ActiveSheet.Name = "2202" With ActiveSheet.QueryTables.Add(Connection:="URL;http://table.yahoo.co.jp/t?s=2202.T&g=d", Destination:=Range("A2")) .Refresh BackgroundQuery:=False End With Range("A1").Select ActiveCell.FormulaR1C1 = "2202" Sheets("A").Select Sheets.Add ActiveSheet.Name = "3000" With ActiveSheet.QueryTables.Add(Connection:="URL;http://table.yahoo.co.jp/t?s=3000.T&g=d", Destination:=Range("A2")) .Refresh BackgroundQuery:=False End With Range("A1").Select ActiveCell.FormulaR1C1 = "3000" ・ ・ ・ このような感じで銘柄の番号のみが違うコードが続きます。

  • VBA_UserFormの初期値

    毎度お世話になっております。 UserFormを開いた時に、UserForm内にあるTextBoxに初期値として 文字を入れたいのですが、表示されません。 原因が判りません。判りましたらご教授お願いします。 プロジェクトの状況 ワークシート3枚(内コード有1枚 シート名:表紙) フォーム2つ(フォーム名:UF1・UF2) 表紙にあるAボタンを押したらUF1が開くBでUF2が開くようなマクロです。 シート"表紙"コード Private Sub CommandButtonA_Click() UF1.show End Sub UF1(コード) Private Sub UF1_Initialize() TextBox.Value="文字" End Sub "文字"をUF1フォーム内に最初から出したいと考えてます。 宜しくお願いします。

  • Vba UserForm SetFocus

    ExcelのVbaでUserForm上に英単語のタイピング練習のソフトを作ろうとしていますが、うまくいきません。コントロールのイベントについての理解が不足しているのが分かりました。 ユーザフォーム上の複数のテキストボックス間のフォーカスの移動について教えて下さい。 UserForm1にテキストボックスを3つ、コマンドボタンを1つ配置しました。それぞれTextBox1、TextBox2、TextBox3、CommandButton1とします。 Private Sub CommandButton1_Click() TextBox3.SetFocus ・・・(1) End Sub Private Sub TextBox3_Enter() MsgBox "In TextBox3" TextBox2.SetFocus ・・・(2) End Sub 各TextBoxのTabStopプロパティは「True」、「TabIndex」は番号順になっています。 コマンドボタンのTabStopプロパティは「False」にしています。 フォームを表示し、コマンドボタンをクリックするとエラーが発生します。 (2)の実行の後(?)、(1)がエラー表示されます。 各イベントの発生のタイミング、連鎖、終了等の理解が不足していて、その理由がよく分かりません。どなたか教えていただけないでしょうか。よろしくお願いします。

  • エクセル VBAでWEBページデータを順番に抽出

    J2セル~J2320セルに、異なるWEBページのURLを入力しています。 それぞれのURLから特定のデータを抽出して、K2~K2320セルに表示するにはどうすればよいのでしょうか。 J2のURLからデータを抽出してK2へ表示するだけの単純なVBAは下記のとおり作成しましたが、残りのJ3~J2320についても同様の処理を繰り返したいと思います。 どうすればよいのでしょうか。ご教示ください。 ----------------------------------------------- Sub クエリ抽出() With ActiveSheet.QueryTables.Add(Connection:="URL;" & [J2], Destination:=Range("K2")) .WebSelectionType = xlSpecifiedTables .WebFormatting = xlWebFormattingNone .WebTables = "13" .Refresh BackgroundQuery:=False End With End Sub -----------------------------------------------

  • VBAでオプションボタン変更によって・・・

    エクセルVBAのユーザーフォーム内にあるコンボボックス3つを選択することによりデータ入力を行っています。 この度選択肢を増やすことになり、オプションボタンを2つ追加しようと思っています。 オプションボタンはどちらかを決定することで、コンボボックスの選択内容を変更する予定です。 コンボボックスは大中小分類としており、シート2から抽出したものをシート1に落としている現状をオプションボタン新設により、ボタン1は従来通りシート2から、ボタン2選択時はシート3にあるリストからコンボボックスへ繁栄させようとしたいのですが、方法が分かりません。 どなたか、教えていただけると助かります。 よろしくお願いします。 現在のコードを下記に記します。 Private Sub UserForm_Activate() With UserForm3 .OptionButton1 = True *この段階でボタン2を選択時は、シート3にあるリストよりコンボボックスの内容を抽出したい。 以下中小分類も同様としたい。 .ComboBox1.RowSource = "シート2!A3:A15" .ComboBox1.SetFocus End With End Sub Private Sub ComboBox1_Change() Dim myLlist As String myLlist = ComboBox1 With UserForm3 .ComboBox2.Text = "" .ComboBox3.Text = "" Select Case myLlist Case "大1" .ComboBox2.RowSource = "シート2!B21:B26" Case "大2" .ComboBox2.RowSource = "シート2!B27:B28" End Select End With End Sub Private Sub ComboBox2_Change() Dim myMlist As String myMlist = ComboBox2 With UserForm3 .ComboBox3.Text = "" Select Case myMlist Case "中1" .ComboBox3.RowSource = "シート2!C101:C111" Case "中2" .ComboBox3.RowSource = "シート2!C121:C124" End Select End With End Sub Private Sub OKボタン_Click() With UserForm3 ActiveSheet.Unprotect 行 = ActiveCell.Row 列 = ActiveCell.Column Cells(行, 列) = UserForm3.ComboBox1.Value Cells(行, 列 + 1) = UserForm3.ComboBox2.Value Cells(行, 列 + 2) = UserForm3.ComboBox3.Value ActiveSheet.Protect End With End Sub

  • ウェブクエリのマクロが不正な時がある

    お世話になります、 エクセルにウェブクエリのマクロを組み込んで動かしたら 実行結果がOKの場合と駄目な場合があります。 ヤフーの株価ランキングから4ページ分をシートに 落とす処理なのですが7~8回に一度くらいページ があるのに株価表示がないような落ち方をします。 IE6で実行しています。 ソースは '1-4Loop処理 For i = 1 To UBound(urls) 'ワークシート追加 Worksheets("Sheet1").Select Worksheets.Add before:=Worksheets(ActiveSheet.Name) '名前を設定 ActiveSheet.Name = "rank" & i 'webクエリ取得対象シートをアクティブ Set ws = Worksheets("rank" & i) ws.Activate 'QueryTableがなければ追加する If ws.QueryTables.Count = 0 Then 'QueryTableの設定 With ws.QueryTables.Add("URL;", ws.Range("A1")) .RefreshStyle = xlOverwriteCells .AdjustColumnWidth = False .WebSelectionType = xlAllTables .WebFormatting = xlWebFormattingNone .WebTables = "17" End With End If With ws.QueryTables(1) .Connection = urls(i) .BackgroundQuery = True .Refresh BackgroundQuery:=False End With Next 宜しくお願いいたします。