タグ付けされた質問 「vba」

7
VBAからC#に移行するチームメンバーの質問
バックグラウンド 昨年、約10人のユーザーのビジネス計画に使用するツールの作成を依頼されました。これは、作業を「下請け」する別のITチームに代わって行われ、プロジェクトの締め切りが彼らの側で少し計画外であるため、私はそれを少し急いで実装しなければなりませんでした。 当時、私たちは、VBAを使用してExcelブックを作成し、ユーザーがこのVBAが強化されたブックをイントラネットからダウンロードしてPCで使用するのが最も簡単な方法であると判断しました。この場合、Excelは制約でした。使用する計画システム(データベース)は、計画ワークブックを開くと同時にロードする必要があるExcelアドインを介してのみ対話できるためです。ただし、当時のVBAは制約ではありませんでした。 約4,000行のVBAコードを作成したワークブックで、データレイヤーとプレゼンテーションレイヤーを分離しようとしましたが、プロジェクトの締め切りのためにすべてのケースでできませんでした。正直に言って、このワークブックを作成することを誇りに思っていますが、同時に、コーディングとユーザーへの展開の両方の面で、より良くできたという点で少しがっかりしています。 今日 今日に戻ると、ITチームが再び同じようなワークブックをリクエストするようになりました(したがって、上記の他のワークブックの一部を再利用できます)が、今回ははるかに複雑で、より多くのユーザーに使用されます(約200)。 ただし、今回は少し計画が良く、計画を立てる時間がもう少しあることがわかります。これに基づいて、100人のユーザー向けのプログラミングは10人のユーザー向けよりも影響が大きいため、ソリューションとインフラストラクチャについて考えました。したがって、既存のコードをC#ソリューションに移行して、コードをより洗練された方法で管理できるようにすることを検討することをチームに提案しました。VSTO / Excel-DNAを使用して作成され、ユーザーに展開できるアドインとしてまだ検討中です。 私はこれを2週間前にITチームと話し合い、すべてが順調であるように見えましたが、昨日まで、チームの1人(VBAまたはC#を知らない)から、この新しいプロジェクトをC#で開始するのではなく、前と同じアプローチ。彼らの懸念のいくつかは次のとおりです。 これはかなり重要なプロジェクトであるため、動作する必要があります。C#ソリューションは、既存のVBAベースのソリューションほど安定しておらず、動作しません。 VBAソリューションで行った[I]処理を破棄し、C#でゼロから再作成する必要があります。 誰かがVBAとC#の2つの別々のソリューションをサポートする必要があります。[実際、彼らは現在サポートのための誰かを持っていません、私は通常介入します]。 今、私は彼らの懸念のいくつかをある程度理解することができますが、次のステップと彼らに何を戻すべきかについて決定する必要があります。個人的には、C#で実装したいと思います。なぜなら、このような「エンタープライズ」ソリューションを構築する方が良いと思うからです。さらに、私はこの機会にC#のスキルを磨きたいと思います。私は現在C#の能力がVBAほどではないので、このようなプロジェクトを「次のレベル」に引き上げたいと思っています。 私は、C#ソリューションがこのプロジェクトに適していると確信させるために使用できるポイントのリストを用意しました。 単体テスト。 ソース管理。 コードのドキュメント-他のサポート担当者への知識の伝達。 コーディング規則の改善-ReSharperなどを使用して、命名と構造を強化できます。 IDEの改善-エラーの強調表示によるミスの減少。 アセンブリによるモジュール性の向上-将来のツールでの再利用を促進できます。 管理された展開-このツールの使用者を制御できます。 質問:説得するために他にどのような点を追加できますか?それとも、このプロジェクトで噛むことができる以上に噛み砕こうとしていますか?とにかく静かにしてVBAでやるべきですか? 「新しい」または「クールな」と思われるため、新しい言語に移行するだけでは判断の根拠にならないため、それを判断ポイントとして含めることを拒否しています。 また、私は言語としてのC#とVBAのリテラル比較を求めていません。SOには多くの比較があるからです。

4
Microsoftが.NETを直接統合するのではなく、Office製品にVBAを同梱するのはなぜですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 VBAコードから.NETコードを呼び出すことは可能ですが、VBAが存在し続けるのはなぜですか?私が考えることができる唯一の理由はレガシーです。 並べ替えるだけScripting.Dictionaryで、必要なコードの量は恐ろしいものでした。 IDEはVisual Studio 2003のように見えます。そして、多くの小さな詳細があり、それはあなたを狂わせます(行の変更のように、コンパイルエラーのために警告を受け取ります)。または、複数のスプレッドシートを開くと、「VBAProject」に混ざってしまい、本当に混乱します。 モジュール/クラスモジュール/フォームの分割全体は実際にはそれほど悪くはありませんが、フォームに直接ロジックを書くか、すべてを処理する1つの巨大なモジュールを持つことになります。 Alt + F11を押してC#をハックできないのはなぜですか?
12 .net  vba 

5
ドロップダウンラベルでByRefとByValを参照するにはどうすればよいですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 4年前休業。 MSDNのページのByRefやByValキーワードは非常に有用ではありません。なんとかスキップしない限り、どこでも単に「キーワード」と呼ばれています。 主な要因の一つRubberduckのプロジェクトは非常にクールに取り組んでいるカプセル化フィールドのリファクタリングを、と私はのドロップダウン上記のラベルに問題が持っている以外UIはかなりきれい..沿って来ているByRef/ ByVal「アクセシビリティ」と言う、と。 私は他の場所でそれを使用しているので、私は「アクセシビリティ」好きではないPublic/ Private/ Friendそれは、より正確な感じアクセス修飾子。 IMOは「アクセス修飾子」の略なので、「修飾子」を使用したくありません。 そのラベルを正確にしたいのですが、語彙が不足しているようで、これらのキーワードを何と呼ぶべきかわかりません。 正確に言うと、このラベルは何を言うべきですか?私が探している言葉は何ですか?「キーワードの家族は」何をByRef/ ByValに属し?
9 naming  ui  vba 

6
パフォーマンスと再利用性
パフォーマンスを犠牲にすることなく再利用可能な関数を作成するにはどうすればよいですか?関数を再利用可能にする方法で関数を記述したい(たとえば、データ環境について仮定しない)状況に繰り返し直面していますが、プログラムの全体的な流れを知っているので、最も効率的ではありません。方法。たとえば、株式コードを検証するが再利用可能な関数を記述したい場合、レコードセットが開いているとは限りません。ただし、関数が呼び出されるたびにレコードセットを開いたり閉じたりすると、数千行をループするときにパフォーマンスに大きな影響が出る可能性があります。 だからパフォーマンスのために私は持っているかもしれません: Function IsValidStockRef(strStockRef, rstStockRecords) rstStockRecords.Find ("stockref='" & strStockRef & "'") IsValidStockRef = Not rstStockRecords.EOF End Function しかし、再利用性のためには、次のようなものが必要になります。 Function IsValidStockRef(strStockRef) Dim rstStockRecords As ADODB.Recordset Set rstStockRecords = New ADODB.Recordset rstStockRecords.Open strTable, gconnADO rstStockRecords.Find ("stockref='" & strStockRef & "'") IsValidStockRef = Not rstStockRecords.EOF rstStockRecords.Close Set rstStockRecords = Nothing End Function 数千行/レコードにわたるループ内から呼び出されたときに、そのレコードセットを開いたり閉じたりするパフォーマンスへの影響は深刻ですが、最初の方法を使用すると、関数の再利用性が低下するのではないかと心配です。 …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.