C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[11]: エクセルのVBAでのエラーの原因と対処方法について


(過去ログ 171 を表示中)

[トピック内 14 記事 (1 - 14 表示)]  << 0 >>

■98343 / inTopicNo.1)  エクセルのVBAでのエラーの原因と対処方法について
  
□投稿者/ 初心者 (3回)-(2021/11/03(Wed) 09:12:38)

分類:[Microsoft Office 全般] 

2021/11/03(Wed) 10:03:44 編集(投稿者)
お世話になります。
エクセルでのVBAの勉強を始めました。初心者です。



以下のようなエクセルのセルがあります。
VBAがわからないので、あるHPからコードをとってきたのですが
2B-8D を選択して【表示】-【マクロ】-【アウトライン_列下げ階層】を
実行すると400 というエラーが発生します。

なにが間違っているのでしょうか?
使用しているエクセルは2013です。

--------------------------------------------------
	A	B	C	D	E
1
2		A
3			B
4			C
5				D
6			E
7				F
8			G
9
10


--------------------------------------------------
Option Explicit

Sub アウトライン_列下げ階層()
    outlineTree probe:="columnPosition"
End Sub

Private Sub outlineTree(probe As String)
    If TypeName(Selection) <> "Range" Then Beep: Exit Sub
    
    Dim titleRng As Range
    Set titleRng = Intersect(ActiveSheet.UsedRange, Selection.Areas(1))
    If titleRng Is Nothing Then Beep: Exit Sub
    
    Application.ScreenUpdating = False
    
    ActiveSheet.Outline.SummaryRow = xlAbove
    titleRng.ClearOutline
    Call traverseList(titleRng, 0, probe:=probe, doProc:="doGroup")
    
    Application.ScreenUpdating = True
End Sub

Private Function traverseList(curRng As Range, curLevel As Integer, probe As String, doProc As String) As Range
    Dim i As Integer
    For i = 1 To curRng.Rows.Count - 1
        Dim subRng As Range
        Dim nextLevel As Integer
        
        Set subRng = Intersect(curRng, curRng.Offset(i))
        nextLevel = Application.Run(probe, subRng.Rows(1), curLevel)
        If nextLevel > curLevel Then
            Set subRng = traverseList(subRng, nextLevel, probe, doProc)
            Set subRng = Application.Run(doProc, subRng, nextLevel)
            i = i - 1 + subRng.Rows.Count
        ElseIf nextLevel < curLevel Then
            Exit For
        End If
    Next
    Set traverseList = curRng.Resize(i)
End Function

Private Function columnPosition(itemRow As Range, level As Integer) As Integer
    columnPosition = 0
    Dim c As Range
    For Each c In itemRow.Cells
        If Not IsEmpty(c) Then Exit Function
        columnPosition = columnPosition + 1
    Next
End Function


Private Function doGroup(ByVal rng As Range, level As Integer) As Range
    rng.Rows.Group
    Set doGroup = rng
End Function

引用返信 編集キー/
■98344 / inTopicNo.2)  Re[1]: エクセルのVBAでのエラーの原因と対処方法について
□投稿者/ くま (24回)-(2021/11/03(Wed) 14:14:35)
ソースをコピーしてExcel2013試してみました

> 2B-8D を選択して
2Bから8Dをセル範囲選択で実行したところ
エラーを起こさずアウトラインが設定されました。

> 実行すると400 というエラーが発生します。

Excel VBA で エラーコード 400は
エラー 400「既にフォームは表示されています。モーダルにできません。」
となります。

これはフォームが既に開いている際、再度同じフォームを開こうとすると発生します。

考えられるのは何か別のコードと重なってうまく動作していない可能性です。
新規のファイルで試して同じ症状が発生するか試してみてください。
引用返信 編集キー/
■98345 / inTopicNo.3)  Re[2]: エクセルのVBAでのエラーの原因と対処方法について
□投稿者/ 初心者 (4回)-(2021/11/03(Wed) 14:39:56)
No98344 (くま さん) に返信

