問題タブ [listobject]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
1127 参照

excel - コマンドライン アプリケーションから Excel ListObject を更新する

コマンドライン アプリケーションを使用して、Excel アドイン (コード 1 の例) によって作成されたワークブックでホストされている listObject の情報を更新しようとしています。

Excel のインスタンスを作成してすべての listObject にアクセスしようとしましたが、GetVstoObject は常に null オブジェクトを返します。セキュリティ上の問題だと思いますが、解決方法がわかりません。(コード 2 の例)。

ServerDocumentsを試してみましたが、CachedDataがなく、アプリケーション アドイン レベルでは使用できません。なにか提案を?

前もって感謝します。

コード1

Code2 参照: Microsoft.Office.Interop.Excel、Microsoft.Office.Tools.Common.v9.0、Microsoft.Office.Tools.Excel.v9.0、Microsoft.Office.Tools.v9.0、Microsoft.VisualStudio.Tools .Applications.Runtime.v9.0、System.Windows.Forms (それが必要 ¿?)

0 投票する
8 に答える
9457 参照

vba - Excel VBA ListRows.Add が失敗する

おそらく単純なものが欠けているのでしょうが、ListRows.Add は私に悲しみを与えています。関数は次のとおりです。

ほとんどの場合、これで問題なく動作します。ただし、関数がワークシートの特定のテーブルで実行されるたびに、ListRows.Add への呼び出しに続く行は実行されず (少なくともデバッガーはそれを示します)、行はテーブルに追加されません。何か考え/アイデアはありますか?

アップデート:

投稿以来、私が学んだことは次のとおりです。Sub にスタブ データをフィードすると、正常に動作します。例えば:

注: getTableObject はワークシートを循環し、一致する名前の ListObject を返します。

コードが呼び出されるコンテキストを扱う問題のようです。失敗した場合、数式 (関数呼び出し) がさまざまなワークシートのさまざまなセルに配置されています。数式には、他のセルのデータへの参照が含まれています。他のセルのデータが変更されると、式が呼び出され、上記の addEmployee Sub が呼び出されます。失敗するケースです。

0 投票する
0 に答える
2619 参照

c# - .Net C#Microsoft.Office.Interop.ExcelListObjectはデータソースを非同期で更新します

C#でメッセージングアプリケーションをセットアップしていて、非同期で受信したメッセージをリストに追加します。私はMicrosoft.Office.Interop.Excel名前空間のみを使用しており、VSTO拡張機能は使用していないため、listobjectで問題が発生します。

私がやりたいのは、以下のメソッドを使用してリストオブジェクトを作成し、タイマーオブジェクトを使用してExcelスプレッドシートに書き込むことです。

メインプログラムでは、メッセージング部分を開始した後、listobjectを取得し、それをタイマーに渡してスプレッドシートを更新します。

タイマーオブジェクトが毎秒DoSomethingメソッドを呼び出すときに、どうすればよいですか?

VSTOでは、次のことを行います。

VSTO拡張機能なしで次のことを行うにはどうすればよいですか?

0 投票する
1 に答える
1668 参照

excel - VSTO Excel:ファイルを再度開くときにListObjectデータソースを復元する

私はExcel2010テンプレートプロジェクトに取り組んでいます。私のテンプレートにはListObject、それぞれに静的コントロールが含まれるシートがたくさんあります。を初期化ListObjectするために、をバインドして、パブリックプロパティBindingList<MyCustomType>ごとに列を生成します。ユーザーがのいくつかの行を使用すると、インスタンスが自動的にいっぱいになるMyCustomTypeため、非常に便利です。プログラムがEDMを介してこれらの行を検証およびコミットできるように、Excelリボンにボタンを追加しました。これは、Excelシートの1つの起動イベントハンドラーでデータをListObjectにバインドする方法です。ListObjectBindingList

今私の問題は、このテンプレートのユーザーが多くのセッションでこれらの行を入力する可能性が非常に高いということです。これは、彼がデータを入力し、ファイルを保存し、閉じ、再度開き、いくつかの新しい行を入力し、最終的には完了したと思ったときにこれらの行をコミットしようとすることを意味します。私が気付いたのは、テンプレートから作成されたExcelファイルを再度開くと、ListObjectコントロールのDataSourceプロパティがnullになることです。ListObjectつまり、からデータをに戻す方法がありませんBindingList<MyCustomType>MyCustomType私は検索してきましたが、それを自動的に行う方法が見つかりませんでした。すべての列をクロールしてインスタンスを再作成するコードを作成したくありません。理想的な世界では、私はこのようにしたでしょう。

