0

「NowLoading...」というテキストと背景色#000000 alpha = 0.5の形状で、FHD画面と同じ大きさです。

時間のかかる関数がユーザーによって実行されたときに表示し(ご覧のとおり、他の場所からデータをロードし、ダーティな作業を行った場合)、vbaがジョブを終了した後に再び非表示にすることを目的としていました。

ただし、最初はまったく表示されず、vbaが実行された後、フラッシュのように表示および非表示になります。

はい、私はMsgBoxを使用してすべてをチェックしました。実際には、最後に表示および非表示にするだけです。

質問:

1)それで、これは私だけに起こっているのですか?

2)(1)そうでない場合、なぜこれが起こっているのですか?シェイプ/OLEレイヤーは最後にのみ更新されますか(* 1)?技術的な詳細をいただければ幸いです。

3)この形状にその仕事をさせることを主張する場合、Excel 2007で可能ですか?そしてどうやって?

4)代替ソリューション(* 3)?言わないで。

Sheets("Sheet1").Range("A1").Value = "Now Loading..."
'balabala
Sheets("Sheet1").Range("A1").Value = "Finish!"

* 1)ここで「最後に更新する」とは、Excelがすべての図形の非表示/表示イベントを収集し、一度に実行することを意味します。ですから、時間のかかる機能で隠して同じ形を見せ続けると、まばたき点滅してしまいます〜

* 2)以下のコード例。私が共有できる最短のもの。'Notesあなたが私がやろうとしていることを理解し、MsgBox私のチェックポイントをあなたに示すために。

Sub Item_Genre_Reset_Revise()
'↓ Show the loading notification.
Sheets("Item.Genre").Shapes("OLE_Loading").Visible = True
MsgBox "I thought the shape would show now, but didn't."

'↓ Merge 3 pieces into 1 piece.
Application.ScreenUpdating = False
Sheets("Item.Genre").Range("AJ5:AL37").Value = Sheets("Item.Genre").Range("Q5:S37").Value
Sheets("Item.Genre").Range("AJ38:AL70").Value = Sheets("Item.Genre").Range("V5:X37").Value
Sheets("Item.Genre").Range("AJ71:AL103").Value = Sheets("Item.Genre").Range("AA5:AC37").Value
MsgBox "No. :("

'↓ Sort the mergerd one.
ActiveWorkbook.Worksheets("Item.Genre").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Item.Genre").Sort.SortFields.Add Key:=Range("AJ5:AJ103"), _
    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Item.Genre").Sort.SortFields.Add Key:=Range("AK5:AK103"), _
    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Item.Genre").Sort.SortFields.Add Key:=Range("AL5:AL103"), _
    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Item.Genre").Sort
    .SetRange Range("AJ4:AL103")
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With
MsgBox "No. :( :("

'↓ Reload sorted items from internal memory to 3 pieces, as to give up all revise too for another function.
Call Item_Genre_Escape_Internal
MsgBox "No. :( :( :("

'↓ Reset revise counter.
Sheets("Item.Genre").Range("T41").Value = 0
MsgBox "No. :( :( :( :("

Application.ScreenUpdating = True

'↓ Hide the loading notification.
Sheets("Item.Genre").Shapes("OLE_Loading").Visible = False
MsgBox "Now the shape flash!"
End Sub

Sub Item_Genre_Escape_Internal()
Sheets("Item.Genre").Range("Q5:T37").Value = Sheets("Item.Genre").Range("AJ5:AM37").Value
Sheets("Item.Genre").Range("V5:Y37").Value = Sheets("Item.Genre").Range("AJ38:AM70").Value
Sheets("Item.Genre").Range("AA5:AD37").Value = Sheets("Item.Genre").Range("AJ71:AM103").Value
Sheets("Item.Genre").Range("T41").Value = 0
End Sub

* 3)すべてのシートにグローブを設定します。

Application.DisplayFormulaBar = False
ActiveWindow.DisplayHeadings = False
ActiveWindow.DisplayHorizontalScrollBar = False
ActiveWindow.DisplayVerticalScrollBar = False
Application.DisplayStatusBar = False
ActiveWindow.DisplayWorkbookTabs = False
Worksheets("Item.Genre").Protect Password:="******", _
    UserInterfaceOnly:=True

どうもありがとうございます。

解決:

それぞれに追加Application.Wait Now + TimeValue("00:00:01")しますSheets("Item.Genre").Shapes("OLE_Loading").Visible = True。形状は設計どおりに表示されますが、それでも1〜2秒の遅れがあります。理由はわかりません。

4

2 に答える 2

0

を変更するwidthと、形状が更新されます。サンプル:

ThisWorkbook.Sheets(1).Shapes("Oval 1").DrawingObject.Width = xxx
于 2013-10-23T06:57:39.063 に答える
0

返信を編集しましたが、これはむしろあなたが探しているものだと思います。
確かに、別のサブルーチンを呼び出すと形状が表示されないことに気付きました。
1 秒の「待機」を導入すると、問題は解決します。

Sub Shapes()

Dim oShape              As Shape


Application.ScreenUpdating = True

Set oShape = ThisWorkbook.Sheets(1).Shapes("Oval 1")
oShape.Visible = msoTrue

Application.Wait Now + TimeValue("00:00:01")

Call Other_Sub

oShape.Visible = msoFalse

End Sub

Sub Other_Sub()

Application.Wait Now + TimeValue("00:00:05")

End Sub

期待どおりの結果が得られたらお知らせください。

于 2012-07-26T09:34:42.277 に答える