> 考えられるのは何か別のコードと重なってうまく動作していない可能性です。
> 新規のファイルで試して同じ症状が発生するか試してみてください。

同じ症状が発生します。
ほかには何も開いていません。

ステップインというのがあったので試してみました。
どうすれば次の行に進めるのかわかりませんでしたが、
やっと次の行に進めることができたのですが、

nextLevel = Application.Run(probe, subRng.Rows(1), curLevel)

の後エラーが発生します。

引用返信 編集キー/
■98346 / inTopicNo.4)  Re[3]: エクセルのVBAでのエラーの原因と対処方法について
□投稿者/ くま (25回)-(2021/11/03(Wed) 15:13:26)
2021/11/03(Wed) 15:14:30 編集(投稿者)

1. 同じ症状が発生します。
新しいExcelファイルに提示されたVBAのソースコードのみを記載して試しても同じという事ですね。

2. エラーが発生した場合下記URLに記載にあるメッセージが表示されるのですか?
https://extan.jp/?p=2991
https://extan.jp/wp-content/uploads/2020/11/112620_1606_2.png

違う場合、メッセージボックスに書かれている内容をすべて記載下さい。

あと可能性はExcel自体の問題で
a. https://plaza.rakuten.co.jp/mscrtf/diary/201303120000/
b. https://br.atsit.in/ja/?p=40362

a. b. の順番で試してみてください。
引用返信 編集キー/
■98347 / inTopicNo.5)  Re[4]: エクセルのVBAでのエラーの原因と対処方法について
□投稿者/ 初心者 (5回)-(2021/11/03(Wed) 15:35:27)
No98346 (くま さん) に返信


> 新しいExcelファイルに提示されたVBAのソースコードのみを記載して試しても同じという事ですね。

はいそうです。

>
> 2. エラーが発生した場合下記URLに記載にあるメッセージが表示されるのですか?
> https://extan.jp/?p=2991
> https://extan.jp/wp-content/uploads/2020/11/112620_1606_2.png
>
> 違う場合、メッセージボックスに書かれている内容をすべて記載下さい。
>

メッセージは表示されません。
下記の
> a. https://plaza.rakuten.co.jp/mscrtf/diary/201303120000/
のページの先頭の図と同じで400だけが表示されています。


> あと可能性はExcel自体の問題で
> a. https://plaza.rakuten.co.jp/mscrtf/diary/201303120000/
> b. https://br.atsit.in/ja/?p=40362
>
> a. b. の順番で試してみてください。

aは同じ設定になっています。

  ちなみに

  Sub Sample_Macro()
   MsgBox TypeName(Selection)
  End Sub

  というマクロを実行するとセルを選んだときは Range 貼り付けた写真は Picture と表示されます。
  なので、マクロは有効になっているのではないかと思います。

bは開発というタブはありますが、開発者というタブは見当たりません。
また、開発タブの中に「ビジュアル エディターオプション」は見当たりません。



引用返信 編集キー/
■98348 / inTopicNo.6)  Re[5]: エクセルのVBAでのエラーの原因と対処方法について
□投稿者/ くま (26回)-(2021/11/03(Wed) 16:11:58)
> 400だけが表示されています
どうもExcel自体の問題みたいですね

確認なのですが、初心者さんのつかわれているPCにはOffice製品(Excel、Word、PowerPoint、Accessなど)
2013版だけインストールされている状態ですか?
また以前別バージョンのOffice製品が入ってた事はありますか?

> b. https://br.atsit.in/ja/?p=40362
> bは開発というタブはありますが、開発者というタブは見当たりません。
> また、開発タブの中に「ビジュアル エディターオプション」は見当たりません。
URL内
1]の手順ですね。これは初めに試した手順なので飛ばしてもらって構いません。
2]を試してください。
3]はすでに試したのでスキップしてもらって構いません。
4]5]は
https://support.microsoft.com/ja-jp/office/office-2019-office-2016-%E3%81%BE%E3%81%9F%E3%81%AF-office-2013-%E3%82%92%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E3%81%97%E3%81%A6%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%BE%E3%81%9F%E3%81%AF%E5%86%8D%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B-7c695b06-6d1a-4917-809c-98ce43f86479
を参考にすると良いかと思います。

