2017-02-06 8 views
-1

私はひどい打撃を受けましたが、私の検索は今まで役に立っていませんでした。VBA変数に値(のみ)を割り当てます

私はその後、2つのコピーの結果を比較し、コピーするいくつかの計算を実行し、別のコピーを取り、他のいくつかの計算を実行しようとする関数に渡されるバリアントを持っている...

しかし、私は1つのコピーで計算を実行し、元のバリアントも操作されます.2つのコピーと2つの計算の後、私はお互いに等しく、オリジナルとは異なる3つの変種で終わります。

私はNewVar = OldVarを使用すると、実際に元のオブジェクトへの参照を取っているので、これが起こっていると思います。私が実際に望んでいるのは、元のオブジェクトの独立した複製を作ることです。つまり、関数delcarationのbyvalに似た変数の値をコピーします。

私のコードはhttps://1drv.ms/x/s!AiPgb0BH-YZ_ga956eMmJbSdihGjygにリンクされています。

あなたがmodMainのライン67上の休憩を入れた場合は、私がままにCutList(1).QTYをしたい...あなたはライン67をステップ実行するとき、両方のQTYが減少値がわかりますCutTrial.RemainingCuts(1).QTYCutList(1).QTY(元の変数)を見て、変更されておらず、CutTrial.RemainingCuts(1).QTYは詐欺だけです。

提案がありますか?あなたはそれが参照を変更します見られるよう

+3

あなたが持つ問題を抱えている実際のコードを含めるために、質問を編集してください。 – Comintern

+0

modMainの54行目では、CutTrial.RemainingCuts = cutListを設定しているので、両方とも同じオブジェクトを指しています。この時点で新しいオブジェクトを作成し、CutTrail.RemainingCutsに割り当てる必要があります。 – Amorpheuses

+0

@Amorpheuses - これは私が見ている動作です。私はあなたの提案をショットを与えるでしょう - ありがとう。 – GerHick

答えて

0

DoMagic(何かとしてByVal変数)

公開機能を次のように関数の定義があることを確認しByRefの使用またはしないでください。

オブジェクト、配列、またはコレクションを使用している場合は、使用する前に最初にコピーする必要があります。次のような

例:何か:

Public Function Clone() As Class1 
Set Clone = New Class1 
Clone.prop1 = prop1 
Clone.PrivateThing = PrivateThing 
End Function 
+0

これは、渡された 'Variant'に参照型が含まれていない場合の唯一の解決策です。 – Comintern

+0

正解、私は答えを更新しました。 – rolls

+0

それでも 'Object'では動作しません。 'ByVal'と' Object'は*ポインタ*を渡します。 – Comintern

関連する問題