私はこれについて多くの研究を行ってきましたが、解決策を見つけることができなかったので、あなたの何人かがこの問題を解決するのを手伝ってくれることを願っています。

ありがとう。

0 投票する
2 に答える
3460 参照

performance - Excel リスト オブジェクト VBA のパフォーマンス バグ?

リスト オブジェクト (別名 Excel テーブル) を使用する Excel アプリケーションのパフォーマンスに問題があります。バグの可能性があると思いますが、グーグルで検索しても、それに関する参照は見つかりませんでした。私はすでに自分のアプリケーションの回避策を開発しましたが、私が興味を持っているのは、なぜこれが起こるのかについて誰かが洞察できるかどうかです.

注: Windows Vista で Excel 2007 を使用しています。セットアップは次のとおりです。 リスト オブジェクトにデータを保持するスプレッドシートがあり、コマンド ボタンから起動できる VBA コードがあります。このコードは、ワークシートの任意の数のセルに対して複数の編集を行う可能性があるため、編集前に Excel の計算モードを [手動] に設定します。

私が遭遇した問題は、現在アクティブなセルがリスト オブジェクト内にある場合、計算モードを手動に設定してもまったく効果がないように見えることです。そのため、ユーザーがたまたま重い計算ブックを同じインスタンスで開いている場合、VBA コードの実行速度は非常に遅くなります。これがアクティブなセルによって引き起こされていることを発見するために、実際にはアプリケーションを分解する必要がありました。そして、このシナリオの単純なバージョンで新しいワークブックを作成して、アプリケーションに何らかの破損がないことを確認しました。

私はこれを使って多くのテストケースを行ってきました.以下は私が見つけた結果です:

  1. 一般的には計算に関係しているように見えますが、手動と自動で計算モードを切り替えると、まだ時間差があります...

    • 手動 = 7.64 秒
    • 自動 = 9.39 秒

    手動モードは、自動よりも 20% 未満高速です。しかし、問題は手動モードでも計算が開始されるように思われることを考えると、それらは多かれ少なかれ同じになると予想していました。

  2. アクティブ セルがリスト オブジェクト上にない場合と比較すると、結果は大きく異なります...

    • 手動 = 0.14 秒
    • 自動 = 3.23 秒

    現在、手動実行は 50 倍高速であり、自動実行では計算に 3.2 秒以上かかることはありませんでした! したがって、最初のテストでは、手動モードでは計算が 2 回実行され、自動モードではほぼ 3 回計算が実行されたように見えます。

  3. このテストをもう一度繰り返します。今度はどのセルにも計算式がないインスタンスで、突然それほど悪くないように見えます。

    • アクティブ セルが List オブジェクトで、Calc が手動 = 0.17 秒
    • アクティブ セルが List オブジェクトで、Calc が自動 = 0.20 秒
    • アクティブ セルが空で、Calc が手動 = 0.14 秒
    • アクティブなセルは空で、計算は自動 = 0.18 秒

    まだ遅くはありますが、現在は 10 ~ 20% に過ぎず、目立たなくなりました。しかし、これは、問題が何らかの方法で計算に関連している必要があることを示しています。それ以外の場合は、最初のテストと同じくらい時間がかかったはずです。

これらのテストを作成して自分で確認したい場合は、次のようにセットアップします。

  • リスト オブジェクトが追加された新しいワークブック (データにリンクする必要はありません)
  • 計算にしばらく時間がかかる数式を追加します(「= 1 * 1」を30,000回繰り返しました)
  • 簡単な VBA コードを記述します。(i) セルの単純な編集を数百回ループし、(ii) かかった時間を記録します。
  • 次に、リストオブジェクトと空のセルの間でアクティブセルを変更しながらコードを実行します

Excel がこのように動作する理由を誰かが説明できるかどうか、また、それがバグなのか、それとも実際に実際に使用されている List Objects に関する機能なのかを聞いてみたいと思います。

ありがとう、スチュアート

0 投票する
2 に答える
36539 参照