引用返信 編集キー/
■98371 / inTopicNo.7)  Re[6]: エクセルのVBAでのエラーの原因と対処方法について
□投稿者/ 初心者 (7回)-(2021/11/08(Mon) 10:52:20)
No98348 (くま さん) に返信


> 2013版だけインストールされている状態ですか?
はい

> また以前別バージョンのOffice製品が入ってた事はありますか?
いいえ

> 1]の手順ですね。これは初めに試した手順なので飛ばしてもらって構いません。

飛ばします。

> 2]を試してください。

開発タブはありますが、開発者タブはありません。
開発タブの中にマクロセキュリティの項目もありません。

> 3]はすでに試したのでスキップしてもらって構いません。

飛ばします。

> 4]5]は
> https://support.microsoft.com/ja-jp/office/office-2019-office-2016-%E3%81%BE%E3%81%9F%E3%81%AF-office-2013-%E3%82%92%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E3%81%97%E3%81%A6%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%BE%E3%81%9F%E3%81%AF%E5%86%8D%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B-7c695b06-6d1a-4917-809c-98ce43f86479
> を参考にすると良いかと思います。

アドミニの権限がありませんので、インストールはできません。

引用返信 編集キー/
■98374 / inTopicNo.8)  Re[7]: エクセルのVBAでのエラーの原因と対処方法について
□投稿者/ くま (28回)-(2021/11/08(Mon) 12:54:42)
> 2]を試してください。
[VBA プロジェクト オブジェクト モデルへのアクセスを信頼する(V)]
にチェックを入れて[OK]で設定を保存してみてください。
その後動作確認したら成功・失敗かかわらず再度チェックを外して[OK]で設定を保存
再度動作確認してみてください。

https://plaza.rakuten.co.jp/mscrtf/diary/201303120000/

http://thumbnail.image.shashinkan.rakuten.co.jp/shashinkan-core/thumbnail/?title=e03.jpg&pkey=01757b1d0aceec632247b0e56f9bc8a78b1b1aa7.78.2.2.2a1.jpg&atlTitle=Excel%E3%81%A7%E3%83%9E%E3%82%AF%E3%83%AD%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E3%81%A8%E3%80%8C400%E3%80%8D%E3%81%A8%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E5%87%BA%E3%82%8B%EF%BC%88Excel%202013%EF%BC%89&atlUrl=https%3A%2F%2Fplaza.rakuten.co.jp%2Fmscrtf%2Fdiary%2F201303120000%2F%3Fscid%3Dwi_blg_shashinkan_thumb001

> アドミニの権限がありませんので、インストールはできません。
困りましたね。Excel(Office)のソフト登録情報が正常ではないのでこの現象が起きています。
再インストール(修復)または一度削除してからの再度インストールができないと復旧できませんね...
上記方法でダメな場合、アドミニの権限のある方に事情を説明して依頼するしかないと思われます。
引用返信 編集キー/
■98376 / inTopicNo.9)  Re[8]: エクセルのVBAでのエラーの原因と対処方法について
□投稿者/ 初心者 (8回)-(2021/11/09(Tue) 15:19:00)
No98374 (くま さん) に返信
>>2]を試してください。
> [VBA プロジェクト オブジェクト モデルへのアクセスを信頼する(V)]
> にチェックを入れて[OK]で設定を保存してみてください。
> その後動作確認したら成功・失敗かかわらず再度チェックを外して[OK]で設定を保存
> 再度動作確認してみてください。
>
結果は同じでした。

>>アドミニの権限がありませんので、インストールはできません。
> 困りましたね。Excel(Office)のソフト登録情報が正常ではないのでこの現象が起きています。
> 再インストール(修復)または一度削除してからの再度インストールができないと復旧できませんね...
> 上記方法でダメな場合、アドミニの権限のある方に事情を説明して依頼するしかないと思われます。

