[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『EXCELが終了する原因と修正方法』(初心者のM)
ファイルのフルパスをドラッグ&ドロップで取得したくて下記のURLを参考にコードを拝借してコードを書きました。
(コードの変更が一部あります)
https://excel.syogyoumujou.com/memorandum/d_and_d_1.html
コード自体は作動するのですが
ファイルのドラッグ&ドロップの後でEXCEL自体が終了してしまいます。
(ユーザーフォームが閉じられてもEXCEL自体は終了させたくない)
原因は、どこに有るのでしょうか ?
また、修正方法を教えてください。
ユーザーフォームのフォームモジュールに以下のコード
Option Explicit
Private Sub ListView1_OLEDragDrop(Data As MSComctlLib.DataObject, _
Effect As Long, Button As Integer, _ Shift As Integer, _ x As Single, _ y As Single) Dim i As Long Dim strFilesPath() As String With Me AppActivate .Caption 'ユーザーフォームをアクティブにする .ListView1.ListItems.Clear If Data.Files.Count < 1 Then Exit Sub '引数Data ReDim strFilesPath(1 To Data.Files.Count) For i = 1 To Data.Files.Count strFilesPath(i) = Data.Files(i) Next 'MsgBox Join$(strFilesPath, vbCrLf) Worksheets("Label").Range("H2") = Join$(strFilesPath, vbCrLf) Unload UserForm1 End With End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
With Excel.Application If 1 < .Workbooks.Count Then .Visible = True With .ThisWorkbook .Saved = True .Close End With Else .Visible = True .DisplayAlerts = False .Quit End If End With End Sub
標準モジュールに以下のコード
Public Sub Main_Form_Show()
'Excel.Application.Visible = False UserForm1.Show vbModeless 'フォームが開いたままの状態でExcelの操作は可能。 End Sub
< 使用 Excel:Office365、使用 OS:Windows10 >
※ListViewコントロールは64bit版のOfficeに対応していない。
以下のコードやサンプルファイルは32bit版のExcelを対象とする。
とありました。
自分のOfficeは64bit版なのでこれがやはり原因でしょうか ?
原因であれば、今回のコードが使えないことになり
他の手段(コード)を考える必要が出てきます。
(初心者のM) 2022/05/05(木) 14:25
参考になりそうな気がするですよ。 https://www.excel.studio-kazu.jp/kw/20181211140007.html 頑張ってください。 (あみな) 2022/05/05(木) 15:07
記事を見るとAbyssさんの記事が参考になりそうなので見てみました。
Abyssさんのコードで
>(標準モジュール) IDropTarget interfaceとして使用
>'--------------------------------------------------------------------
Public Type TDragDrop以下を標準モジュールにコピペとの事だと思うのですが
Sub()から始まっていないし、#ifとか#Else、#End ifなど
私が知らない見かけないコードがあります。
どう解釈すれば良いのでしょうか ?
(初心者のM) 2022/05/05(木) 16:21
もうひとつの
「WebBrowserコントロール」の方法で旨く行きそうです。
https://qiita.com/Hacomo/items/74d881f0aecef8cf513e
現在進行中です。
(初心者のM) 2022/05/05(木) 16:50
>現在進行中です。
頑張って٩(,,•ω•,,)و⚑
>Abyssさんのコードで >どう解釈すれば良いのでしょうか ?
Typeステートメント http://officetanaka.net/excel/vba/statement/Type.htm
第110回.ユーザー定義型・構造体(Type) https://excel-ubara.com/excelvba1/EXCELVBA410.html
Windows API を使う(Declare ステートメント) https://excelwork.info/excel/windowsapideclare/
Declare ステートメント https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/declare-statement http://officetanaka.net/excel/vba/statement/Declare.htm
(あみな) 2022/05/05(木) 17:22
URLの記事と同じくTextBoxとLabelをフォームに配置して標準モジュールから
ユーザーフォームを表示させてファイルをD&DしてTEXTボックスに取得までは旨く処理されますが
その次のMsgBoxが表示されずにEXCELの最上部がブリンク状態で停止されたままになります。
原因は何でしょうか ?
'-------------------------------
'UserForm1 のコード
Option Explicit
Private Sub WebBrowser1_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, Flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As Variant, Cancel As Boolean)
TextBox1.Text = URL Cancel = True Worksheets("Label").Range("H2") = TextBox1.Text MsgBox "Worksheets(Label).Range(H2)に取得しました。" Unload UserForm1 End Sub ’-----------------------------
'呼び出し側の標準モジュールのコード
Public Sub Main_Form_Show()
'Excel.Application.Visible = False UserForm1.Show vbModeless 'フォームが開いたままの状態でExcelの操作は可能。 End Sub
(初心者のM) 2022/05/05(木) 17:30
こんな感じ。 [[20181211140007]] 『64bitExcelでフォームにD&Dしたファイルパスの取得方法』(ぷー)
また、好みですが↓のようにすればハイパーリンクにできますよ。
Typeステートメント http://officetanaka.net/excel/vba/statement/Type.htm
第110回.ユーザー定義型・構造体(Type) https://excel-ubara.com/excelvba1/EXCELVBA410.html
Windows API を使う(Declare ステートメント) https://excelwork.info/excel/windowsapideclare/
Declare ステートメント https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/declare-statemen http://officetanaka.net/excel/vba/statement/Declare.htm
(もこな2) 2022/05/05(木) 17:37
そうですね^^...テスト https://www.petitmonte.com/bbs/answers?question_id=23724
【メモ】お忙しい方はスルーしてください。 http://blogwizhook.blog.fc2.com/blog-entry-250.html http://ie.vba-ken3.jp/Events/BeforeNavigate2/
(あみな) 2022/05/05(木) 18:02
多分「そうですね^^...テスト」は、私に対する「17:30」への回答(アドバイス)だと思うのですが
初心者の理解不足でまだ伝えたい事が見えていません。
肝は、下記のコードなのかと思いますが
これを改造すればEXCELの最上部がブリンク状態で停止されたまま先に進まないのが解決されるのですか ?
原理が判らずにまだ先が見えません。
Private Sub WebBrowser1_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, Flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As Variant, Cancel As Boolean)
msgbox URL
If URL <> "http://yahoo.co.jp/" Then Cancel = True End If
(初心者のM) 2022/05/05(木) 18:35
(初心者のM)さんへ
「そうですね^^...テスト」は、(もこな2)さん 2022/05/05(木) 17:37 への返信を兼ねて、今見てたページのURLを張り付けただけです。
WebBrowserコントロールの参考文献を見ているだけですよ^^; 解答ではありません。
(あみな) 2022/05/05(木) 18:55
URLを貼り付けて頂けるのは有難いことですが
初心者は、それが回答者が参考になる何かを含んでいると判断して掲載しているので
その意味を汲み取ろうとします。
それが、「見つけたので貼っておきます」のスタンスは拍子抜けです。
(初心者のM) 2022/05/05(木) 19:14
話の流れを見ていただきたいな
返信なら
>○○○
回答
とします。
私は、これで降ります。
(あみな) 2022/05/05(木) 19:23
Private Sub WebBrowser1_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, Flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As Variant, Cancel As Boolean)
TextBox1.Text = URL Cancel = True Worksheets("Label").Range("H2") = TextBox1.Text 'MsgBox "Worksheets(Label).Range(H2)に取得しました。" Unload UserForm1 End Sub
MsgBoxをコメントにするとブリンクしなくなるが
unload UserForm1でユザーフォームを閉じられると
すぐにExcelが一度落ちて回復済みで再起動する。
(同時にExcelが落ちるので、dwwin.exeがWindowsエラー報告を送信しようとしている)
回復済みのEXCELを見ると
Range("H2")にTextBox1.Textに記載されて処理的には問題ない
(初心者のM) 2022/05/06(金) 06:19
>あなみさん、参考になりそうな >あなみさん、へ >あなみさん、へ 回答者に失礼でしょ。 (VAL) 2022/05/06(金) 09:08
Excelがアクティブでないからで、通常動作です。
アクティブにするとmsgboxが表示します。
APIでExcelにアクティブを戻すことも出来ますので、
調べてみては。
>unload UserForm1でユザーフォームを閉じられるとすぐにExcelが一度落ちて回復済みで再起動する。
Excel2016ですが、Excel終了は再現しました。
イベントから抜けてunloadすれば大丈夫かと。
または、Hideなら終了しませんでした。
どうするかは、質問者次第なので、ご自身でロジックを考えられては。
(tkit) 2022/05/06(金) 10:50
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.