arrays - VBAを使用してExcelテーブルに値を挿入する適切な方法は何ですか?

VBAコードを使用して、Excelの空のテーブルに大量の値のセットを挿入できるようにする必要があります。これまでのコードの仕組みは次のとおりです。

まず、ユーザーがユーザーフォームに値を入力します。次に、コードはテーブルをクリアしてから移動し、コードにすでに含まれているルックアップ基準に基づいて数値の範囲を見つけます。取得されたデータはすべて単一の列に含まれ、配列のように格納されます。

ここから、すべての値をテーブルの特定の列に配置する必要があります(ポリシー番号)。したがって、テーブルの行を拡張して、取得したデータのセットに含まれる行の数を増やします。(必要に応じて、カウントはすでに「AC」として個別に保存されています)挿入する列のヘッダーは「ポリシー番号」です。

コードの現時点ではテーブルに空白行しかないことを念頭に置いて、データを正しく挿入するにはどうすればよいですか?私はもう試した

しかし、それは機能しません。ちなみに、Alsは値の配列です。通常、配列を挿入するには、同じサイズの範囲に挿入する必要があります。そのため、行数をすでにACと見なしています。

私も使ってみましたが、それもうまくいきませんrange("commissionstatement").listobject.listrows

何かアドバイス?このように実際にデータをそこに配置する前に、追加するデータの数に等しい数の行をテーブルに挿入する必要がありますか...

続いてデータを挿入しますか?

さらに情報が必要な場合はお知らせください。ありがとう!

0 投票する
2 に答える
2433 参照

excel - Excel で ListObject の範囲を使用してセルを検証するにはどうすればよいですか?

ListObject にある行の値を使用して、セルを検証しようとしています (リスト型の検証)。検証コードで名前付き範囲を使用すると、機能します。しかし、名前付き範囲参照をListObject参照に置き換えると、エラーがスローされます。

ListObject を使用してセルを検証できますか?

これは、名前付き範囲を使用して機能する私がやっていることです:

しかし、値を置き換えて、次のFormula1:=ような有効なリスト オブジェクトを指すようにすると、次のようになります。

... エラーが発生します。また、UI からこれを実行しようとしましたが、機能しません。

ListObject を使用してセルを検証できませんか?

0 投票する
2 に答える
38814 参照

excel - VBAを介してExcelリストオブジェクト/テーブルの計算列式を追加/変更/削除します

Excelテーブル(つまりListObject)の列に数式を手動で入力すると、オートコレクトはこの数式を列全体に適用します。

VBAを介してこの動作を制御する方法はありますか?つまり、この式を何らかの方法で変更/削除/追加できますか?

オブジェクトの数式を簡単に変更できることはわかっていListObject.ListColumns(1).DataBodyRangeますが、これにより、以前に手動で入力した値が上書きされますが、UIで数式を変更すると、これは変更されません...

0 投票する
2 に答える
2630 参照

excel - Excel VBA:計算列を確認する方法は?

Excelのテーブル(ListObject)の特定の列が計算列であるかどうかをVBAでチェックインする方法はありますか(http://office.microsoft.com/en-us/excel-help/use-calculated-columns-のように) in-an-excel-table-HA010342380.aspx)?

計算列には、各行に同じR1C1数式が設定されるだけでなく、新しい行が追加されると自動拡張されることに注意してください(データ本体の範囲全体を削除してから、いくつかの新しい行を再作成すると、再入力されます)。したがって、一貫した数式を含む列をチェックすることは、計算された数式をチェックすることと同じではありません。

列を計算することも可能ですが、行の1つを他の数式または値で上書きし、自動拡張機能を保持することもできます。

したがって、これは列のプロパティである必要があるとかなり確信しています。VBAを介してどこにアクセスできるかわかりません。VBAオブジェクトモデルを介して公開されていない場合、この情報を取得するための回避策はありますか?

よろしくお願いします、カルロス

編集:Excel Office Open XMLファイルを掘り下げましたが、探しているのはxl \ Tables \ table*.xmlファイル<calculatedColumnFormula>の定義の要素であることがわかりました。<tableColumn>VBAを介してそれに到達する方法はありますか?

EDIT2:これは私が思いついたテストケースのサンプルファイルです。VBAは、列1、2、および3が計算列であり、列4および5は計算されていないことを通知する必要があります。