他のPCで2013が入っているものも2016が入っているものも試してみましたが全て同じエラーになりました。
いずれも Application.Run でエラーが出ます。
全部インストールエラーなのか、それともインストール時に特殊な設定をしなければならないのか
再インストールしてもらっても現状と変わらないと思います。

調べてみると

Application.Run の代わりに CallByName が利用できるような記事を見かけました。
CallByName を使う方法を教えてくれませんか?





引用返信 編集キー/
■98377 / inTopicNo.10)  Re[9]: エクセルのVBAでのエラーの原因と対処方法について
□投稿者/ 古谷 (15回)-(2021/11/09(Tue) 19:52:37)
No98376 (初心者 さん) に返信
> Set subRng = Application.Run(doProc, subRng, nextLevel)

↑を↓こうじゃあかんかね

Set subRng = doGroup(subRng, nextLevel)

Application.Runをググってみたけど他のブック中にあるプロシージャを呼ぶときに使うみたいね
同じブックなら普通に呼んでいんじゃないかな
引用返信 編集キー/
■98378 / inTopicNo.11)  Re[10]: エクセルのVBAでのエラーの原因と対処方法について
□投稿者/ 古谷 (16回)-(2021/11/09(Tue) 19:57:28)
> nextLevel = Application.Run(probe, subRng.Rows(1), curLevel)
ここも
nextLevel = columnPosition(subRng.Rows(1), curLevel)

引用返信 編集キー/
■98383 / inTopicNo.12)  Re[9]: エクセルのVBAでのエラーの原因と対処方法について
□投稿者/ PATIO (14回)-(2021/11/10(Wed) 13:56:52)
2021/11/10(Wed) 14:01:50 編集(投稿者)

No98376 (初心者 さん) に返信
> 調べてみると
>
> Application.Run の代わりに CallByName が利用できるような記事を見かけました。
> CallByName を使う方法を教えてくれませんか?

VBAを覚えたいという目的でやっておられるのであれば、
内容を理解する所から始めた方が良いです。
そうではなくて単純に使えればよいという話なのであれば話も変わってきます。

で、使おうとしているマクロは元々の内容から色々省略されたものだと思います。
なぜ、Application.Runを使っているのか疑問に思ったので調べて見ましたが、
元々は probe とか、doProc を外部から与えて各処理の呼び出し先を変更したいからですね。
なので、変更の必要がないのであれば、古谷さんが書かれている通り、
Application.Runを使う意味は全くありません。
むしろ、呼び出し先のプロシージャを直接呼び出した方がわかり易いし、混乱も招きません。

VBAを覚えたいわけではなくて単に使いたいのにうまく動かないからどうにかしたいという話なら
元のマクロの作者に訊いた方が早いと思います。
ブログを立ち上げている方のようなので連絡方法はあると思いますので。
元の作成者であれば、どういう意図で書かれたコードなのかも把握しているので
ここで一から説明するよりも話が早いです。
引用返信 編集キー/
■98385 / inTopicNo.13)  Re[10]: エクセルのVBAでのエラーの原因と対処方法について
□投稿者/ 初心者 (9回)-(2021/11/11(Thu) 09:24:48)
No98383 (PATIO さん) に返信

VBA初心者です。

データがたくさんあり、手でツリーにするには多すぎて、
そこで、VBAならできるということがわかって、ネットで調べて
とりあえず動かしたかったので、質問させていただきました。

もちろんおっしゃる通りで、これをきっかけに今まで
時間かけて我慢していた手作業をVBAで時短できればと思って
勉強をしています。と、いうより、始めました。

実務と勉強をしていきたいと思いますが、
自分でできる範囲であれば、実務に活かせることができますが、
今回のようにレベルが高すぎると、現状では追いつきません。

また、何かあれば質問等すると思いますが、
よろしくお願いします。


引用返信 編集キー/
■98428 / inTopicNo.14)  Re[11]: エクセルのVBAでのエラーの原因と対処方法について
□投稿者/ 初心者 (10回)-(2021/11/15(Mon) 13:48:54)
ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -